Despeses farmacèutiques¶
Cada any es publiquen en accés obert les dades de despeses en farmàcia a Catalunya. Hem descarregat un fitxer d’exemple corresponent a l’any 2017: r2017.csv. Utilitzant les dades d’aquest fitxer, creeu un DataFrame de pandas. Estudieu el fitxer i examineu el nom de les seves columnes i algunes de les seves files. Hi ha una classificació de les persones assegurades per la seva residència, sexe i edat i una classificació de la tipologia de medicaments receptats.
>>> df = pd.read_csv('r2017.csv') >>> df.columns Index(['Any', 'Codi RS', 'Regió Sanitària Residència', 'Sexe', '6 trams d'edat', 'Codi grup ATC', 'Grup ATC', 'Codi subgrup ATC 3', 'Subgrup 3 (ATC)', 'Codi subgrup ATC 4', 'Subgrup 4 (ATC)', 'Codi subgrup ATC 5', 'Subgrup 5 (ATC)', 'Nombre de receptes'], dtype='object')
Les funcions que es demanen tot seguit cal desar-les al mòdul
farma (fitxer farma.py).
Disposeu de jocs de proves al fitxer test-farma.txt.
Dissenyeu la funció
nombre_receptes()que, donat un DataFrame de despeses farmacèutiques, df, en retorni el nombre total de receptes. Exemple:>>> nombre_receptes(df) 136729918 >>> nombre_receptes(df[100:200]) 75103
Dissenyeu la funció
dades_barcelona()que, donat un DataFrame de despeses farmacèutiques, df, retorni un altre DataFrame que contingui només les columnes"6 trams d'edat"i"Nombre de receptes", i només les files corresponents a despeses de persones assegurades amb residència a la regió sanitària de Barcelona. El DataFrame retornat ha d’estar ordenat i indexat com el DataFrame original. Exemple:>>> df2 = dades_barcelona(df) >>> len(df2) 4031 >>> df2[0:3] 6 trams d'edat Nombre de receptes 20451 0 - 14 anys 3766 20452 0 - 14 anys 139 20453 0 - 14 anys 4488
Dissenyeu la funció
tipologia_sexe()que, donat un DataFrame de despeses farmacèutiques, df, retorni una llista ordenada de petit a gran amb els diferents valors que hi ha a la columna'Sexe'. Exemple:>>> tipologia_sexe(df) ['Altres', 'Dona', 'Home', 'Sense especificar']
Dissenyeu la funció
percentatge_receptes_sexe()que, donat un DataFrame de despeses farmacèutiques, df, i un string indicant un tipus de sexe, retorni el percentatge del nombre de receptes d’aquest tipus de sexe respecte del nombre de receptes total. Aquesta funció ha de cridar la funciónombre_receptes(). Exemple:>>> ph = percentatge_receptes_sexe(df, 'Home') >>> round(ph, 4) 43.2028 >>> pd = percentatge_receptes_sexe(df, 'Dona') >>> round(pd, 4) 56.4954
Dissenyeu la funció
mitjana_per_edat()que, donat un DataFrame de despeses farmacèutiques, df, retorni una Series indicant la mitjana del nombre de receptes per tram d’edat. Els valors de les mitjanes han d’estar arrodonits a 2 decimals. Exemple:>>> mitjana_per_edat(df) 6 trams d'edat 0 - 14 anys 1387.96 15 - 44 anys 3190.19 45 - 64 anys 7813.49 65 - 74 anys 7375.79 75 - 84 anys 7316.35 85 anys o més 4681.66 Altres 3.09 Sense especificar 1205.98 Name: Nombre de receptes, dtype: float64
Dissenyeu la funció
atc()que, donat un DataFrame de despeses farmacèutiques, df, i un codi de grup ATC, retorni el nombre de receptes total i el nombre de receptes per homes i per dones corresponents a aquest grup ATC. Aquesta funció ha de cridar la funciónombre_receptes(). Exemple:>>> atc(df, 'C') (34391339, 17132700, 17189688) >>> atc(df, 'D') (2362044, 1074762, 1275317)
Dissenyeu la funció
atc_max()que, donat un DataFrame de despeses farmacèutiques, df, retorni un string corresponent al codi de grup ATC amb més receptes. Exemple:>>> atc_max(df) 'N'
Dissenyeu la funció
classifica_edat()que, donat un enter que representa una edat, retorni l’string que indica el tram que comprèn aquesta edat. Els 6 possibles strings són els següents:'0 - 14 anys','15 - 44 anys','45 - 64 anys','65 - 74 anys','75 - 84 any s'i'85 anys o més'. Exemple:>>> classifica_edat(3) '0 - 14 anys' >>> classifica_edat(44) '15 - 44 anys'
Dissenyeu la funció
atc_max_grup()que, donat un DataFrame de despeses farmacèutiques, df, un string indicant el sexe de la persona assegurada ('Home'o'Dona') i un enter indicant una edat, retorni un altre string corresponent al codi de grup ATC amb més receptes per les persones d’aquell sexe i del tram d’edat que comprèn l’edat donada. Aquesta funció ha de cridar les funcionsclassifica_edat()iatc_max(). Exemple:>>> atc_max_grup(df,'Home', 63) 'C' >>> atc_max_grup(df,'Dona', 35) 'N'
Solució
Disposeu d’una solució al fitxer farma.py