32  Cosas a calcular

  1. Promedio mensual de To del máximo diario (memo)
  2. Mes más cálido con la To promedio mensual (Lili)
  3. Amplitud diaria de la To (Fer ipn)
  4. Quartiles mensuales de la Ig (Nairo)
  5. Calcular la Ib a partir de la Ig, Id (rodolfo)
  6. Humedad promedio semanal (Luisa)
  7. Promedio mensual de la To mínima (Mitsue)
  8. Promedio diario mensual de la velocidad máxima del viento (Andre)
  9. Promedios mensual de la Ig y su visualización (Laura)
  10. Calcular la curva de la radiación solar del día más cálido (Fer ier)
  11. Dia promedio de todas las variables con máximos, minimos y desviacion estándard (yadira)
  12. Calculo diario/mensual/anual de la energia solar
import pandas as pd
import matplotlib.pyplot as plt
f = "../data/002_processed/esolmet_2018.parquet"
esolmet = pd.read_parquet(f)
To_diaria_promedio = esolmet.To.resample("D").mean()
esolmet["amplitud"] = (
    esolmet.To.resample("D").max() - 
    esolmet.To.resample("D").min()
).resample("MS").mean()
esolmet["Tpromedio"] = esolmet.To.resample("MS").mean()
esolmet.amplitud = esolmet.amplitud.ffill()
esolmet.Tpromedio = esolmet.Tpromedio.ffill()
esolmet
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-01 00:00:00 0.057 0.0 0.0 0.001 18.93 41.57 1.253 879.0692 15.112258 20.019848
2018-01-01 00:10:00 0.002 0.0 0.0 0.001 18.76 41.00 0.418 879.4363 15.112258 20.019848
2018-01-01 00:20:00 0.170 0.0 0.0 0.001 18.92 40.96 0.955 879.5181 15.112258 20.019848
2018-01-01 00:30:00 0.371 0.0 0.0 0.001 18.52 42.46 1.823 879.5826 15.112258 20.019848
2018-01-01 00:40:00 0.305 0.0 0.0 0.001 18.49 42.43 2.149 879.6826 15.112258 20.019848
... ... ... ... ... ... ... ... ... ... ...
2018-12-31 23:10:00 0.125 0.0 0.0 0.000 18.88 59.60 2.145 875.5595 13.576452 20.362943
2018-12-31 23:20:00 0.000 0.0 0.0 0.000 18.71 59.67 1.638 875.5595 13.576452 20.362943
2018-12-31 23:30:00 0.044 0.0 0.0 0.000 18.52 58.75 1.923 875.2889 13.576452 20.362943
2018-12-31 23:40:00 0.170 0.0 0.0 0.000 18.36 60.62 2.089 875.0606 13.576452 20.362943
2018-12-31 23:50:00 0.003 0.0 0.0 0.000 17.99 60.76 0.744 875.1424 13.576452 20.362943

51173 rows × 10 columns

esolmet["Tpromedio"] = esolmet.To.resample("MS").mean()
esolmet["Tpromedio"] = esolmet.Tpromedio.ffill()
esolmet
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-01 00:00:00 0.057 0.0 0.0 0.001 18.93 41.57 1.253 879.0692 15.112258 20.019848
2018-01-01 00:10:00 0.002 0.0 0.0 0.001 18.76 41.00 0.418 879.4363 15.112258 20.019848
2018-01-01 00:20:00 0.170 0.0 0.0 0.001 18.92 40.96 0.955 879.5181 15.112258 20.019848
2018-01-01 00:30:00 0.371 0.0 0.0 0.001 18.52 42.46 1.823 879.5826 15.112258 20.019848
2018-01-01 00:40:00 0.305 0.0 0.0 0.001 18.49 42.43 2.149 879.6826 15.112258 20.019848
... ... ... ... ... ... ... ... ... ... ...
2018-12-31 23:10:00 0.125 0.0 0.0 0.000 18.88 59.60 2.145 875.5595 13.576452 20.362943
2018-12-31 23:20:00 0.000 0.0 0.0 0.000 18.71 59.67 1.638 875.5595 13.576452 20.362943
2018-12-31 23:30:00 0.044 0.0 0.0 0.000 18.52 58.75 1.923 875.2889 13.576452 20.362943
2018-12-31 23:40:00 0.170 0.0 0.0 0.000 18.36 60.62 2.089 875.0606 13.576452 20.362943
2018-12-31 23:50:00 0.003 0.0 0.0 0.000 17.99 60.76 0.744 875.1424 13.576452 20.362943

51173 rows × 10 columns

