¿La lluvia predice lluvia? Datos meteorológicos de Estados Unidos y la correlación entre la lluvia de hoy y mañana

¿La lluvia predice lluvia? Datos meteorológicos de Estados Unidos y correlación entre lluvia hoy y mañana.

Presentando conjuntos de datos útiles sobre el clima y validando una predicción de calentamiento global

Foto de Wim van ’t Einde en Unsplash

Resumen

Durante un tramo aburrido de junio y julio en Boston, parecía que llovía cada vez que mi familia había planeado hacer algo divertido. Empezamos a preguntarnos si estábamos atrapados en un patrón de lluvia y nos preguntamos: “¿El hecho de que haya llovido mucho durante tres días seguidos hace que sea probable que llueva mañana?” Me di cuenta de que esta pregunta es fácil de responder utilizando los datos meteorológicos disponibles.

Este artículo presenta los conjuntos de datos meteorológicos de EE. UU. que utilicé, el programa Python/pandas que escribí para analizar los datos y los resultados. En resumen, sí, un tramo de días lluviosos predice fuertemente más lluvia. Y, sorprendentemente, cuanto más largo sea el tramo de lluvia, más probable es que llueva al día siguiente. Los resultados también demuestran una predicción de los modelos de calentamiento global: ahora llueve más que en años anteriores.

Datos

Hay dos conjuntos de datos clave sobre la precipitación pluvial de la Administración Oceánica y Atmosférica de los Estados Unidos (NOAA). Utilicé Datos de Precipitación por Hora (HPD). La página de descripción es generalmente útil, pero el enlace al conjunto de datos está equivocado y apunta a una versión anterior. El nuevo conjunto de datos está aquí y cubre el período de 1940 a 2022. (Se agregarán datos para 2023). HPD tiene una granularidad fina con cantidades de precipitación por hora de más de 2000 estaciones de recolección en todo Estados Unidos. Los archivos de datos contienen todos los años para una estación en cada archivo CSV. Solo utilicé los totales diarios, pero la información por hora podría ser útil para análisis futuros.

¿Qué sucede cuando nieva en lugar de llover? La acumulación de nieve se derrite para encontrar la cantidad equivalente de lluvia. Por lo tanto, todos los datos en HPD incluyen lluvia líquida, nieve derretida y todo lo que hay en medio, como barro y granizo.

Hay otro conjunto de datos valioso llamado Datos Climatológicos Locales (LCD) que se podría utilizar para un análisis similar. LCD contiene mucha más información que solo la precipitación y también incluye temperatura, salida/puesta de sol, presión atmosférica, visibilidad, velocidad del viento, niebla, humo, resúmenes mensuales y más. LCD se actualiza diariamente, por lo que contiene los datos de ayer. Para utilizarlo, es necesario decodificar los números de estación del Conjunto Integrado de Superficie (ISD).

Programa de análisis

El programa de análisis de lluvia está escrito en Python/pandas. Escribí el código para que sea legible tal como está, pero vale la pena explorar algunas características específicas.

El programa puede leer la lista completa de estaciones de HPD o una lista específica de estaciones desde un archivo de texto. Esta característica se utiliza para volver a ejecutar el programa con varios parámetros y asegurarse de utilizar las mismas estaciones exactas que en una ejecución anterior.

from rain_helpers import ALL_STATION_FILESSTATION_LIST_INPUT = "/Users/chuck/Desktop/Articles/hpd_stations_used_list_1940-1950.txt"ALL_STATIONS = True  # ¿utilizar todas las estaciones o una lista específica?# Elija entre todas las estaciones que conocemos o una lista específica de estaciones (generalmente de una ejecución anterior de este programa)if (ALL_STATIONS):    station_files = ALL_STATION_FILESelse:    with open(STATION_LIST_INPUT, 'r') as fp:          data = fp.read()        station_files = data.split("\n")        fp.close()

