5. Pandas: Consum d’electricitat (2 punts)

Avís

Aquest exercici consta de dues preguntes independents. El pes de cada pregunta en la nota s’ajustarà en temps de correcció, però en cap cas serà inferior a 0.5 punts.

Del web de dades obertes de l’ajuntament de Barcelona hem descarregat un fitxer amb dades de consum d’electricitat durant alguns mesos de 2022, que hem simplificat: consum_elect.csv. Podeu descarregar aquest fitxer i analitzar les dades que conté:

>>> df = pd.read_csv('consum_elect.csv', dtype = {'Codi_Postal': str})
>>> df.head()
         Data Codi_Postal Sector_Economic Tram_Horari  Valor
0  2022-01-01       08001       Indústria         0-6    817
1  2022-01-01       08001       Indústria        6-12    942
2  2022-01-01       08001       Indústria       12-18   1145
3  2022-01-01       08001       Indústria       18-24   1184
4  2022-01-01       08001     Residencial         0-6  24464

Totes les columnes són de tipus str excepte la columna 'Valor' que representa el consum en megawatt-hores i és de tipus int.

Es demana que al mòdul electro (fitxer electro.py) hi implementeu les dues funcions següents:

electro.electro1(df, sec, tr)
Paràmetres:
  • df – un DataFrame com el de l’exemple que conté dades de consums d’electricitat.

  • sec – el nom d’un sector econòmic (str).

  • tr – un tram horari (str).

Retorna:

un tuple, (data, codi postal, consum), amb la data (str), el codi postal (str) i el consum (int) corresponents al registre de consum mínim pel sector econòmic i tram horari donats, en el DataFrame donat.

Exemples:

>>> electro1(df, 'Residencial', '6-12')
('2022-01-01', '08008', 10246)
>>> electro1(df, 'Residencial', '18-24')
('2022-03-27', '08008', 13164)
>>> electro1(df, 'Indústria', '12-18')
('2022-01-01', '08011', 917)

Disposeu de jocs de proves addicionals al fitxer tests-electro1.txt.

electro.electro2(df, mes)
Paràmetres:
  • df – un DataFrame com el de l’exemple que conté dades de consums d’electricitat.

  • mes – un int que representa un mes de l’any

Retorna:

una Series indexada per sector econòmic i on el valor és el percentatge de consum d’aquest sector respecte del total, considerant només els consums realitzats en el mes donat mes. La Series ha d’estar en ordre descendent de percentatge.

Exemples:

>>> se1 = electro2(df, 2)
>>> type(se1)
<class 'pandas.core.series.Series'>
>>> se1 = se1.apply(lambda x: round(x, 2))
>>> se1
Sector_Economic
Serveis           55.90
Residencial       38.53
Indústria          5.47
No especificat     0.10
Name: Valor, dtype: float64

Recordeu que la classe pandas.Series té mètodes per tractar dades de tipus str (vegeu per exemple metodes str) que us poden ser d’utilitat per filtrar les dades corresponents al mes donat.

Recordeu que no podeu llegir fitxer que conté el dataframe dins del vostre codi.

Disposeu de jocs de proves addicionals al fitxer tests-electro2.txt.