Vacunació 2021

En data de primers de maig de 2021, del web Dades_Obertes de la Generalitat de Catalunya hem descarregat un fitxer amb dades sobre la vacunació per al covid-19 que hem simplificat. El fitxer vacunacio.csv és un exemple de fitxer d’aquestes característiques. Usant les dades d’aquest fitxer hem creat un DataFrame de vacunació que farem servir en els següents exercicis.

Familiaritzeu-vos amb la informació del fitxer vacunacio.csv i del DataFrame de vacunació corresponent. A l’exemple que segueix podeu veure que hi ha 9 columnes i també es mostren dades d’algunes files i de totes les columnes excepte la de la província:

>>> import pandas as pd
>>> dfvacuna = pd.read_csv('vacunacio.csv')
>>> dfvacuna.columns
Index(['SEXE', 'PROVINCIA', 'COMARCA', 'EDAT', 'DOSI', 'DATA', 'MARCA', 'VACC',
       'COMP'],
      dtype='object')

>>> dfvacuna[['SEXE', 'COMARCA', 'EDAT', 'DOSI', 'DATA', 'MARCA', 'VACC', 'COMP']][82:90]
    SEXE            COMARCA     EDAT  DOSI        DATA        MARCA VACC  COMP
82  Home         BARCELONES  35 a 39     2  2021/04/22      Moderna   Si    17
83  Dona    VALLES ORIENTAL  30 a 34     1  2021/04/22      Moderna   Si     4
84  Dona              OSONA  65 a 69     1  2021/04/22  AstraZeneca   Si   167
85  Home         TARRAGONES  40 a 44     1  2021/04/23      Moderna   Si     3
86  Dona  VALLES OCCIDENTAL  55 a 59     1  2021/04/22      Moderna   Si    38
87  Dona     BAIX LLOBREGAT  75 a 79     2  2021/04/23      Moderna   Si     5
88  Home  VALLES OCCIDENTAL  50 a 54     1  2021/04/20      Moderna   Si     7
89  Home     BAIX LLOBREGAT  60 a 64     1  2021/04/22      Moderna   Si     7

A cada fila hi ha informació del que en direm una sessió de vacunació: hi ha informació de la zona: província i comarca; de les persones cridades a vacunar-se: sexe i edat; i de la vacuna: data de vacunació, marca de la vacuna i dosi (primera o segona). A més, hi ha la columna 'VACC' que indica si les persones s’han vacunat o no i la columna 'COMP' que indica el nombre de persones amb les característiques de la fila.

Al mòdul vacunacio (fitxer vacunacio.py) implementeu les funcions següents:

vacunacio.vacunes(df, nom_prov)

Retorna dos enters, el nombre de persones cridades a vacunar-se que s’han vacunat i el nombre de les que no s’han vacunat, a partir del DataFrame de vacunació df i per la província nom_prov (string). Exemples:

>>> from vacunacio import vacunes
>>> vacunes(dfvacuna[:100], 'Barcelona')
(822, 2)
>>> vacunes(dfvacuna[:100], 'Girona')
(461, 10)
vacunacio.max_vacunes(df, d1, d2)

Donat un DataFrame de vacunació, df, i dos strings representant dues dates, \(d1\) i \(d2\) (amb el format 'aaaa/mm/dd', i tals que \(d1 \leq d2\)), retorna una tupla amb els valors de les columnes 'COMARCA', 'EDAT', 'DATA', 'MARCA' i 'COMP' corresponents a la sessió de vacunació (és a dir la fila de df) de la data entre les dates \(d1\) i \(d2\) (ambdúes incloses) en què s’han posat més vacunes.

Exemples:

>>> from vacunacio import max_vacunes
>>> max_vacunes(dfvacuna[:100], '2021/04/01', '2021/04/30')
('OSONA', '65 a 69', '2021/04/22', 'AstraZeneca', 167)
>>> max_vacunes(dfvacuna[1000:4000], '2021/02/01', '2021/02/28')
('BARCELONES', '55 a 59', '2021/02/04', 'Pfizer', 328)
vacunacio.valors_possibles(df, nom_columna)

Retorna una llista amb tots els valors possibles que hi ha a la columna nom_columna del DataFrame de vacunació df, ordenats lexicogràficament.

Exemples:

>>> from vacunacio import valors_possibles
>>> valors_possibles(dfvacuna[:100], 'MARCA')
['AstraZeneca', 'Moderna', 'No admin', 'Pfizer']
>>> valors_possibles(dfvacuna[:2000], 'EDAT')
['0 a 14', '15 a 19', '20 a 24', '25 a 29', '30 a 34', '35 a 39', '40 a 44', '45 a 49', '50 a 54', '55 a 59', '60 a 64', '65 a 69', '70 a 74', '75 a 79', '80 o més', 'No classificat']
vacunacio.df_edats(df)

Retorna un DataFrame on l’índex són totes les possibles franges d’edats que hi ha al DataFrame de vacunació df, les columnes són totes les possibles marques de vacunes que apareixen a df i els elements són enters corresponents al nombre de dosis de vacuna donada per cada franja d’edat i marca. Les franjes d’edat i marques en el DataFrame retornat han d’estar en ordre lexicogràfic.

Exemples:

>>> from vacunacio import df_edats
>>> df = dfvacuna[:100]
>>> df_edats(df)
          AstraZeneca  Moderna  No admin  Pfizer
15 a 19             0        0         0       2
20 a 24             0        2         0       2
25 a 29             0        8         0       5
30 a 34             0       16         0       1
35 a 39             0       23         0       0
40 a 44             0       34         2       1
45 a 49             0        3         0       0
50 a 54             0       89         0       6
55 a 59            21       39         0       6
60 a 64           583       54         0       0
65 a 69           367       19         8       1
70 a 74             0        8         0     293
75 a 79             0       13         1     126
80 o més            0        1        11      27

Disposeu dels jocs de proves als fitxers test-vacunacio.txt i tests.txt.

Solució

Disposeu d’una solució al fitxer vacunacio.py.