La Digitalizzazione dei Musei nel Lazio, solo il 62% ha un sito web

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

In [1]:
#Importiamo i moduli necessari
#per il lavoro di visualizzazione
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [2]:
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'
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 357 entries, 0 to 356
Data columns (total 19 columns):
Comune                                        357 non-null object
Provincia                                     357 non-null object
Statale ƒ?? Non statale                       357 non-null object
OMR                                           161 non-null object
Sistema museale territoriale                  48 non-null object
Sistema museale urbano                        33 non-null object
Sistema museale tematico                      82 non-null object
Casa museo                                    12 non-null object
Q1.1_SA_DENOMINAZIONE_MUSEO_ISTITUTO          357 non-null object
Q1.2_SA_INDIRIZZO_MUSEO_ISTITUTO              353 non-null object
Q1.3_SA_LOCALITA_MUSEO_ISTITUTO               321 non-null object
Q1.4_SA_UBICAZIONE/EDIFICIO_MUSEO_ISTITUTO    344 non-null object
Cap                                           356 non-null float64
Q1.8_SA_TELEFONO_MUSEO_ISTITUTO               352 non-null object
Q1.9_SA_FAX_MUSEO_ISTITUTO                    328 non-null object
Q1.10_SA_EMAIL_MUSEO_ISTITUTO                 349 non-null object
Q1.11_SA_SITO WEB_MUSEO_ISTITUTO              344 non-null object
latitudine                                    357 non-null float64
longitudine                                   357 non-null float64
dtypes: float64(3), object(16)
memory usage: 53.1+ KB
None
Index(['Comune', 'Provincia', 'Statale ƒ?? Non statale', 'OMR',
       'Sistema museale territoriale', 'Sistema museale urbano',
       'Sistema museale tematico', 'Casa museo',
       'Q1.1_SA_DENOMINAZIONE_MUSEO_ISTITUTO',
       'Q1.2_SA_INDIRIZZO_MUSEO_ISTITUTO', 'Q1.3_SA_LOCALITA_MUSEO_ISTITUTO',
       'Q1.4_SA_UBICAZIONE/EDIFICIO_MUSEO_ISTITUTO', 'Cap',
       'Q1.8_SA_TELEFONO_MUSEO_ISTITUTO', 'Q1.9_SA_FAX_MUSEO_ISTITUTO',
       'Q1.10_SA_EMAIL_MUSEO_ISTITUTO', 'Q1.11_SA_SITO WEB_MUSEO_ISTITUTO',
       'latitudine', 'longitudine'],
      dtype='object')
0       www.simulabo.it
1    www.ecomuseocrt.it
2                     -
Name: Q1.11_SA_SITO WEB_MUSEO_ISTITUTO, dtype: object
In [3]:
#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('')
In [4]:
#Esploriamo le prime 10 righe 
#della colonna con i siti web
#per capire come è fatta
print(museum_csv[webcolumn][:10])
0                                      www.simulabo.it
1                                   www.ecomuseocrt.it
2
3                     www.comlogpro.esercito.difesa.it
4                   www.sviluppoeconomico.gov.it/museo
5               htpp://www.archeoroma.beniculturali.it
6                              www.museicapitolini.org
7
8                            www.museocriminologico.it
9    www.sangiovannideifiorentini.net/index.php/museo/
Name: Q1.11_SA_SITO WEB_MUSEO_ISTITUTO, dtype: object
In [5]:
#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())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 357 entries, 0 to 356
Data columns (total 19 columns):
Comune                                        357 non-null object
Provincia                                     357 non-null object
Statale ƒ?? Non statale                       357 non-null object
OMR                                           161 non-null object
Sistema museale territoriale                  48 non-null object
Sistema museale urbano                        33 non-null object
Sistema museale tematico                      82 non-null object
Casa museo                                    12 non-null object
Q1.1_SA_DENOMINAZIONE_MUSEO_ISTITUTO          357 non-null object
Q1.2_SA_INDIRIZZO_MUSEO_ISTITUTO              353 non-null object
Q1.3_SA_LOCALITA_MUSEO_ISTITUTO               321 non-null object
Q1.4_SA_UBICAZIONE/EDIFICIO_MUSEO_ISTITUTO    344 non-null object
Cap                                           356 non-null float64
Q1.8_SA_TELEFONO_MUSEO_ISTITUTO               352 non-null object
Q1.9_SA_FAX_MUSEO_ISTITUTO                    328 non-null object
Q1.10_SA_EMAIL_MUSEO_ISTITUTO                 349 non-null object
Q1.11_SA_SITO WEB_MUSEO_ISTITUTO              222 non-null object
latitudine                                    357 non-null float64
longitudine                                   357 non-null float64
dtypes: float64(3), object(16)
memory usage: 53.1+ KB
None
<class 'pandas.core.frame.DataFrame'>
Int64Index: 222 entries, 0 to 355
Data columns (total 19 columns):
Comune                                        222 non-null object
Provincia                                     222 non-null object
Statale ƒ?? Non statale                       222 non-null object
OMR                                           102 non-null object
Sistema museale territoriale                  29 non-null object
Sistema museale urbano                        28 non-null object
Sistema museale tematico                      42 non-null object
Casa museo                                    7 non-null object
Q1.1_SA_DENOMINAZIONE_MUSEO_ISTITUTO          222 non-null object
Q1.2_SA_INDIRIZZO_MUSEO_ISTITUTO              220 non-null object
Q1.3_SA_LOCALITA_MUSEO_ISTITUTO               194 non-null object
Q1.4_SA_UBICAZIONE/EDIFICIO_MUSEO_ISTITUTO    214 non-null object
Cap                                           221 non-null float64
Q1.8_SA_TELEFONO_MUSEO_ISTITUTO               219 non-null object
Q1.9_SA_FAX_MUSEO_ISTITUTO                    204 non-null object
Q1.10_SA_EMAIL_MUSEO_ISTITUTO                 217 non-null object
Q1.11_SA_SITO WEB_MUSEO_ISTITUTO              222 non-null object
latitudine                                    222 non-null float64
longitudine                                   222 non-null float64
dtypes: float64(3), object(16)
memory usage: 34.7+ KB
None
In [6]:
#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),'%')
Museum with a website 222
Museum without a website 135
Total museum 357
Museums With a WebSite 62 %
Museums Without a WebSite 38 %
In [7]:
#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 [8]:
#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 [9]:
#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()

Lascia un commento