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

  • nomc (str) – Nom científic d’una espècie d’arbre

  • dmin – Diàmetre mínim, en cm

  • dmax – Diàmetre màxim, en cm

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

  • gruix (int) – diàmetre de tronc mínim

Tipus de retorn:

Series

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.