{"id":17873879,"url":"https://github.com/napo/opendatamiur","last_synced_at":"2026-05-01T14:33:24.080Z","repository":{"id":137437077,"uuid":"131570637","full_name":"napo/opendatamiur","owner":"napo","description":"investigare gli open data del ministero dell'istruzione con python, jupyter notebook e pandas","archived":false,"fork":false,"pushed_at":"2018-05-08T07:54:31.000Z","size":1655,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-02T23:43:06.786Z","etag":null,"topics":["italia","jupyter-notebook","miur","pandas","scuola","tutorial"],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/napo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-30T08:08:02.000Z","updated_at":"2024-07-31T01:21:24.000Z","dependencies_parsed_at":"2023-07-21T08:32:09.620Z","dependency_job_id":null,"html_url":"https://github.com/napo/opendatamiur","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/napo/opendatamiur","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/napo%2Fopendatamiur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/napo%2Fopendatamiur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/napo%2Fopendatamiur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/napo%2Fopendatamiur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/napo","download_url":"https://codeload.github.com/napo/opendatamiur/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/napo%2Fopendatamiur/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32501402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["italia","jupyter-notebook","miur","pandas","scuola","tutorial"],"created_at":"2024-10-28T11:05:41.969Z","updated_at":"2026-05-01T14:33:24.053Z","avatar_url":"https://github.com/napo.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tutorial per imparare python/pandas investigando i dati del MIUR\n\nIl tutorial è stato sviluppato all'interno dell'evento [\"Laboratorio sulle competenze Open Data all’Opificio Golinelli\"](http://www.ervet.it/?p=13032)\n![](https://raw.githubusercontent.com/napo/opendatamiur/master/images/header.png)\n\n## Setup\nil tutorial si sviluppa utilizando [jupyter notebook](http://jupyter.org/) per python.\n\nPer iniziare si consiglia di installare l'ambiente [anaconda](https://anaconda.org/) ed eseguire così jupyter notebook. Anacoda è disponibile per i sistemi operativi Linux, Windows e Apple.\n\n## HOWTO\nIl tutorial viene veicolato aprendo il file [MIUR OpenData](https://github.com/napo/opendatamiur/blob/master/MIUR_OpenData.ipynb) e da lì seguire i comandi presentati passo-passo.\u003cbr/\u003e\nI singoli comandi si trovano nelle celle grigie e sono introdotti dal testo del tutorial.\u003cbr/\u003e\nLo studente può aprire il proprio jupyter notebook sul proprio computer e copiare e incollare i comandi presentati per testarli e capirli.\n\nIl tutorial guida lo studente a conoscere come interrogare le varie tabelle messe a disposizione dal MIUR attraverso [pandas](http://pandas.pydata.org) (una libreria python molto potente per l'analisi dati).\u003cbr/\u003e\nL'analisi dei dati aiuta anche a capire come è strutturata la scuola in Italia.\n\nLo studente sarà così in grado di interrogare i dati, effettuare qualche calcolo e manipolazione e creare grafici\n\nIl tutorial è strutturao in modo che poi, il docente, possa delegare gli studenti a lavorare in gruppo in modo da ripetere quanto acquisito.\n\nOltre a pandas vengono introdotti, in maniera molto semplice, le librerie [geocoder](http://geocoder.readthedocs.io/) e [folium](http://folium.readthedocs.io) con cui poter geocodificare dati e creare mappe.\n\n## Riassunto python\necco un piccolo riassunto di cosa viene veicolato dal tutorial riguardo python pandas (ed altro)\n\n### importare moduli \nvanno caricati (*import*) e in alcuni [casi installati](#potenziarepython)\n\nquesti i moduli usati\n```python\n     import requests\n     import io\n     import pandas as panda\n     import geocode\n     import folium\n```\n### metodi per interrogare un DataFrame (tabella) pandas\n(nell'esempio *nometabella*)\n\n#### conoscere le prime 3 righe (ma il valore possiamo cambiarlo\n```python\n   nometabella.head(3)\n```\n#### la forma della tabella (numero di righe e numero di colonne)\n```python\n   nometabella.shape\n```\n#####  e da lì il numero di righe\n```python\n   nometabella.shape[0]\n```\n##### e il numero di colonne\n```python\n   nometabella.shape[1]\n```\n##### i nomi delle colonne\n```python\n   nometabella.columns\n```\n##### e contare quante sono\n```python\n   nometabella.columns.size\n```\n#####  avere una descrizione su come è fatta una colonna di un dataframe partendo dal suo nome \n(es. *nomecolonna*))\n```python\n   nometabella.nomecolonna.describe()\n```\n\n### unire più DataFrame \n```python\n   panda.concat([tabella1, tabella2])\n```\n### confrontare colonne fra tabelle diverse \n(es. *tabella1* e *tabella2*)\n```python\n   tabella1.columns.equals(tabella2.columns)\n```\n###  vedere cosa cambia fra le colonne delle due tabelle\n```python\n   tabella1.columns.difference(tabella2.columns)\n```\n\n### individuare i valori univoci all'interno di una colonna\n```python\n   nometabella.nomecolonna.unique()\n```\n### contare il numero di volte in cui compare ogni valore della colonna\n```python\n   nometabella.groupby(nometabella.nomecolonna).size()\n```\n### ordinare una tabella per i valori di una colonna\n```python\n   nometabella.sort_values(\"nomecolonna\")\n```\n### filtrare una tabella per un valore di una colonna\n```python\n   nometabella[nometabella.nomeoclonna == 'valore da cercare']\n```\n### trasformare tutti i valori di una tabella con un altro\nEsempio: trasformare tutti i \"SI\" in \"1\"\n```python\n    nometabella.eq('SI').mul(1)\n```\n\n### ribaltare righe con colonne (pivot)\n#### scegliendo quale colonna usare come indice\n```python\n   nometabella.pivot_table(index='colonnacomeindice')\n```\n##### e se necessario assegnare il valore zero dove i valori mancano\n```python\n   nometabella.pivot_table(index='colonnasceltacomeindice').fillna(0)\n```\n##### ed anche più complesse dove sommare i valori  presenti in una colonna\n```python\n   nometabella.pivot_table(index='colonnasceltacomeindice', columns='colonnescelte', values='colonnaconivalori',\n                aggfunc='sum', fill_value=0)\n```\n\n\n### rappresentare i valori di un dataframe in grafico a barre verticali\ne con dimensioni 10x10 in DPI [punti per pollice](https://it.wikipedia.org/wiki/Punti_per_pollice) e assegnare un titolo\n```python\n   nometabella.plot.bar(title='titolo',figsize[10,10])\n```\n#### e a barre orizzontali\n```python\n   nometabella.plot.barh(title='titolo',figsize[10,10])\n```\n#### e a barre orizzontali a segmenti\n```python\n    nometabella.plot.bar(stacked=True,figsize=(10,10))\n```\n#### e a barre verticali a segmenti scegliendo i colori\n*colormap* è una variabile che può essere in ogni grafico.\n\nl'elenco dei colori si trova qui https://matplotlib.org/examples/color/colormaps_reference.html\n```python\n    nometabella.plot.hbar(stacked=True,figsize=[10,10],colormap='Pastel2')\n```\n\n### usare un geocoder\ncon komoot\n\n```python\ngeocoder.komoot(\"Via Paolo Nanni Costa, 14, Bologna, Italia\")\n```\ncon google\n\n```python\ngeocoder.google(\"Opificio Golinelli\")\n```\n#### ed estrarre latitudine e longitudine\n```python\n   opificio_gollinelli = geocoder.komoot(\"Opificio Gollinelli\")\n   latitudine = opificio_gollinelli.latlng[0]\n   longitudine = opificio_gollinelli.latlng[1]\n```\n\n\n### rappresentare un punto su una mappa\nes.\nlatitudine = 44.5082397\nlongitudine = 11.3066287\n\n```python\n    mappa = folium.Map(location=[44.5082397, 11.3066287])\n    folium.Marker([44.5082397, 11.3066287]).add_to(mappa)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnapo%2Fopendatamiur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnapo%2Fopendatamiur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnapo%2Fopendatamiur/lists"}