Covid-19

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

Familiaritzeu-vos amb la informació d’aquest fitxer i del DataFrame corresponent. A l’exemple que segueix podeu veure que hi ha 10 columnes i també es mostren dades de les primeres 5 files i de només 6 de les columnes:

>>> import pandas as pd
>>> pd.options.display.max_columns = 7
>>> dfcovid = pd.read_csv('covid-19.csv')
>>> dfcovid.columns
Index(['ABS', 'ABS codi', 'Sector sanitari', 'Sector codi', 'Regio sanitaria',
       'RS codi', 'data', 'sexe', 'casos', 'resultat covid'],
      dtype='object')
>>> dfcovid[['ABS codi', 'Regio sanitaria', 'data', 'sexe', 'casos', 'resultat covid']][:5]
   ABS codi    Regio sanitaria        data  sexe  casos resultat covid
0       364  Camp de Tarragona  2020-03-24  Dona      1        Negatiu
1        53          Barcelona  2020-04-02  Home      3        Negatiu
2       222          Barcelona  2020-03-18  Dona      1        Positiu
3        15             Girona  2020-04-03  Home      3        Negatiu

Podem veure que hi ha agrupaments de 3 tipus, representats per les columnes 'Regio sanitaria', 'Sector sanitari' i 'ABS' (Àrea Bàsica de Salut), on hi ha els noms d’aquests agrupaments. A part del nom, els agrupaments tenen un codi representat en les columnes 'RS codi', 'Sector codi' i 'ABS codi', respectivament. Una regió sanitària engloba diversos sectors sanitaris i un sector sanitari engloba diverses ABS. El nom i el codi que representa cadascuna de les regions sanitàries, sectors sanitaris i ABS són únics i es compleix que cada nom va associat sempre al mateix codi.

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

  1. Dissenya la funció resultats() que rep 5 paràmetres: un DataFrame com el de l’exemple inicial i 4 strings: el nom d’una regió sanitària, dues dates, \(d1\) i \(d2\) (amb el format 'aaaa-mm-dd', i tals que \(d1 \leq d2\)) i un resultat covid ('Positiu' o 'Negatiu'). La funció retorna dos enters: el nombre de casos amb el resultat covid donat i el total de casos, tots dos referits a la regió sanitària donada i entre les dates donades (ambdues incloses). Exemple:

    >>> resultats(dfcovid, 'Barcelona', '2020-03-15', '2020-03-31', 'Positiu')
    (14208, 30894)
    >>> resultats(dfcovid, "Terres de l'Ebre", '2020-04-01', '2020-04-15', 'Positiu')
    (41, 536)
    >>> resultats(dfcovid, 'Catalunya Central', '2020-04-16', '2020-04-30', 'Negatiu')
    (303, 433)
    
  2. Dissenya la funció casos_agrupament() que a partir d’un DataFrame com el de l’exemple inicial, un string indicant un tipus d’agrupament ('Regio sanitaria', 'Sector sanitari' o 'ABS') i un altre string amb un resultat ('Positiu' o 'Negatiu'), retorni una Series on l’índex sigui el nom de cada agrupament del tipus donat i el valor el nombre de casos positius o negatius, segons correspongui, d’aquell agrupament. La Series retornada ha d’estar ordenada pel nombre de casos en ordre ascendent. Exemple:

    >>> s = casos_agrupament(dfcovid, 'Regio sanitaria', 'Positiu')
    
    >>> s 
    Regio sanitaria
    Terres de l'Ebre        117
    Alt Pirineu i Aran      246
    Lleida                 1167
    Camp de Tarragona      1316
    Girona                 2574
    Catalunya Central      2809
    Barcelona             25233
    Name: casos, dtype: int64
    
  3. Dissenya la funció arees_basiques() que, donat un DataFrame com el de l’exemple inicial, retorna una llista de tuples de la forma (nom ABS, codi ABS) amb totes les ABS (àrees bàsiques de salut) que consten en el DataFrame donat, sense repeticions i en ordre ascendent tenint en compte el nom de l’ABS. Exemple:

    >>> labs = arees_basiques(dfcovid)
    >>> len(labs)
    372
    >>> labs[:5]
    [('Abrera', 370), ('Agramunt', 1), ('Alcarràs', 2), ('Alfarràs/ Almenar', 3), ('Almacelles', 334)]
    >>> labs[152:157]
    [('Falset', 118), ('Figueres', 119), ('Flix', 120), ('Gavà 1', 122), ('Gavà 2', 123)]
    

Disposeu de jocs de proves al fitxer test-covid.txt.

Solució

Disposeu d’una solució al fitxer covid.py