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ó recompte (2 punts)¶
- bd_arbres.recompte(df, nomc, dmin, dmax)¶
- Paràmetres:
- Retorna:
Tuple amb tres enters:
nombre d’arbres de df de l’espècie indicada amb un diàmetre inferior a dmin
nombre d’arbres de df de l’espècie indicada amb un diàmetre entre dmin i dmax, ambdós inclosos
nombre d’arbres de df de l’espècie indicada amb un diàmetre superior a dmax
Com que en df hi pot haver valors desconeguts, si el paràmetre nomc és l’string buit, cal retornar aquestes dades per als arbres de nom científic desconegut.
Aneu amb compte amb els arbres de diàmetre de tronc desconegut, que no s’han d’incloure en el recompte.
Per exemple,
>>> df = pd.read_csv('arbres.csv', index_col='Tree_ID')
>>> recompte(df, 'Tilia cordata', 5, 10)
(264, 561, 1237)
>>> recompte(df, 'Fagus sylvatica', 10, 20)
(61, 88, 86)
>>> recompte(df, '', 7, 12) # cas d'arbres de nom científic desconegut
(437, 16, 27)
Disposeu de més jocs de proves al fitxer tests-recompte.txt.
3.2. Funció arbres_gruixuts (1.5 punts)¶
- bd_arbres.arbres_gruixuts(df, gruix)¶
- Paràmetres:
- Tipus de retorn:
- Retorna:
Nombre d’arbres amb un diàmetre de tronc superior a gruix cm, per cada rang d’alçades. Aquesta Series ha d’estar ordenada pel nombre d’exemplars. L’índex de la Series no ha de contenir valors nuls (NaN) ni rangs d’alçades pels quals no hi ha cap arbre amb gruix del tronc superior a l’indicat.
En altres paraules, la Series retornada tindrà com a índex els valors dels rangs d’alçades hi ha en df i com a valors el nombre d’arbres amb tronc de més de gruix cm. Per exemple,
>>> df = pd.read_csv('arbres.csv', index_col='Tree_ID')
>>> s = arbres_gruixuts(df, 25)
>>> isinstance(s, pd.Series) # comprovació que la funció retorna una Series
True
>>> list(s.index)
['Up to 5', '> 20.1', '15.1-20', '10.1- 15', '5.1-10']
>>> list(s.values)
[160, 211, 407, 3208, 4173]
>>> s = arbres_gruixuts(df.iloc[:1000], 50)
>>> list(s.index)
['5.1-10', '10.1- 15']
>>> list(s.values)
[1, 4]
Disposeu de més jocs de proves al fitxer tests-gruixuts.txt.