Otra característica útil es la capacidad de elegir un subconjunto de los archivos de estación. Puede ejecutar el código muy rápidamente con 1/100 de las estaciones para depurar, o algo similar a 1/3 para una aproximación precisa de los resultados. Según la Ley de los Grandes Números, mis pruebas con 1/3 (alrededor de 600 estaciones) produjeron resultados que son casi idénticos al conjunto de datos completo.

SKIP_COUNT = 3 # 1 = no omitir ninguna.for i in range (0, len(station_files), SKIP_COUNT):        station_url = HPD_LOCAL_DIR + station_files[i]     stationDF = pd.read_csv(station_url, sep=',', header='infer', dtype=str)

Otra mejora de velocidad es descargar todos los archivos de estaciones en su máquina local, para no tener que obtenerlos de NOAA cada vez. El conjunto completo es de aproximadamente 20 GB. Si no tiene este espacio adicional, el código se ejecuta perfectamente mientras lee desde la nube.

HPD_CLOUD_DIR = "https://www.ncei.noaa.gov/data/coop-hourly-precipitation/v2/access/"  # Datos de Precipitación Horaria (HPD)HPD_LOCAL_DIR = "/Users/chuck/Desktop/Articles/NOAA/HPD/"station_url = HPD_LOCAL_DIR + station_files[i]  # alternar entre local y en la nube

La parte más complicada del código es buscar hacia atrás en cada fecha para ver si ha llovido durante varios días anteriores. El problema es que los datos a buscar están dentro del mismo DataFrame, una autoasociación. Es tentador usar un bucle sobre el DataFrame y, para cada fila, buscar las fechas anteriores a medida que avanza. Pero los bucles sobre estructuras de datos grandes son de mala práctica en cualquier lenguaje de programación, especialmente en pandas. Mi código resuelve este problema tomando una instantánea del DataFrame, creando campos en cada fila que contienen las nueve fechas anteriores (y una para mañana), y luego utilizando esos campos para hacer una asociación con la instantánea.

    # Tomar una instantánea para una autoasociación posterior. Ajustar los nombres de los campos para evitar confusiones después de la asociación.    stationCopyDF = stationDF    stationCopyDF = stationCopyDF[["ESTACIÓN","FECHA","DlySumToday"]]  # mantener solo lo que necesitamos    stationCopyDF = stationCopyDF.rename({"DlySumToday":"DlySumOther", "FECHA":"FECHAother"}, axis='columns')      # Agregar algunas otras fechas, para las cuales obtendremos datos de lluvia.    stationDF["FECHA_menos9"] = stationDF["FECHA"] - pd.offsets.Day(9)    stationDF["FECHA_menos8"] = stationDF["FECHA"] - pd.offsets.Day(8)    ...    stationDF["FECHA_menos1"] = stationDF["FECHA"] - pd.offsets.Day(1)    stationDF["FECHA_más1"] = stationDF["FECHA"] + pd.offsets.Day(1)    # Asociar otros datos de lluvia al registro base. Ajustar los nombres de las columnas para dejar claro lo que hemos hecho.    stationDF = stationDF.merge(stationCopyDF, how='inner', left_on=["ESTACIÓN","FECHA_menos9"], right_on = ["ESTACIÓN","FECHAother"])    stationDF = stationDF.rename({"DlySumOther":"DlySum9DíasAtrás"}, axis='columns')      stationDF = stationDF.drop(columns=["FECHAother"])    stationDF = stationDF.merge(stationCopyDF, how='inner', left_on=["ESTACIÓN","FECHA_menos8"], right_on = ["ESTACIÓN","FECHAother"])    stationDF = stationDF.rename({"DlySumOther":"DlySum8DíasAtrás"}, axis='columns')      stationDF = stationDF.drop(columns=["FECHAother"])    ....        stationDF = stationDF.merge(stationCopyDF, how='inner', left_on=["ESTACIÓN","FECHA_menos1"], right_on = ["ESTACIÓN","FECHAother"])    stationDF = stationDF.rename({"DlySumOther":"DlySum1DíaAtrás"}, axis='columns')      stationDF = stationDF.drop(columns=["FECHAother"])    stationDF = stationDF.merge(stationCopyDF, how='inner', left_on=["ESTACIÓN","FECHA_más1"], right_on = ["ESTACIÓN","FECHAother"])    stationDF = stationDF.rename({"DlySumOther":"DlySumMañana"}, axis='columns')      stationDF = stationDF.drop(columns=["FECHAother"])

