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 DataFrame amb dades meteorològiques d’un mes.

Retorna:

instància de la classe Series amb 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ètode pandas.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 DataFrame amb 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.