esolmet.loc["2018-01-31 23:40":"2018-02-01 01:00"]
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-31 23:40:00 0.081 0.0 0.0 0.001 15.28 53.26 2.083 878.6181 15.112258 20.019848
2018-01-31 23:50:00 0.075 0.0 0.0 0.001 15.32 52.38 2.500 878.3397 15.112258 20.019848
2018-02-01 00:00:00 0.003 0.0 0.0 0.001 15.38 53.71 1.531 878.2341 15.353929 23.522289
2018-02-01 00:00:00 0.003 0.0 0.0 0.001 15.38 53.71 1.531 878.2341 15.353929 23.522289
2018-02-01 00:10:00 0.313 0.0 0.0 0.001 15.71 50.03 2.339 878.1605 15.353929 23.522289
2018-02-01 00:20:00 0.029 0.0 0.0 0.001 15.57 51.52 2.836 877.9796 15.353929 23.522289
2018-02-01 00:30:00 0.013 0.0 0.0 0.001 15.23 52.00 2.780 877.9725 15.353929 23.522289
2018-02-01 00:40:00 0.001 0.0 0.0 0.001 15.28 51.80 2.541 878.0463 15.353929 23.522289
2018-02-01 00:50:00 0.065 0.0 0.0 0.001 15.38 50.84 2.434 878.1319 15.353929 23.522289
2018-02-01 01:00:00 0.086 0.0 0.0 0.001 15.41 51.53 2.271 878.2111 15.353929 23.522289
esolmet.loc["2018-01-31 00:00":"2018-02-01 01:00"]
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-31 00:00:00 0.264 0.0 0.0 0.001 14.04 42.97 2.628 879.9633 15.112258 20.019848
2018-01-31 00:10:00 0.138 0.0 0.0 0.001 14.12 43.45 2.650 880.0983 15.112258 20.019848
2018-01-31 00:20:00 0.000 0.0 0.0 0.001 14.03 43.86 1.230 880.0222 15.112258 20.019848
2018-01-31 00:30:00 0.000 0.0 0.0 0.001 13.59 44.24 2.009 879.8823 15.112258 20.019848
2018-01-31 00:40:00 0.005 0.0 0.0 0.001 13.74 44.24 1.560 879.8358 15.112258 20.019848
... ... ... ... ... ... ... ... ... ... ...
2018-02-01 00:20:00 0.029 0.0 0.0 0.001 15.57 51.52 2.836 877.9796 15.353929 23.522289
2018-02-01 00:30:00 0.013 0.0 0.0 0.001 15.23 52.00 2.780 877.9725 15.353929 23.522289
2018-02-01 00:40:00 0.001 0.0 0.0 0.001 15.28 51.80 2.541 878.0463 15.353929 23.522289
2018-02-01 00:50:00 0.065 0.0 0.0 0.001 15.38 50.84 2.434 878.1319 15.353929 23.522289
2018-02-01 01:00:00 0.086 0.0 0.0 0.001 15.41 51.53 2.271 878.2111 15.353929 23.522289

152 rows × 10 columns

33 Promedio mensual de To del máximo diario (memo)

esolmet.To.resample("D").max()
Fecha
2018-01-01    29.30
2018-01-02    28.89
2018-01-03    28.12
2018-01-04    28.30
2018-01-05    29.57
              ...  
2018-12-27    26.92
2018-12-28    27.70
2018-12-29    30.01
2018-12-30    27.76
2018-12-31    27.31
Freq: D, Name: To, Length: 365, dtype: float64
esolmet.To.resample("D").max().resample("ME").mean()
Fecha
2018-01-31    28.455484
2018-02-28    31.873929
2018-03-31    34.029355
2018-04-30    33.984333
2018-05-31    31.782333
2018-06-30    30.436667
2018-07-31    29.096774
2018-08-31    28.932258
2018-09-30    28.838333
2018-10-31    29.023871
2018-11-30    27.871667
2018-12-31    27.880645
Freq: ME, Name: To, dtype: float64
fig, ax = plt.subplots(figsize=(12,4))


ax.plot(esolmet.To.resample("D").max().resample("ME").mean(),"ro-",label="Tmax")
ax.plot(esolmet.To.resample("D").max().resample("ME").max(),"ro-",label="",alpha=0.2)
ax.plot(esolmet.To,"r-",label="",alpha=0.1)

ax.legend()