Después de obtener las precipitaciones de los días anteriores en cada fila, el código encuentra fácilmente la duración de cada período lluvioso. Hay que tener en cuenta que al calcular cuántos días ha estado lloviendo, hoy cuenta como un día.

    stationDF["DíasDeLluvia"] = 0       stationDF.loc[(stationDF["DlySumToday"] >= LLUVIOSO), "DíasDeLluvia"] = 1    stationDF.loc[(stationDF['DlySumToday'] >= LLUVIOSO) & (stationDF['DlySum1DíaAtrás'] >= LLUVIOSO), 'DíasDeLluvia'] = 2    stationDF.loc[(stationDF['DlySumToday'] >= LLUVIOSO) & (stationDF['DlySum1DíaAtrás'] >= LLUVIOSO) & (stationDF['DlySum2DíasAtrás'] >= LLUVIOSO), 'DíasDeLluvia'] = 3    ... etc

Resultados

Utilizando los años 2000 a 2021 inclusive, hay 1808 estaciones con datos válidos, con 8,967,394 puntos de datos (una fecha, ubicación y cantidad de lluvia).

  • La precipitación promedio en todos los puntos de datos fue de 0.0983 pulgadas, o aproximadamente 1/10 de pulgada.
  • La fracción de días lluviosos (≥ 0.5 pulgadas) fue del 6.2%.
  • La fracción de días secos (≤ 0.05 pulgadas) fue del 78.0%.

La respuesta a la pregunta original que motivó este proyecto es:

Sí, los días lluviosos predicen lluvia mañana. Cuanto más tiempo haya estado lloviendo (hasta 8 días), más probable es que vuelva a llover.

Y un resultado relacionado…

Los días lluviosos predicen cuánta lluvia se espera mañana. Cuanto más tiempo haya estado lloviendo (hasta 7 días), es más probable que haya más lluvia mañana.

Dos gráficos muestran este resultado.

Probabilidad de lluvia mañana vs. Días de lluvia (imagen por Autor)
Cantidad de lluvia mañana vs. Días de lluvia (imagen por Autor)

Realicé experimentos con diferentes configuraciones para “día lluvioso”, cambiándolo de 0.5 pulgadas a 0.75 y 1.0. Estos cambios muestran el mismo fenómeno general de los días lluviosos que predicen más lluvia, pero sin una correlación perfecta durante ocho días. La definición de “lluvioso” como 0.5 pulgadas parece ser el punto óptimo para predecir la lluvia de mañana.

Te preguntarás dónde podría llover durante 10 días seguidos. En 22 años en todo Estados Unidos, con casi nueve millones de puntos de datos, solo hubo 118 períodos de tal clima. Algunos de los lugares fueron: Boca Raton, FL; San Juan, PR; Kahuna Falls, HI; Kaumana, HI; Kihalani, HI; Paakea, HI; Pascagoula, MS; Quinault, WA; y Quilcene, WA.

Los días consecutivos de sequía (< 0.05 pulgadas de lluvia) también se correlacionan bien con la sequedad del día siguiente, pero la predicción no es tan fuerte porque las probabilidades de un día seco mañana son muy similares entre sí. La probabilidad de un día seco mañana siempre está cerca de la media general del 78%.

Los días consecutivos de sequía son algo mejores para predecir la cantidad de lluvia esperada al día siguiente.

Cantidad de lluvia mañana vs. Días de sequía (imagen por Autor)

Cambio climático

Una pregunta obvia relacionada es si los resultados descritos aquí han cambiado a medida que la temperatura de la Tierra aumenta debido al cambio climático. Realicé el mismo análisis de datos de EE. UU. desde 1940 hasta 1960, desde 1960 hasta 1980 y desde 1980 hasta 2000.

