# -*- coding: utf-8 -*- """ Created on Mon Oct 13 20:00:52 2025 @author: rodri """ # Utilizamos el módulo Pandas (principalmente) para trabajar con datos import pandas as pd # %% # Cargamos los datos del archivo csv, ignorando la primer fila y tomando la # segunda como cabecera. # Recuerda que antes de cargar el archivo del INIA hay que chequear su contenido, # eliminando filas innecesarias DATOS_DIARIOS = pd.read_csv("La_Estanzuela.csv", skiprows=0, header=1) # Asigno a la columna Fecha como índice DATOS_DIARIOS = DATOS_DIARIOS.set_index('Fecha', drop=True) # Al indice le asigno el tipo de datos "datetime" DATOS_DIARIOS.index = pd.to_datetime(DATOS_DIARIOS.index, format='%Y-%m-%d') # Cualquier archivo que queramos cargar debe implementar minimamente las líneas anteriores # En este punto DATOS_DIARIOS se conoce como "DataFrame" es una estructura del módulo pandas. # En el explorador de variables se puede visualizar el contenido de este dataframe # %% # Si queremos visualizar rapidamente las series almacenadas en el dataframe "DATOS_DIARIOS" # podemos ejecutar DATOS_DIARIOS.plot(grid=True) # %% # Si queremos graficar solo una columna del DataFrame (una única variable), lo hacemos por su nombre. # podemos ver los nombres de las columnas desde el explorador de variables o ejecutando: print(DATOS_DIARIOS.columns) # %% # Por ejemplo, si queremos plotear la temperatura: ax = DATOS_DIARIOS['Temp. Aire Media (ºC)'].plot(grid=True) ax.set_title("Temperatura Media Diaria - La Estanzuela") # %% # Si quisieramos plotear un subset temporal: Temp = DATOS_DIARIOS['Temp. Aire Media (ºC)'] ax = Temp.loc['2023-01-01':'2023-12-31'].plot(grid=True) ax.set_title("Temperatura Media Diaria - La Estanzuela") ax.set_xlabel("Fecha") ax.set_ylabel("Temperatura °C") # %% # Estadisticos Ejemplo para la temperatura (en la celda referncié "Temp" a la temperatutra): promedio = Temp.mean() desviación_estandar = Temp.std() # %% # Puedo superponer esta información en un gráfico # ademas se muestra el uso de colores # https://matplotlib.org/cheatsheets/_images/cheatsheets-1.png # https://matplotlib.org/cheatsheets/_images/cheatsheets-2.png ax = Temp.plot(grid=True) ax.set_title("Temperatura Media Diaria - La Estanzuela") ax.set_xlabel("Fecha") ax.set_ylabel("Temperatura °C") # Linea de media climatológica (serie completa de 30 años) ax.axhline(y=promedio, color = 'C1') # 2 veces la desviación estandar climatológica ax.axhline(y=promedio+2*desviación_estandar, color = 'C2') ax.axhline(y=promedio-2*desviación_estandar, color = 'C2') # %% # Una grafica de frecuencia diaria para varios años muestra mucha información # Si queremos observar tendencias inter anuales es conveniente tomar la media anual # resample agrupa los valores según lo indicado en parentesis, en este caso # 'YS' (year start) y luego se calcula la media # a cualquer agrupación que se realice se le pueden calcular diferentes estadísticos, # como la media ( .mean() ), la suma ( .sum() ), desviación estandar ( .std() ), etc. TempAnual = Temp.resample('YS').mean() ax = TempAnual.plot(grid=True) ax.set_title("Temperatura Media Anual - La Estanzuela") ax.set_xlabel("Fecha") ax.set_ylabel("Temperatura °C") ax.set_ylim([15.5,17.5]) # %% # PRecipitación pp_inia = DATOS_DIARIOS['Precip. Acumulada (mm)'] # Precipitación acumulada Mensual pp_mensual_inia = pp_inia.resample('MS').sum() pp_mensual_inia.hist(bins=40) # %% # Serie mensual de precipitación ax = pp_mensual_inia.plot(grid=True) ax.set_title("Histograma de precipitaciíon") # %% pp_marcha = pp_mensual_inia.groupby(pp_mensual_inia.index.month).mean() # pp_marcha = pp_marcha ax = pp_marcha.plot.bar(grid=True) ax.set_xticks( [0,1,2,3,4,5,6,7,8,9,10,11], ['Ene', 'Feb', 'Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov', 'Dic']) ax.set_title("Marcha anual de Precipitación La Estanzuela") # %% ########################################################################## ############################################################################### # Ejemplo ERA5 # Temperatura # Cargo los datos y genero el dataframe con indice DATOS_ERA5_temp = pd.read_csv("reanalysis-era5-land-timeseries-sfc-2m-temperature02aizex_.csv", header=0) DATOS_ERA5_temp = DATOS_ERA5_temp.set_index('valid_time', drop=True) DATOS_ERA5_temp.index = pd.to_datetime(DATOS_ERA5_temp.index) # Observar en que unidades se encuentra la temperatura # %% Temp_ERA5_centigrados = DATOS_ERA5_temp['t2m'] - 273.15 Temp_ERA5_cent_anual = Temp_ERA5_centigrados.resample('YS').mean() ax = Temp_ERA5_cent_anual.plot(grid=True) ax.set_title("Temperatura Media Anual ERA5 - La Estanzuela") ax.set_xlabel("Fecha") ax.set_ylabel("Temperatura °C") ax.set_ylim([15.5,17.5]) # %% # Precipitación # la precipitación se encuentra en metros cubicos, multilicando por 1000 la pasamos a mm DATOS_ERA5_pp = pd.read_csv("reanalysis-era5-land-timeseries-sfc-pressure-precipitationfyvddsj0.csv", header=0) DATOS_ERA5_pp = DATOS_ERA5_pp.set_index('valid_time', drop=True) DATOS_ERA5_pp.index = pd.to_datetime(DATOS_ERA5_pp.index) # %% # Precipitación acumulada Mensual pp_era5_mensual = DATOS_ERA5_pp['tp'].resample('MS').sum() pp_era5_mensual.hist(bins=40) # %% # Serie mensual de precipitación ax = pp_era5_mensual.plot(grid=True) ax.set_title("Serie de precipitaciíon") # %% # Marcha anual pp_marcha_anual = pp_era5_mensual.groupby(pp_era5_mensual.index.month).mean() pp_marcha_anual = pp_marcha_anual*1000 ax = pp_marcha_anual.plot.bar(grid=True) ax.set_xticks( [0,1,2,3,4,5,6,7,8,9,10,11], ['Ene', 'Feb', 'Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov', 'Dic']) ax.set_title("Marcha anual de Precipitación")