This Jupyter notebook shows how to use jsonstat.py python library to explore Istat data. Istat is the Italian National Institute of Statistics. It publishs a rest api for browsing italian statistics. This api can return results in jsonstat format.
La forza lavoro e composta da occupati e disoccupati. La popolozione sopra i 15 anni e composta da forza lavoro ed inatttivi. $$Popolozoine = ForzaLavoro + Inattivi$$ $$Forzalav = Occupati + Disoccupati$$ $$Inattivi = NonVoglioLavorare + Scoraggiati$$
Tasso disoccupazione = Disoccupati/Occupati
In [1]:
from __future__ import print_function
import os
import pandas as pd
from IPython.core.display import HTML
import matplotlib.pyplot as plt
%matplotlib inline
import istat
# Next step is to set a cache dir where to store json files downloaded from Istat.
# Storing file on disk speeds up development, and assures consistent results over time.
# Eventually, you can delete donwloaded files to get a fresh copy.
cache_dir = os.path.abspath(os.path.join("..", "tmp", "istat_cached"))
istat.cache_dir(cache_dir)
istat.lang(0) # set italian language
print("cache_dir is '{}'".format(istat.cache_dir()))
In [2]:
# List all datasets contained into area `LAB` (Labour)
istat.area('LAB').datasets()
Out[2]:
Download
In [3]:
# DCCV_OCCUPATIT
istat_occupatit = istat.dataset('LAB', 'DCCV_OCCUPATIT')
# HTML(istat_occupatit.info_dimensions_as_html(show_values=0))
In [4]:
spec = {
'Territorio': 'Italia',
'Sesso': 'totale',
'Classe di età': '15 anni e più',
'Titolo di studio': 'totale',
'Cittadinanza': 'totale',
'Ateco 2002' : '0010 totale',
'Ateco 2007' : '0010 totale',
'Posizione professionale': 'totale',
'Profilo professionale': 'totale',
'Professione 2001': 'totale',
'Professione 2011': 'totale',
'Regime orario': 'totale',
'Carattere occupazione': 'totale',
'Tempo e frequenza': 0
}
df_occupatit = istat_occupatit.getvalues(spec).dataset(0).to_table(rtype=pd.DataFrame)
df_occupatit[df_occupatit['Tempo e frequenza'].str.contains(r'^T.*')]
df_occupatit.tail(6)
Out[4]:
In [5]:
df_occupatit.ix[192]
Out[5]:
In [6]:
istat_disoccupt = istat.dataset('LAB', 'DCCV_DISOCCUPT')
istat_disoccupt
Out[6]:
In [7]:
spec = {
'Territorio': 'Italia',
'Tipo dato' : 'numero di persone in cerca di occupazione 15 anni e oltre (valori in migliaia)',
'Misura': 'valori assoluti',
'Sesso': 'totale',
'Classe di età': '15 anni e più',
'Titolo di studio': 'totale',
'Cittadinanza': 'totale',
'Condizione professionale': 'totale',
'Durata disoccupazione': 'totale',
'Tempo e frequenza': 0
}
df_disoccupt = istat_disoccupt.getvalues(spec).dataset(0).to_table(rtype=pd.DataFrame)
df_disoccupt[df_disoccupt['Tempo e frequenza'].str.contains(r'^T.*')]
df_disoccupt.tail(6)
Out[7]:
In [8]:
istat_forzlv = istat.dataset('LAB', 'DCCV_FORZLV')
istat_forzlv
Out[8]:
In [9]:
spec = {
'Territorio': 'Italia',
'Tipo dato': 'numero di forze di lavoro15 anni e oltre (valori in migliaia)',
'Misura': 'valori assoluti',
'Sesso': 'totale',
'Classe di età': '15 anni e più',
'Titolo di studio': 'totale',
'Cittadinanza': 'totale',
'Tempo e frequenza': 0
}
df_forzlv = istat_forzlv.getvalues(spec).dataset(0).to_table(rtype=pd.DataFrame)
# df_forzlv
In [10]:
# df_forzlv = df_forzlv.dropna()
df_forzlv = df_forzlv[df_forzlv['Tempo e frequenza'].str.contains(r'^T.*')]
df_forzlv.tail(6)
Out[10]:
In [11]:
istat_inattiv = istat.dataset('LAB', 'DCCV_INATTIV')
istat.options.display.max_rows = 0
# HTML(istat_inattiv.info_dimensions_as_html(show_values=0))
istat_inattiv
Out[11]:
In [12]:
spec = {
'Territorio': 'Italia',
'Tipo dato': 'numero di inattivi (valori in migliaia)',
'Misura': 'valori assoluti',
'Sesso': 'totale',
'Classe di età': '15 anni e più',
'Titolo di studio': 'totale',
'Cittadinanza' : 'totale',
'Condizione professionale': 'totale',
'Motivo inattività': 'totale',
'Condizione dichiarata': 'totale',
'Tempo e frequenza': 0
}
df_inattiv = istat_inattiv.getvalues(spec).dataset(0).to_table(rtype=pd.DataFrame)
# df_inattiv
In [13]:
df_inattiv = df_inattiv[df_inattiv['Tempo e frequenza'].str.contains(r'^T.*')]
df_inattiv.tail(6)
Out[13]: