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 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ó `gran_arbre` (2 punts) ----------------------------- .. function:: gran_arbre(df, pob, econs) :param ~pandas.DataFrame df: Dataframe amb les dades d'un conjunt d'arbres com el de l'exemple :param str pob: Nom d'una població :param str econs: Estat de conservació :rtype: :py:class:`tuple` amb tres valors :return: 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, .. literalinclude:: tests-garbre.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-garbre.txt`. Funció `noms_comuns` (1.5 punts) -------------------------------- .. function:: noms_comuns(df) :param ~pandas.DataFrame df: Dataframe amb les dades d'un conjunt d'arbres com el de l'exemple :rtype: :py:class:`dict`, on tant les claus com els valors han de ser strings :return: 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, .. literalinclude:: tests-ncomuns.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-ncomuns.txt`.