esolmet
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-01 00:00:00 0.057 0.0 0.0 0.001 18.93 41.57 1.253 879.0692 15.112258 20.019848
2018-01-01 00:10:00 0.002 0.0 0.0 0.001 18.76 41.00 0.418 879.4363 15.112258 20.019848
2018-01-01 00:20:00 0.170 0.0 0.0 0.001 18.92 40.96 0.955 879.5181 15.112258 20.019848
2018-01-01 00:30:00 0.371 0.0 0.0 0.001 18.52 42.46 1.823 879.5826 15.112258 20.019848
2018-01-01 00:40:00 0.305 0.0 0.0 0.001 18.49 42.43 2.149 879.6826 15.112258 20.019848
... ... ... ... ... ... ... ... ... ... ...
2018-12-31 23:10:00 0.125 0.0 0.0 0.000 18.88 59.60 2.145 875.5595 13.576452 20.362943
2018-12-31 23:20:00 0.000 0.0 0.0 0.000 18.71 59.67 1.638 875.5595 13.576452 20.362943
2018-12-31 23:30:00 0.044 0.0 0.0 0.000 18.52 58.75 1.923 875.2889 13.576452 20.362943
2018-12-31 23:40:00 0.170 0.0 0.0 0.000 18.36 60.62 2.089 875.0606 13.576452 20.362943
2018-12-31 23:50:00 0.003 0.0 0.0 0.000 17.99 60.76 0.744 875.1424 13.576452 20.362943

51173 rows × 10 columns

Mes más cálido con la To promedio mensual (Lili)

esolmet.To.resample("ME").mean().max(),  esolmet.To.resample("ME").mean().idxmax()
(np.float64(26.052599537037036), Timestamp('2018-04-30 00:00:00'))
def identifica_To_mes_calido(esolmet:pd.DataFrame, columna:str = "To")-> (float, float):
    """
    Recibe un df que tiene un indice que es datetime 
    y regresa en una tupla el valor máximo promedio To_max y el mes en el que sucede mes_max
    """
    To_max = esolmet[columna].resample("ME").mean().max()
    mes_calido = esolmet[columna].resample("ME").mean().idxmax().month
    return To_max, mes_calido
maximos = identifica_To_mes_calido(esolmet,columna="hr")
maximos
(np.float64(74.50158759546402), 9)
To_max, mes_max = identifica_To_mes_calido(esolmet,columna="hr")
# print(To_max)
# print(mes_max)

34 Amplitud diaria de la To (Fer ipn)

deltaTo_diaria = esolmet.To.resample("D").max() - esolmet.To.resample("D").min()
fig, ax = plt.subplots(figsize=(12,4))

ax.plot(esolmet.To.resample("D").mean() + deltaTo_diaria/2,"r-",label="")
ax.plot(esolmet.To.resample("D").mean() - deltaTo_diaria/2,"r-",label="")
ax.plot(esolmet.To.resample("D").mean())
ax.plot(esolmet.To, alpha=0.2)

esolmet
Ib Ig Id uv To hr ws p amplitud Tpromedio
Fecha
2018-01-01 00:00:00 0.057 0.0 0.0 0.001 18.93 41.57 1.253 879.0692 15.112258 20.019848
2018-01-01 00:10:00 0.002 0.0 0.0 0.001 18.76 41.00 0.418 879.4363 15.112258 20.019848
2018-01-01 00:20:00 0.170 0.0 0.0 0.001 18.92 40.96 0.955 879.5181 15.112258 20.019848
2018-01-01 00:30:00 0.371 0.0 0.0 0.001 18.52 42.46 1.823 879.5826 15.112258 20.019848
2018-01-01 00:40:00 0.305 0.0 0.0 0.001 18.49 42.43 2.149 879.6826 15.112258 20.019848
... ... ... ... ... ... ... ... ... ... ...
2018-12-31 23:10:00 0.125 0.0 0.0 0.000 18.88 59.60 2.145 875.5595 13.576452 20.362943
2018-12-31 23:20:00 0.000 0.0 0.0 0.000 18.71 59.67 1.638 875.5595 13.576452 20.362943
2018-12-31 23:30:00 0.044 0.0 0.0 0.000 18.52 58.75 1.923 875.2889 13.576452 20.362943
2018-12-31 23:40:00 0.170 0.0 0.0 0.000 18.36 60.62 2.089 875.0606 13.576452 20.362943
2018-12-31 23:50:00 0.003 0.0 0.0 0.000 17.99 60.76 0.744 875.1424 13.576452 20.362943

51173 rows × 10 columns

deltaTo_diaria = (
    esolmet.To.resample("D").max() - 
    esolmet.To.resample("D").min()
).resample("ME",closed="right").mean() 

fig, ax = plt.subplots(figsize=(12,4))

ax.plot(esolmet.To,"r-",alpha=0.3)
ax.fill_between(esolmet.index, 
                esolmet.Tpromedio + esolmet.amplitud/2,
                esolmet.Tpromedio -esolmet.amplitud/2,
               )

esolmet.To.hist(bins=50)

deltaTo_diaria
Fecha
2018-01-31    15.112258
2018-02-28    15.353929
2018-03-31    15.435806
2018-04-30    14.948667
2018-05-31    12.143333
2018-06-30    11.999667
2018-07-31    14.802258
2018-08-31    11.357097
2018-09-30    11.137667
2018-10-31    11.472581
2018-11-30    12.017333
2018-12-31    13.576452
Freq: ME, Name: To, dtype: float64