El resultado central es el mismo: los días lluviosos predicen más lluvia. Los números exactos son ligeramente diferentes en cada período de tiempo, pero no cambian la fuerte correlación. Por ejemplo, desde 1960 hasta 1980, hubo 1388 estaciones con datos válidos y 6,807,917 puntos de datos, con estos resultados:

Fracción de días lluviosos después de 1 día lluvioso = 17.3%Fracción de días lluviosos después de 2 días lluviosos = 19.6%Fracción de días lluviosos después de 3 días lluviosos = 27.4%Fracción de días lluviosos después de 4 días lluviosos = 37.1%Fracción de días lluviosos después de 5 días lluviosos = 43.8%Fracción de días lluviosos después de 6 días lluviosos = 51.5%Fracción de días lluviosos después de 7 días lluviosos = 52.4%

Un corolario más importante, predicho por los modelos de cambio climático, es que a medida que la Tierra se calienta, lloverá más. El conjunto de datos HPD puede verificar esto, al menos en los últimos 80 años.

El enfoque simple sería tomar todas las estaciones climáticas actuales (aproximadamente 2000) y analizar los datos de lluvia durante cada década. Pero hay un posible sesgo al hacer eso. Ahora hay más estaciones meteorológicas de las que había en 1940, ya que se han agregado gradualmente estaciones en los últimos 80 años. Es posible que se hayan construido estaciones más nuevas en lugares lluviosos. Si ese es el caso, los datos más nuevos mostrarían más lluvia, pero solo porque el conjunto general de estaciones es más húmedo que el conjunto de 1940.

Un enfoque más preciso es encontrar el conjunto de estaciones que tenían datos de lluvia en la década de 1940 y luego usar las mismas estaciones para cada década. Mi programa puede hacer esto porque emite la lista de estaciones utilizadas en cada ejecución. Entonces primero encontré datos para los años 1940 a 1950 y luego reutilicé la lista de estaciones emitida nuevamente para 1950 a 1960, luego 1960 a 1970, etc. Esto es alrededor de 840 estaciones con entre 400K y 2.5M puntos de datos en las diferentes décadas.

La precipitación promedio en cada década debería ser muy cercana, nuevamente por la Ley de los Grandes Números. Pero el gráfico a continuación muestra una lluvia significativamente aumentada en las mismas estaciones de recolección. Este es un resultado notable que respalda una predicción clave de los modelos de calentamiento global.

Promedio de precipitación vs. Década (imagen del autor)

Para más información

https://www.weather.gov/rah/virtualtourlist – Cómo el Servicio Meteorológico Nacional de EE. UU. realiza pronósticos.

https://www.ncdc.noaa.gov/cdo-web/datasets – Resumen de los conjuntos de datos de la Administración Oceánica y Atmosférica de EE. UU.

https://www.epa.gov/climate-indicators/climate-change-indicators-us-and-global-precipitation – Informe de la Agencia de Protección Ambiental de EE. UU. sobre el aumento de la precipitación debido al cambio climático.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Mejores generadores de música de IA (septiembre de 2023)

Los generadores de música de inteligencia artificial (IA) son programas informáticos que crean música. Esto se puede ...

Ciencia de Datos

¿Qué hace exactamente un Científico de Datos?

Como muestra este variado conjunto de descripciones de trabajo, puede resultar realmente difícil tener una idea clara...

Inteligencia Artificial

Mejorando el procesamiento inteligente de documentos de AWS con IA generativa

La clasificación, extracción y análisis de datos puede ser un desafío para las organizaciones que manejan volúmenes d...

Inteligencia Artificial

La Casa Blanca propone un programa de ciberseguridad para hogares inteligentes

El objetivo de la nueva certificación es ayudar a los consumidores a tomar decisiones.

Inteligencia Artificial

Las gafas transcriben el habla en tiempo real

Varias empresas han comenzado a comercializar 'gafas de subtitulación en vivo' para ayudar a los usuarios con discapa...

Inteligencia Artificial

Conoce a cinco innovadores en IA generativa en África y Oriente Medio

Los emprendedores están cultivando IA generativa desde la costa oeste de África hasta el borde oriental del desierto ...