L’altro giorno su HackerNews se si cercavano le notizie relative all’Italia, oltre ai nostri problemi con la manovra di bilancio, c’era un articolo del NYTimes sul più antico ritrovamento preistorico in Italia, conservato presso il Museo di Preistoria della Sapienza (Non sapevo dell’esistenza di questo museo se non fosse stato per Giorgia).
Partendo dalla lettura di questo articolo ho voluto investigare gli open data relativi ai musei del Lazio.
Dati che potete consultare liberamente in forma tabulare sul sito della Regione(qui il link).
I dati sono legati al censimento nazionale dei musei d’Italia voluto dal Ministero dei Beni e Attività Culturali, Istat e Regioni aderenti, il censimento riguarda il periodo che intercorre il 2011-2014, ma il dataset è stato creato solo il 26 Dicembre 2016.
Nel Lazio ci sono almeno 357 Musei, se volessimo visitarne 1 al giorno non basterebbe 1 anno, anche perché non tutti hanno un sito web, quindi sarebbe necessaria una attenta pianificazione.
Già.
Nel 2018 chi lo avrebbe mai detto.
Questa informazione è racchiusa in una colonna del dataset che contiene proprio l’url di ogni sito museale.
Su 357 solo 222 musei nel Lazio hanno un sito web, il 62% del totale.
Inoltre di questi non è possibile sapere quanti siano mobile-friendly (realmente) e quanti abbiano una sezione in lingua inglese.
Se cercate il Museo Archeologico Nazionale di Formia sarete indirizzati ad una sezione del sito del Ministero per i Beni e le Attività Culturali e selezionando la lingua inglese vi comparirà questo:
Il nulla.
Ovviamente anche il Museo della Sapienza, che conserva il reperto citato dal New York Times, è sprovvisto di una sezione in lingua inglese (o se dovesse esserci non è di facile individuazione), qui il link al sito del museo.
E’ un peccato, un vero peccato, visto che c’è sempre qualcuno pronto ad affermare che la nostra vocazione è il turismo, la cultura e la creatività.
Diagnosi del dataset:
- Dovrebbe essere aggiornato
- Sarebbe utile integrare queste informazioni con
- Il numero di ingressi
- Il prezzo del biglietto intero
- Le entrate per l’anno di riferimento (comprensive degli affitti dei bar/gadget ecc…)
- Se il museo accetta o meno prenotazioni on-line
- Il numero di lingue del sito e delle audio-guide(se presenti) all’interno del museo
Di seguito come sempre viene allegato il codice Python utilizzato per la pulizia e visualizzazione dei dati 🙂
Grazie per aver letto l’articolo!
Se ti è piaciuto o lo ritieni utile per informare degli amici su questo problema condividilo liberamente, se c’è qualche errore o miglioramento scrivimi pure 🙂
Un abbraccio
Andrea
#Importiamo i moduli necessari
#per il lavoro di visualizzazione
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
path_csv='elencomusei20142.csv'
museum_csv=pd.read_csv(path_csv)
print(museum_csv.info())
print(museum_csv.columns)
print(museum_csv['Q1.11_SA_SITO WEB_MUSEO_ISTITUTO'].head(3))
#Dopo aver visualizzato le info del dataframe
#possiamo identificare le colonne di interesse
#per la nostra analisi
webcolumn='Q1.11_SA_SITO WEB_MUSEO_ISTITUTO'
museum_name='Q1.1_SA_DENOMINAZIONE_MUSEO_ISTITUTO'
#Dobbiamo rimuovere gli spazi vuoti ed il carattere '-'
#Così successivamente
#Possiamo rimuovere
#tutte le righe con una cella vuota all'interno
#della colonna contenente la lista dei siti web
museum_csv[webcolumn]=museum_csv[webcolumn].str.strip('-')
museum_csv[webcolumn]=museum_csv[webcolumn].str.strip('')
#Esploriamo le prime 10 righe
#della colonna con i siti web
#per capire come è fatta
print(museum_csv[webcolumn][:10])
#Sostituiamo gli spazi vuoti con Nan
#In questo modo sarà possibile "droppare" queste righe
museum_csv[webcolumn]=museum_csv[webcolumn].replace('', np.nan)
print(museum_csv.info())
museum_csv_dn=museum_csv.dropna(subset=[webcolumn])
print(museum_csv_dn.info())
#Adesso possiamo conoscere
#Quanti musei hanno un sito web
#e quanti sono sprovvisti
l_web_site=len(museum_csv_dn[webcolumn])
l_all=len(museum_csv[webcolumn])
l_without=l_all-l_web_site
print('Museum with a website',l_web_site)
print('Museum without a website',l_without)
print('Total museum',l_all)
print("Museums With a WebSite",round(l_web_site/l_all*100),'%')
print("Museums Without a WebSite",round(l_without/l_all*100),'%')
#Creiamo una "mask"
#per filtare il dataframe
#e salvare una lista csv
#con tutti i musei senza sito web
mask=(museum_csv[webcolumn].isna())
save=museum_csv[mask].to_csv('muslazionositoweb.csv')
#In questa sezione rappresentiamo
#con un bar plot i musei in valore assoluto
n=3
x_variable=np.arange(1,n+1)
y_variable=[l_without,l_web_site,l_all]
color=['red','Crimson','DarkBlue']
fig, ax=plt.subplots()
for i in range(n):
plt.bar(x_variable[i],y_variable[i], color=color[i])
fig.suptitle('Musei nel Lazio e Digitalizzazione (Agg. Dati 2016)', fontsize=18)
#Qui definiamo il font degli assi e le etichette
plt.xticks(np.arange(1,n+1), ('Musei Senza Sito Web', 'Musei Con Sito Web',"Totale Musei"), rotation=55)
plt.yticks(np.arange(0, max(y_variable)+100, 200))
plt.tick_params(axis='both', which='major', labelsize=20)
for i, v in enumerate(y_variable):
ax.text(i+0.9, v+10 , str(v), color='Blue', fontsize=12, fontweight='bold')
#Questa sezione è per aggiungere una filigrana al plot
plt.text(2, 10, 'Elaborazione Dati: Ing. Andrea Ciufo. Fonte: Regione Lazio Open Data',
fontsize=11, color='gray',
ha='center', va='bottom', alpha=0.9)
plt.show()
#In questa sezione rappresentiamo
#con un bar plot i musei in valore %
m=2
x_variable=np.arange(1,m+1)
y_variable=[round(l_without/l_all,2),round(l_web_site/l_all,2)]
color=['red','DarkBlue']
fig, ax=plt.subplots()
for i in range(m):
plt.bar(x_variable[i],y_variable[i], color=color[i])
fig.suptitle('Musei nel Lazio e Digitalizzazione (Agg. Dati 2016)', fontsize=18)
#Qui definiamo il font degli assi e le etichette
plt.xticks(np.arange(1,m+1), ('Musei Senza Sito Web', 'Musei Con Sito Web'), rotation=55)
plt.yticks(np.arange(0,2))
plt.tick_params(axis='both', which='major', labelsize=20)
for i, v in enumerate(y_variable):
ax.text(i+0.9, v+0.01 , str(v)+'%', color='Blue', fontsize=12, fontweight='bold')
#Questa sezione è per aggiungere una filigrana al plot
plt.text(1.5,0.05, 'Elaborazione Dati: Ing. Andrea Ciufo. Fonte: Regione Lazio Open Data',
fontsize=11, color='gray',
ha='center', va='top', alpha=0.9)
plt.show()