4. Pandas (3 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:


>>> 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          5.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           0.0          6.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 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.

4.1. Dia més plujós (1 punt)

Dissenyeu la funció següent, que heu de desar al fitxer meteo.py:

var_temp_plujos(df)
Paràmetres:

df – una instància de DataFrame amb dades meteorològiques d’un mes.

Retorna:

un float que representa la variació de temperatura del dia més plujós, és a dir la diferència entre la temperatura màxima i la mínima del dia del mes que ha plogut més.

Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:


>>> from meteo import var_temp_plujos
>>> var_temp_plujos(df)
17.9

Disposeu de jocs de proves al fitxer tests-plujos.txt.

4.2. Recompte de direccions del vent (2 punts)

Dissenyeu la funció següent, que heu de desar al fitxer meteo.py:

direccions_vent(df)
Paràmetres:

df – una instància de DataFrame amb dades meteorològiques d’un mes.

Retorna:

un diccionari (dict) amb el recompte de valors de direcció del vent de la taula. Específicament, les claus del diccionari han de ser els valors de les direccions del vent (un string) i els valors el nombre de dies en què ha bufat el vent en cada direcció possible. El diccionari només ha de contenir les direccions del vent no enregistrades durant el mes. Ara bé, si en el DataFrame hi ha algun valor nul (NaN) com a direcció del vent, el diccionari ha de contenir la clau '???' i com a valor associat el nombre de lectures diàries de direcció del vent no vàlides (valors nuls).

Per exemple, essent df el dataframe de l’exemple de més amunt, la funció ha de respondre així:


>>> from meteo import direccions_vent
>>> d = direccions_vent(df)
>>> d == {'SSE': 8, 'NO': 8, 'E': 3, 'SE': 3, 'ONO': 2, 'ENE': 1, '???': 1, 'NNO': 1, 'NE': 1, 'O': 1, 'S': 1, 'SSO': 1}
True

Disposeu de jocs de proves al fitxer tests-vents.txt.