3. El rebost del restaurant¶
Estem gestionant un restaurant i volem controlar els queviures comprades. Els fitxers restaurant-2024.csv i restaurant-2025.csv contenen les dades d’aquestes compres de dos anys diferents. En llegir aquests fitxers mitjançant pandas obtenim dos pandas.DataFrame:
>>> import pandas as pd
>>> df1 = pd.read_csv('restaurant-2024.csv')
>>> df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 mes 200 non-null object
1 categoria 200 non-null object
2 article 200 non-null object
3 quantitat 200 non-null int64
4 unitat 200 non-null object
5 preu_unitat 182 non-null float64
6 cost_total 200 non-null int64
7 proveïdor 176 non-null object
8 comentari 155 non-null object
dtypes: float64(1), int64(2), object(6)
memory usage: 14.2+ KB
>>> df2 = pd.read_csv('restaurant-2025.csv')
>>> df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 mes 500 non-null object
1 categoria 500 non-null object
2 article 500 non-null object
3 quantitat 500 non-null int64
4 unitat 500 non-null object
5 preu_unitat 459 non-null float64
6 cost_total 500 non-null int64
7 proveïdor 435 non-null object
8 comentari 405 non-null object
dtypes: float64(1), int64(2), object(6)
memory usage: 35.3+ KB
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 DataFrame que tingui la mateixa estructura (mateixes columnes) que aquests dos exemples, però poden correspondre a les compres de qualsevol any.
3.1. Funció mesos_sense_compra (1.5 punts)¶
Implementeu al mòdul restaurant (fitxer restaurant.py) la funció següent:
- restaurant.mesos_sense_compra(df, art)¶
- Paràmetres:
- Retorna:
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 restaurant-2024.csv, aquesta funció ha de respondre així:
>>> mesos_sense_compra(df, 'Botifarra')
['gener', 'febrer', 'març', 'abril', 'maig', 'juliol', 'octubre', 'desembre']
>>> mesos_sense_compra(df, 'Mongeta verda')
['gener', 'març', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre']
>>> mesos_sense_compra(df, 'Aranyes')
['gener', 'febrer', 'març', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre']
Disposeu de més jocs de proves al fitxer tests-no-compra.txt, el qual fa servir els dos fitxers CSV proporcionats.
3.2. Funció millors_preus (1.5 punts)¶
Implementeu al mateix mòdul restaurant (fitxer restaurant.py) la funció següent:
- restaurant.millors_preus(df, categ)¶
- Paràmetres:
- Retorna:
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 (
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 restaurant-2025.csv, aquesta funció ha de respondre així:
>>> millors_preus(df, 'Condiments') == {'Herbes provençals': 5, 'Mostassa': 6, "Oli d'oliva": 2, 'Pebre negre': 6, 'Sal': 17, 'Salsa de soja': 10, 'Sucre de canya': 7, 'Vinagre de Xerès': 5}
True
>>> millors_preus(df, 'Carns') == {'Botifarra': 3, 'Conill': 3, 'Costella de porc': 5, 'Cuixa de pollastre': 9, "Gall d'indi": 4, 'Menuts': 3, 'Pit de pollastre': 3, 'Vedella tallada': 6}
True
Disposeu de més jocs de proves al fitxer tests-millors.txt, el qual fa servir els dos fitxers CSV proporcionats.