Datos meteorológicos para análisis de datos

Los datos meteorológicos y las previsiones son cruciales en todos los aspectos de la vida diaria y afectan a muchos negocios: el tiempo juega uno de los roles más importantes en muchos sectores.

14. 11. 2022

Si necesitas trabajar con datos meteorológicos para tu análisis de datos, esta publicación te ayudará en el proceso. Utiliza los fundamentos de Python y Pandas para el análisis básico de datos meteorológicos. Aprenderás cómo combinar los datos meteorológicos con tus otros conjuntos de datos, realizar comprobaciones básicas de datos, generar gráficos simples y preparar un archivo para continuar trabajando con tus datos, como el ajuste de modelos.

En el ejemplo, utilizaremos un conjunto de datos que contiene datos aleatorios de transporte en minutos de varias empresas. Suponemos que ya has instalado Python en tu computadora y sabes cómo ejecutarlo e instalar bibliotecas utilizando el comando pip.

Preprocesa los datos para tu análisis

En primer lugar, deberás cargar tu conjunto de datos desde un archivo CSV guardado en tu PC.


   import numpy as np
   import pandas as pd
   from scipy import stats
   import matplotlib.pyplot as plt
   import seaborn as sns

   # Load data from csv
   df = pd.read_csv('tranportation_data.csv')

   # Show data sample to see what we have
   df
   

Esto te mostrará tus datos importados, que podrían verse como en nuestro ejemplo de conjunto de datos: nuestros datos de ejemplo contienen una marca de tiempo en formato UNIX (zona horaria UTC), distancia en millas y precio en USD:

Tiempo para análisis de datos

Dado que tenemos datos en formato de marca de tiempo UNIX, podemos convertirlos fácilmente a objetos de fecha y hora:


   df['time_stamp'] = pd.to_datetime(df['time_stamp'], unit='ms', origin='unix', utc=True)
   

Cómo agregar datos meteorológicos para tu análisis de datos

La forma más sencilla de agregar datos meteorológicos a tu conjunto de datos es a través de una API meteorológica utilizando una de las bibliotecas de envoltura fáciles de usar. Si estás utilizando Python, instala pymeteosource con soporte para Pandas utilizando el siguiente comando:


   pip3 install pymeteosource[pandas]
   

A continuación, necesitarás obtener tu clave de API única para poder descargar datos meteorológicos. Encontrarás más información sobre los datos y los planes de API en la página de planes y precios de la API.

Una vez que tengas lista tu clave de API, verifica las fechas para las cuales tienes los datos, de modo que sepas qué rango de tiempo necesitaremos extraer de Meteosource. Puedes descargar los datos directamente en tu zona horaria o convertirlos más tarde. Para nuestro ejemplo, descargaremos los datos meteorológicos en la zona horaria UTC y convertiremos la zona horaria al fusionar los datos.

Ejecuta los siguientes comandos para descargar tus datos meteorológicos:


   from datetime import datetime, timedelta
   from pymeteosource.api import Meteosource
   from pymeteosource.types import tiers, units

   # Change this to your actual API key
   YOUR_API_KEY = 'YOUR API KEY'
   # Change this to your actual tier
   YOUR_TIER = tiers.FLEXI

   # Initialize the main Meteosource object
   ms = Meteosource(YOUR_API_KEY, YOUR_TIER)

   # The date range for our dataset
   date_from = df.time_stamp.min().strftime('%Y-%m-%d')
   date_to = df.time_stamp.max().strftime('%Y-%m-%d')

   # Get the historical weather data
   tm = ms.get_time_machine(date_from=date_from, date_to=date_to,
                         place_id='boston', tz='UTC',
                         units=units.US)

   # Convert the result to pandas
   weather = tm.to_pandas()
   

Comprobación de datos y generación de gráficos

Ejecuta el siguiente comando para ver qué datos meteorológicos tenemos, simplemente podemos imprimir las columnas del marco de datos meteorológicos:


   # See what weather variables we have
   weather.columns
   

Si decides que solo necesitas algunas de las variables meteorológicas, puedes seleccionar solo aquellas que se correlacionen con tu conjunto de datos.


   # We only need some of the weather variables
   weather = weather[['cloud_cover_total', 'weather', 'precipitation_total', 'temperature', 'wind_speed']]
   

Ahora podemos visualizar algunos de los datos meteorológicos para verificar si son correctos.


   # Plot frequencies of weather types
   weather_cats = weather['weather'].value_counts().reset_index()
   weather_cats.columns = ['weather', 'count']

   sns.set(rc={'figure.figsize': (12, 6)})
   plt.xticks(rotation=90)
   sns.barplot(x=weather_cats['weather'], y=weather_cats['count'])
   
Datos meteorológicos para análisis de datos

El primer ejemplo (arriba) muestra la frecuencia de los tipos de tiempo predefinidos; esto nos dará una idea de qué tiempo es más común en nuestra ubicación y cómo estructurar nuestro análisis. También podemos ver la distribución de cualquier variable en nuestro conjunto de datos (ejemplo a continuación) para comprender mejor nuestros datos.


   # Plot distribution of weather data
   def normal(mean, std, color="black"):
       x = np.linspace(mean - 4 * std, mean + 4 * std, 200).clip(0, None)
       p = stats.norm.pdf(x, mean, std)
       z = plt.plot(x, p, color, linewidth=2)

   ax = sns.histplot(x=weather.wind_speed, stat="density")
   normal(weather.wind_speed.mean(), weather.wind_speed.std())
   
Datos meteorológicos para análisis de datos

Fusionar datos meteorológicos con tu conjunto de datos para análisis

Nuestros datos de la compañía de transporte con marcas de tiempo tienen una resolución en segundos, mientras que los datos meteorológicos que tenemos tienen una resolución por hora. Para fusionar los datos, debemos redondear las marcas de tiempo de los viajes a la hora más cercana. Luego fusionaremos los marcos de datos. Utilizaremos la columna "time_stamp" en los datos de transporte y el índice del conjunto de datos meteorológicos para realizar la fusión. Por último, convertiremos las fechas y horas a nuestra zona horaria local, por ejemplo, US/Eastern.


   # First we have to round the date_times in the transportation dataset to the nearest hour to match weather data
   df['time_stamp'] = df['time_stamp'].dt.round('H')

   # Now we can merge the data
   data = pd.merge(df, weather, left_on='time_stamp', right_index=True, how='left')

   # We can also convert the time_stamp column from UTC to local timezone (e.g. US/Eastern)
   data['time_stamp'] = data['time_stamp'].dt.tz_convert('US/Eastern')
   

¿Necesitas más datos meteorológicos para tu análisis de datos?

En el ejemplo, hemos discutido los fundamentos de la preparación de datos para tu análisis y cómo puedes utilizar bibliotecas de envoltura para trabajar fácilmente con los datos en Python. Si encuentras que necesitas más datos meteorológicos de los que se ofrecen en los planes estándar de Meteosource, por favor, contáctanos con tus necesidades. También ayudamos a empresas en diversos sectores con nuestros modelos aplicados de aprendizaje automático.

¿Te gusta este artículo?
Compartir con tus amigos