El rebost del restaurant ======================== .. py:module:: restaurant :noindex: Estem gestionant un restaurant i volem controlar els queviures comprades. Els fitxers :download:`restaurant-2024.csv` i :download:`restaurant-2025.csv` contenen les dades d'aquestes compres de dos anys diferents. En llegir aquests fitxers mitjançant :py:mod:`pandas` obtenim dos :py:class:`pandas.DataFrame`: .. literalinclude:: lectura-restaurant.txt :language: pycon Descarregueu-vos els fitxers, llegiu-los en l'intèrpret de Python tal com s'indica en l'exemple de més amunt i examineu les dades que contenen. Fixeu-vos que els valors de les columnes `preu_unitat`, `proveïdor` i `comentari` contenen valors desconeguts. Les funcions que es demanen a continuació han de treballar amb qualsevol :py:class:`~pandas.DataFrame` que tingui la mateixa estructura (mateixes columnes) que aquests dos exemples, però poden correspondre a les compres de qualsevol any. Funció `mesos_sense_compra` (1.5 punts) --------------------------------------- Implementeu al mòdul :py:mod:`restaurant` (fitxer :file:`restaurant.py`) la funció següent: .. function:: mesos_sense_compra(df, art) :param ~pandas.DataFrame df: Dataframe amb les dades de compres del restaurant :param str art: Nom d'un article :return: Llista ordenada dels mesos de l'any en què **no** consta en `df` que s'hagi comprat l'article `art`. Els mesos de l'any en `df` sempre estaran en català i en minúscules, tal com mostren els exemples. Essent `df` el Dataframe amb les dades del fitxer :file:`restaurant-2024.csv`, aquesta funció ha de respondre així: .. literalinclude:: tests-no-compra.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-no-compra.txt`, el qual fa servir els dos fitxers CSV proporcionats. Funció `millors_preus` (1.5 punts) ---------------------------------- Implementeu al mateix mòdul :py:mod:`restaurant` (fitxer :file:`restaurant.py`) la funció següent: .. function:: millors_preus(df, categ) :param ~pandas.DataFrame df: Dataframe amb les dades de compres del restaurant :param str prov: Nom d'una categoria :return: Diccionari amb claus els noms d’articles i valors associats el preu per unitat més baix en què s'ha comprat el producte. Els valors del diccionari han de ser enters (:py:class:`int`, sense incloure la part fraccionària) i el diccionari no ha d'incloure productes de preu mínim desconegut. Essent `df` el Dataframe amb les dades del fitxer :file:`restaurant-2025.csv`, aquesta funció ha de respondre així: .. literalinclude:: tests-millors.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu de més jocs de proves al fitxer :download:`tests-millors.txt`, el qual fa servir els dos fitxers CSV proporcionats.