Escoles¶
Un mecanisme de transparència de les administracions públiques consisteix en «obrir» dades per posar-les a disposició de la ciutadania per a què aquesta les pugui utilitzar lliurament. Al web dades_obertes de la Generalitat de Catalunya s’hi publiquen tot tipus de dades obertes. L’objectiu de l’exercici és accedir a aquestes dades per respondre a preguntes sobre la distribució de centres escolars de primària i secundària a Catalunya. Per això, es treballarà amb les dades del directori de centres docents. Teniu disponibles les dades d’alguns any al fitxer centres_docents.csv.
Deseu totes les funcions al fitxer escoles.py (mòdul escoles).
Dissenyeu la funció
llegir_dades(nomf, a)que, donat un nom de fitxer nomf i un any a, retorna un DataFrame amb les dades del fitxer únicament de l’any a.>>> df = llegir_dades('centres_docents.csv', 2017) >>> df.iloc[0]['Denominació completa'] 'Escola Francesc Platón i Sartí' >>> df['Any'].unique() array([2017]) >>> df.head(5)['Telèfon'] 5473 937 700 381 5474 935 557 803 5475 938 527 007 5476 938 432 778 5477 937 920 241
Dissenyeu la funció
nombre_centres()que, a partir del DataFrame com el creat a la pregunta 1, retorna el nombre total de centres censats en el DataFrame.>>> nombre_centres(df) 5463
Dissenyeu la funció
telefon()que, a partir del DataFrame com el creat a la pregunta 1 i el codi d’un centre, retorna una tupla amb el nom, adreça i telèfon de contacte d’aquest centre (columnes'Denominació completa','Adreça'i'Telèfon').>>> telefon(df, 8000013) ('Escola Francesc Platón i Sartí', 'C. Salvador Espriu, 3', '937 700 381')
Dissenyeu la funció
titularitat()que, a partir del DataFrame com el creat a la pregunta 1, retorna el percentatge de centres de titularitat pública (aquells que en el camp'Nom naturalesa'hi ha el valor'Públic') que consten en el DataFrame.>>> ptp = titularitat(df) >>> round(ptp, 3) 69.541
Dissenyeu la funció
distribucio_titularitat()que, a partir del DataFrame com el creat a la pregunta 1, retorna una Series indexada pel nom de la comarca ('Nom comarca'), amb el percentatge de centres de titularitat pública que hi ha a cada comarca.>>> dt = distribucio_titularitat(df) >>> dt.sort_values().head().round(1) Nom comarca Barcelonès 47.6 Vallès Occidental 62.0 Gironès 66.9 Maresme 67.2 Baix Llobregat 67.6 dtype: float64
Dissenyeu la funció
tipologia_centres()que, a partir del DataFrame com el creat a la pregunta 1, retorna un diccionari que tingui per claus els tipus d’ensenyaments'EINF1C','EINF2C','EPRI','ESO','BATX','CFPM'i'CFPS'i com a valors associats el nombre de centres que ofereixen cada tipus d’ensenyament. Observeu que un mateix centre pot oferir diversos tipus d’ensenyaments.Si analitzem el DataFrame veurem que hi ha una columna per cada tipus d’ensenyament. Si el centre imparteix aquest tipus d’ensenyament el valor és el nom d’aquest tipus d’ensenyament i si no l’imparteix el valor és
NaN.>>> tc = tipologia_centres(df) >>> if tc != {'ESO': 1147, 'BATX': 756, 'CFPM': 441, 'EPRI': 2348, 'EINF2C': 2363, 'EINF1C': 1807, 'CFPS': 404}: ... print(tc)
Dissenyeu la funció
busca_centre_ESO()que, donat el DataFrame com el creat a la pregunta 1 i donat un codi postal, retorna un DataFrame format pels centres d’ESO de titularitat pública que tenen el codi postal donat. El DataFrame ha de tenir per files les centres i per columnes el nom del centre, la seva adreça i el seu telèfon.>>> d = busca_centre_ESO(df, 8001) >>> d['Denominació completa'] 0 Institut Milà i Fontanals 1 Institut Miquel Tarradell 2 Institut Escola Turó de Roquetes 3 Institut Escola Antaviana 4 Institut Escola El Til·ler 5 Institut Escola Trinitat Nova Name: Denominació completa, dtype: object >>> d['Adreça'] 0 Pl. Josep Ma. Folch i Torres, s/n 1 C. dels Àngels, 1 bis 2 C. Alcàntara, 22 3 C. Nou Barris, 12 4 Pg. de Mollerussa, 1 5 C. Pedrosa, 16 Name: Adreça, dtype: object
Dissenyeu la funció
quants_FP()que, donat el DataFrame com el creat a la pregunta 1 i donat un nom de comarca, retorna el nombre de centres de la comarca que imparteixen estudis de formació professional de grau mitjà ('CFPM') o superior ('CFPS').>>> quants_FP(df, 'Bages') 14 >>> quants_FP(df, 'Maresme') 20
Alguns noms de centres com per exemple «Jaume Balmes» estan repetits. Dissenyeu la funció
noms_iguals()que, donat el DataFrame com el creat a la pregunta 1, retorna un diccionari que té per claus els noms dels centres i per valors el nombre de repeticions. En el diccionari només hi han de constar els centres que tenen el seu nom repetit.>>> ni = noms_iguals(df) >>> sorted(ni.items(), key=lambda t: (t[1], t[0]), reverse=True)[:5] [('Esc. de Música Municipal', 30), ("Llar d'infants Municipal", 18), ('Escola Pompeu Fabra', 15), ('Escola Sant Jordi', 14), ('Sagrada Família', 13)]
Disposeu de jocs de proves al fitxer test-escoles.txt
Solució
Disposeu d’una solució al fitxer escoles.py.