Base de dades d'arbres ====================== .. Dades extretes de: https://data.smartdublin.ie/dataset/trees/resource/47d28489-44e5-4eee-93a8-a31e110f6cce?view_id=153603c7-be83-403d-b2a0-fdb14c1a4bd7 El mateix enllaç conté la descripció dels camps. .. py:module:: bd_arbres :noindex: El fitxer :download:`arbres.csv` conté les dades d'un conjunt d'arbres. Si llegim aquest fitxer mitjançant la següent comanda de :py:mod:`pandas`, obtenim un :py:class:`pandas.DataFrame` com aquest: .. literalinclude:: lectura-arbres.txt :language: pycon Descarregueu-vos el fitxer :download:`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 :py:class:`~pandas.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 :py:mod:`bd_arbres` (fitxer :file:`bd_arbres.py`). Funció `recompte` (2 punts) ----------------------------- .. function:: recompte(df, nomc, dmin, dmax) :param ~pandas.DataFrame df: Dataframe amb les dades d'un conjunt d'arbres com el de l'exemple. :param str nomc: Nom científic d'una espècie d'arbre :param dmin: Diàmetre mínim, en cm :param dmax: Diàmetre màxim, en cm :return: 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, .. literalinclude:: tests-recompte.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-recompte.txt`. Funció `arbres_gruixuts` (1.5 punts) ------------------------------------ .. function:: arbres_gruixuts(df, gruix) :param ~pandas.DataFrame df: Dataframe amb les dades d'un conjunt d'arbres com el de l'exemple. :param int gruix: diàmetre de tronc mínim :rtype: :py:class:`~pandas.Series` :return: 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, .. literalinclude:: tests-gruixuts.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-gruixuts.txt`.