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 DataFrame amb 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 DataFrame amb 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.