3. Base de dades d’arbres¶
El fitxer arbres.csv conté les dades d’un conjunt d’arbres. Si llegim aquest fitxer mitjançant la següent comanda de pandas, obtenim un pandas.DataFrame com aquest:
>>> import pandas as pd
>>> df = pd.read_csv('arbres.csv', index_col='Tree_ID')
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 35924 entries, 27092 to 184808
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Address 35857 non-null object
1 Town 35079 non-null object
2 Species_Desc 35440 non-null object
3 Common_Name 33634 non-null object
4 Age_Desc 25630 non-null object
5 Height 26089 non-null object
6 Trunk 35909 non-null float64
7 Condition 34355 non-null object
dtypes: float64(1), object(7)
memory usage: 2.5+ MB
Descarregueu-vos el fitxer arbres.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 i valors que conté. Fixeu-vos que totes les columnes contenen valors desconeguts (missings). Les columnes Town, Species_Desc, Common_Name i Condition són, respectivament, la població, el nom científic, el nom comú i l’estat de conservació de l’arbre. Trunk és el diàmetre del tronc en centímetres i Height és el rang d’alçada en metres.
Les funcions que es demanen a continuació han de treballar amb un DataFrame qualsevol amb la mateixa estructura (índex numèric i columnes), però no necessàriament el mateix de l’exemple, poden correspondre a les dades d’un conjunt d’arbres qualsevol. Deseu les dues funcions al mateix mòdul bd_arbres (fitxer bd_arbres.py).
3.1. Funció gran_arbre (2 punts)¶
- bd_arbres.gran_arbre(df, pob, econs)¶
- Paràmetres:
- Tipus de retorn:
tupleamb tres valors- Retorna:
Nom comú, diàmetre del tronc i rang d’alçada de l’arbre amb tronc més gran de la població pob amb estat de conservació econs, segons consta en df. Si en df hi ha més d’un arbre que compleix aquestes condicions, retorna el primer d’ells.
Per exemple,
>>> df = pd.read_csv('arbres.csv', index_col='Tree_ID')
>>> nomc, diam, alt = gran_arbre(df, 'Santry', 'Dead')
>>> print(nomc, '---', diam, '---', alt)
Myrobalan (Purple) Plum --- 34.0 --- 5.1-10
>>> nomc, diam, alt = gran_arbre(df, 'Lusk', 'Good')
>>> print(nomc, '---', diam, '---', alt)
Silver Maple --- 313.0 --- 5.1-10
Disposeu de més jocs de proves al fitxer tests-garbre.txt.
3.2. Funció noms_comuns (1.5 punts)¶
- bd_arbres.noms_comuns(df)¶
- Paràmetres:
df (DataFrame) – Dataframe amb les dades d’un conjunt d’arbres com el de l’exemple
- Tipus de retorn:
dict, on tant les claus com els valors han de ser strings- Retorna:
Diccionari, en el qual les claus seran els noms científics dels arbres de df. Cada clau ha de tenir associat el seu nom comú (segons figura en df).
Cal excloure del diccionari retornat els valors nuls, tant de noms comuns com de noms científics.
Podeu suposar que a cada nom científic d’un arbre de df li correspon sempre el mateix nom comú.
Per exemple,
>>> df = pd.read_csv('arbres.csv', index_col='Tree_ID')
>>> noms_comuns(df.iloc[:1]) # cas d'un Dataframe amb una sola fila
{'Acer saccharinum': 'Silver Maple'}
>>> # Cas d'un dataframe amb 10 files; no conté valors nuls (NaN)
>>> noms_comuns(df.iloc[:10]) == {'Acer saccharinum': 'Silver Maple', 'Tilia cordata': 'Small-Leafed Lime', 'Sorbus aria': 'Whitebeam', 'Sorbus aucuparia': 'Rowan (Mountain Ash)', 'Acer pseudoplatanus': 'Sycamore'}
True
Disposeu de més jocs de proves al fitxer tests-ncomuns.txt.