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. Vent fluix¶
La variació de temperatura diària és la diferència entre la temperatura màxima i la mínima enregistrades aquell dia. Es demana que dissenyeu la funció següent, que heu de desar al fitxer meteo.py:
- vent_fluix(df, llindar)¶
- Paràmetres:
df – instància de
DataFrameamb dades meteorològiques d’un mes.llindar – llindar de variació de la temperatura (un número).
- Retorna:
D’entre tots els dies en què la variació de temperatura ha superat el valor llindar, l’índex del dia en què el vent ha estat més suau, o sigui, aquell dia en què la mitjana de la velocitat del vent ha estat més petit. En cas que no hi hagi cap dia en què la variació de temperatura hagi superat el valor llindar, cal retornar -1.
Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:
>>> from meteo import vent_fluix >>> vent_fluix(df, 20) 21 >>> vent_fluix(df, 10) 15 >>> vent_fluix(df, 30) -1
Disposeu de jocs de proves al fitxer tests-vfluix.txt.
3.2. Pluja segons la direcció del vent¶
Volem conèixer si hi ha una relació entre la direcció del vent i la pluja. A tal fi, dissenyeu la funció següent, que heu de desar al fitxer meteo.py:
- dir_vent_pluja(df)¶
- Paràmetres:
df – instància de
DataFrameamb dades meteorològiques d’un mes.- Retorna:
diccionari (
dict) amb el total de litres per cada direcció del vent. És a dir, les claus del diccionari han de ser les direccions del vent (string) de df i els valors associats el total de pluja acumulada per cada direcció del vent.
Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:
>>> from meteo import dir_vent_pluja >>> dir_vent_pluja(df) == {'E': 2.6, 'ENE': 3.6, 'NE': 0.0, 'NNO': 0.0, 'NO': 6.0, 'O': 0.0, 'ONO': 5.7, 'S': 0.0, 'SE': 2.5, 'SSE': 11.2, 'SSO': 0.0} True
Disposeu de jocs de proves al fitxer tests-dirpluja.txt.