3. Pandas: meteorologia (4 punts)¶
Una estació meteorològica disposa de les dades recollides diàriament al llarg d’un mes en fitxers amb el format CSV. Si llegim un d’aquests fitxers mitjançant la següent comanda de pandas, obtenim un DataFrame com aquest:
>>> import pandas as pd
>>> df = pd.read_csv('meteo.csv', index_col=0)
>>> df.head(4)
TEMP_MITJ TEMP_MAX TEMP_MIN PRECIPITACIO V_VENT_MITJ V_VENT_MAX DIR_VENT
DIA
1 24.6 31.6 17.0 0.0 4.5 30.6 E
2 25.3 34.3 16.3 0.0 6.3 35.4 SE
3 26.0 34.8 17.1 2.5 8.6 38.6 SE
4 26.6 35.5 17.8 0.0 6.0 37.0 SSE
>>> df.tail(3)
TEMP_MITJ TEMP_MAX TEMP_MIN PRECIPITACIO V_VENT_MITJ V_VENT_MAX DIR_VENT
DIA
29 24.9 34.6 16.2 0.0 4.8 37.0 S
30 25.8 35.3 17.5 0.0 4.3 25.7 SSO
31 25.7 34.8 17.6 0.0 5.6 29.0 ONO
Descarregueu-vos el fitxer meteo.csv, proveu de llegir-lo en l’intèrpret de Python tal com s’indica en l’exemple de més amunt i examineu les columnes que conté. Observeu que les dades estan ordenades temporalment, essent l’índex el número del dia del mes, i que la taula pot contenir valors desconeguts en qualsevol cel·la. Les funcions que es demanen a continuació han de treballar amb un DataFrame qualsevol amb la mateixa estructura (índex numèric ordenat i columnes), però no necessàriament el mateix de l’exemple, poden ser dades de qualsevol mes.
3.1. Sensació tèrmica¶
Quan fa vent, les persones percebem que la temperatura és més baixa del que marca el termòmetre. Això es coneix amb el nom de sensació tèrmica per vent i fred. Per exemple, quan la velocitat del vent mitjana està entre 5 i 7, ambdós valors inclosos, la sensació tèrmica és 2.5 graus inferior a la temperatura mitjana.
Dissenyeu la funció següent, que heu de desar al fitxer meteo.py:
- sensacio_termica(df)¶
- Paràmetres:
df – instància de
DataFrameamb dades meteorològiques d’un mes.- Retorna:
instància de la classe
Seriesamb el valor de la sensació tèrmica pels dies de df en què la velocitat del vent ha estat entre 5 i 7, inclosos. El nom de la sèrie retornada ha de ser “STERM” (a tal fi, es recomana utilitzar el mètodepandas.Series.rename()).
Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:
>>> from meteo import sensacio_termica >>> sensacio_termica(df.loc[:10]) DIA 2 22.8 4 24.1 6 23.6 7 23.7 10 26.0 Name: STERM, dtype: float64
Disposeu de jocs de proves al fitxer tests-sterm.txt.
3.2. Ràfegues de vent¶
Volem saber quina és la direcció del vent en què es produeixen les ràfegues més fortes de vent. A tal fi, es demana que dissenyeu la funció següent, que heu de desar al fitxer meteo.py:
- rafegues_vent(df)¶
- Paràmetres:
df – instància de
DataFrameamb dades meteorològiques d’un mes.- Retorna:
diccionari amb els valors màxims de la velocitat del vent per cada direcció del vent . O sigui, les claus d’aquest diccionari seran les direccions de df i els valors associats la màxima velocitat del vent per cada direcció.
Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:
>>> from meteo import rafegues_vent >>> rafegues_vent(df) == {'E': 35.4, 'ENE': 25.7, 'NE': 35.4, 'NNO': 27.4, 'NO': 35.4, 'O': 37.0, 'ONO': 45.1, 'S': 37.0, 'SE': 41.8, 'SSE': 46.7, 'SSO': 25.7} True
Disposeu de jocs de proves al fitxer tests-rafegues.txt.