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:
  • df (DataFrame) – Dataframe amb les dades d’un conjunt d’arbres com el de l’exemple

  • pob (str) – Nom d’una població

  • econs (str) – Estat de conservació

Tipus de retorn:

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