Notebook: using jsonstat.py to explore ISTAT data (unemployment)¶
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
download dataset from Istat¶
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()))
cache_dir is '/Users/26fe_nas/gioprj.on_mac/prj.python/jsonstat.py/tmp/istat_cached'
# List all datasets contained into area `LAB` (Labour)
istat.area('LAB').datasets()
cod | name | dim |
---|---|---|
DCCV_COMPL | Indicatori complementari | 12 |
DCCV_DISOCCUPT | Disoccupati | 10 |
DCCV_DISOCCUPTDE | Disoccupati - dati destagionalizzati | 7 |
DCCV_DISOCCUPTMENS | Disoccupati - dati mensili | 8 |
DCCV_FORZLV | Forze di lavoro | 8 |
DCCV_FORZLVDE | Forze di lavoro - dati destagionalizzati | 7 |
DCCV_FORZLVMENS | Forze lavoro - dati mensili | 8 |
DCCV_INATTIV | Inattivi | 11 |
DCCV_INATTIVDE | Inattivi - dati destagionalizzati | 7 |
DCCV_INATTIVMENS | Inattivi - dati mensili | 8 |
DCCV_NEET | NEET (giovani non occupati e non in istruzione e formazione) | 10 |
DCCV_OCCUPATIMENS | Occupati - dati mensili | 8 |
DCCV_OCCUPATIT | Occupati | 14 |
DCCV_OCCUPATITDE | Occupati - dati destagionalizzati | 8 |
DCCV_ORELAVMED | Occupati per ore settimanali lavorate e numero di ore settimanali lavorate procapite | 12 |
DCCV_TAXATVT | Tasso di attività | 8 |
DCCV_TAXATVTDE | Tasso di attività - dati destagionalizzati | 7 |
DCCV_TAXATVTMENS | Tasso di attività - dati mensili | 8 |
DCCV_TAXDISOCCU | Tasso di disoccupazione | 9 |
DCCV_TAXDISOCCUDE | Tasso di disoccupazione - dati destagionalizzati | 7 |
DCCV_TAXDISOCCUMENS | Tasso di disoccupazione - dati mensili | 8 |
DCCV_TAXINATT | Tasso di inattività | 8 |
DCCV_TAXINATTDE | Tasso di inattività - dati destagionalizzati | 7 |
DCCV_TAXINATTMENS | Tasso di inattività - dati mensili | 8 |
DCCV_TAXOCCU | Tasso di occupazione | 8 |
DCCV_TAXOCCUDE | Tasso di occupazione - dati destagionalizzati | 7 |
DCCV_TAXOCCUMENS | Tasso di occupazione - dati mensili | 8 |
DCIS_RICSTAT | Ricostruzione statistica delle serie regionali di popolazione del periodo 1/1/2002-1/1/2014 | 6 |
DCSC_COSTLAVSTRUT_1 | Struttura del costo del lavoro (indagine quadriennale) | 6 |
DCSC_COSTLAVULAOROS_1 | Indicatori del costo del lavoro per Ula - dati trimestrali | 5 |
DCSC_GI_COS | Costo del lavoro nelle imprese con almeno 500 dipendenti - dati mensili | 6 |
DCSC_GI_OCC | Occupazione dipendente, tassi di ingresso e uscita nelle imprese con almeno 500 dipendenti - dati mensili | 6 |
DCSC_GI_ORE | Ore lavorate nelle imprese con almeno 500 dipendenti - dati mensili | 6 |
DCSC_GI_RE | Retribuzione lorda nelle imprese con almeno 500 dipendenti - dati mensili | 6 |
DCSC_ORE10_1 | Ore lavorate nelle imprese con almeno 10 dipendenti - dati trimestrali | 5 |
DCSC_OROS_1 | Indice delle posizioni lavorative alle dipendenze - dati trimestrali | 5 |
DCSC_POSTIVAC_1 | Tasso di posti vacanti - dati trimestrali | 5 |
DCSC_RETRATECO1 | Retribuzioni contrattuali per Ateco 2007 | 6 |
DCSC_RETRCASSCOMPPA | Retribuzione contrattuale di cassa e di competenza per dipendente della pubblica amministrazione per contratto - dati annuali - euro | 7 |
DCSC_RETRCONTR1C | Retribuzioni contrattuali per contratto - dati mensili e annuali . | 6 |
DCSC_RETRCONTR1O | Orario contrattuale annuo lordo, netto, ferie e altre ore di riduzione | 6 |
DCSC_RETRCONTR1T | Indicatori di tensione contrattuale - dati mensili e annuali | 6 |
DCSC_RETRULAOROS_1 | Indice delle retribuzioni lorde per Ula - dati trimestrali | 5 |
Download - numero occupati - numero disoccupati - forza lavoro - controllare che nroccupati + nrdisoccupati = forza lavoro
Download Occupati¶
# DCCV_OCCUPATIT
istat_occupatit = istat.dataset('LAB', 'DCCV_OCCUPATIT')
# HTML(istat_occupatit.info_dimensions_as_html(show_values=0))
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)
Tempo e frequenza | Value | |
---|---|---|
187 | T2-2014 | 22316.76 |
188 | T3-2014 | 22398.30 |
189 | T4-2014 | 22374.93 |
190 | T1-2015 | 22158.45 |
191 | T2-2015 | 22496.79 |
192 | T3-2015 | 22645.07 |
df_occupatit.ix[192]
Tempo e frequenza T3-2015
Value 22645.1
Name: 192, dtype: object
Download disoccupati¶
istat_disoccupt = istat.dataset('LAB', 'DCCV_DISOCCUPT')
istat_disoccupt
nr | name | nr. values | values (first 3 values) |
---|---|---|---|
0 | Territorio | 136 | 1:'Italia', 3:'Nord', 4:'Nord-ovest' ... |
1 | Tipo dato | 1 | 2:'numero di persone in cerca di occupazione 15 anni e oltre (valori in migliaia)' |
2 | Misura | 1 | 9:'valori assoluti' |
3 | Sesso | 3 | 1:'maschi', 2:'femmine', 3:'totale' ... |
4 | Classe di età | 11 | 17:'45-54 anni', 4:'15-24 anni', 21:'55-64 anni' ... |
5 | Titolo di studio | 5 | 11:'laurea e post-laurea', 12:'totale', 3:'licenza di scuola elementare, nessun titolo di studio' ... |
6 | Cittadinanza | 3 | 1:'italiano-a', 2:'straniero-a', 3:'totale' ... |
7 | Condizione professionale | 4 | 3:'disoccupati ex-occupati', 4:'disoccupati ex-inattivi', 5:'disoccupati senza esperienza di lavoro' ... |
8 | Durata disoccupazione | 2 | 2:'12 mesi o più', 3:'totale' |
9 | Tempo e frequenza | 193 | 1536:'T4-1980', 2049:'T4-2007', 1540:'1981' ... |
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)
Tempo e frequenza | Value | |
---|---|---|
187 | T2-2014 | 3102.39 |
188 | T3-2014 | 2975.40 |
189 | T4-2014 | 3419.51 |
190 | T1-2015 | 3301.81 |
191 | T2-2015 | 3101.50 |
192 | T3-2015 | 2676.55 |
Download forza Lavoro¶
istat_forzlv = istat.dataset('LAB', 'DCCV_FORZLV')
istat_forzlv
nr | name | nr. values | values (first 3 values) |
---|---|---|---|
0 | Territorio | 136 | 1:'Italia', 3:'Nord', 4:'Nord-ovest' ... |
1 | Tipo dato | 1 | 3:'numero di forze di lavoro15 anni e oltre (valori in migliaia)' |
2 | Misura | 1 | 9:'valori assoluti' |
3 | Sesso | 3 | 1:'maschi', 2:'femmine', 3:'totale' ... |
4 | Classe di età | 10 | 17:'45-54 anni', 4:'15-24 anni', 21:'55-64 anni' ... |
5 | Titolo di studio | 5 | 11:'laurea e post-laurea', 12:'totale', 3:'licenza di scuola elementare, nessun titolo di studio' ... |
6 | Cittadinanza | 3 | 1:'italiano-a', 2:'straniero-a', 3:'totale' ... |
7 | Tempo e frequenza | 193 | 1536:'T4-1980', 2049:'T4-2007', 1540:'1981' ... |
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
# df_forzlv = df_forzlv.dropna()
df_forzlv = df_forzlv[df_forzlv['Tempo e frequenza'].str.contains(r'^T.*')]
df_forzlv.tail(6)
Tempo e frequenza | Value | |
---|---|---|
187 | T2-2014 | 25419.15 |
188 | T3-2014 | 25373.70 |
189 | T4-2014 | 25794.44 |
190 | T1-2015 | 25460.25 |
191 | T2-2015 | 25598.29 |
192 | T3-2015 | 25321.61 |
Download inattivi¶
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
nr | name | nr. values | values (alls values) |
---|---|---|---|
0 | Territorio | 136 | 1:'Italia', 3:'Nord', 4:'Nord-ovest', 5:'Piemonte', 6:'Torino', 7:'Vercelli', 8:'Biella', 9:'Verbano-Cusio-Ossola', 10:'Novara', 11:'Cuneo', 12:'Asti', 13:'Alessandria', 14:'Valle d'Aosta / Vallée d'Aoste', 15:'Valle d'Aosta / Vallée d'Aoste', 16:'Liguria', 17:'Imperia', 18:'Savona', 19:'Genova', 20:'La Spezia', 21:'Lombardia', 22:'Varese', 23:'Como', 24:'Lecco', 25:'Sondrio', 26:'Milano', 27:'Bergamo', 28:'Brescia', 29:'Pavia', 30:'Lodi', 31:'Cremona', 32:'Mantova', 33:'Nord-est', 34:'Trentino Alto Adige / Südtirol', 35:'Provincia Autonoma Bolzano / Bozen', 37:'Provincia Autonoma Trento', 39:'Veneto', 40:'Verona', 41:'Vicenza', 42:'Belluno', 43:'Treviso', 44:'Venezia', 45:'Padova', 46:'Rovigo', 47:'Friuli-Venezia Giulia', 48:'Pordenone', 49:'Udine', 50:'Gorizia', 51:'Trieste', 52:'Emilia-Romagna', 53:'Piacenza', 54:'Parma', 55:'Reggio nell'Emilia', 56:'Modena', 57:'Bologna', 58:'Ferrara', 59:'Ravenna', 60:'Forlì-Cesena', 61:'Rimini', 62:'Centro', 63:'Toscana', 64:'Massa-Carrara', 65:'Lucca', 66:'Pistoia', 67:'Firenze', 68:'Prato', 69:'Livorno', 70:'Pisa', 71:'Arezzo', 72:'Siena', 73:'Grosseto', 74:'Umbria', 75:'Perugia', 76:'Terni', 77:'Marche', 78:'Pesaro e Urbino', 79:'Ancona', 80:'Macerata', 81:'Ascoli Piceno', 82:'Lazio', 83:'Viterbo', 84:'Rieti', 85:'Roma', 86:'Latina', 87:'Frosinone', 88:'Mezzogiorno', 90:'Abruzzo', 91:'L'Aquila', 92:'Teramo', 93:'Pescara', 94:'Chieti', 95:'Molise', 96:'Isernia', 97:'Campobasso', 98:'Campania', 99:'Caserta', 100:'Benevento', 101:'Napoli', 102:'Avellino', 103:'Salerno', 104:'Puglia', 105:'Foggia', 106:'Bari', 107:'Taranto', 108:'Brindisi', 109:'Lecce', 110:'Basilicata', 111:'Potenza', 112:'Matera', 113:'Calabria', 114:'Cosenza', 115:'Crotone', 116:'Catanzaro', 117:'Vibo Valentia', 118:'Reggio di Calabria', 120:'Sicilia', 121:'Trapani', 122:'Palermo', 123:'Messina', 124:'Agrigento', 125:'Caltanissetta', 126:'Enna', 127:'Catania', 128:'Ragusa', 129:'Siracusa', 130:'Sardegna', 131:'Sassari', 132:'Nuoro', 133:'Cagliari', 134:'Oristano', 135:'Olbia-Tempio', 136:'Ogliastra', 137:'Medio Campidano', 138:'Carbonia-Iglesias', 146:'Monza e della Brianza', 147:'Fermo', 148:'Barletta-Andria-Trani' |
1 | Tipo dato | 2 | 3:'numero di forze di lavoro15 anni e oltre (valori in migliaia)', 4:'numero di inattivi (valori in migliaia)' |
2 | Misura | 1 | 9:'valori assoluti' |
3 | Sesso | 3 | 1:'maschi', 2:'femmine', 3:'totale' |
4 | Classe di età | 12 | 1:'0-14 anni', 4:'15-24 anni', 7:'15-34 anni', 8:'25-34 anni', 10:'35-64 anni', 14:'35-44 anni', 17:'45-54 anni', 21:'55-64 anni', 22:'15-64 anni', 25:'65 anni e più', 28:'15 anni e più', 29:'totale' |
5 | Titolo di studio | 5 | 11:'laurea e post-laurea', 12:'totale', 3:'licenza di scuola elementare, nessun titolo di studio', 4:'licenza di scuola media', 7:'diploma' |
6 | Cittadinanza | 3 | 1:'italiano-a', 2:'straniero-a', 3:'totale' |
7 | Condizione professionale | 9 | 6:'inattivi in età lavorativa', 7:'cercano lavoro non attivamente', 8:'cercano lavoro ma non disponibili a lavorare', 9:'non cercano ma disponibili a lavorare', 10:'non cercano e non disponibili a lavorare', 11:'inattivi in età non lavorativa', 12:'non forze di lavoro fino a 14 anni', 13:'non forze di lavoro di 65 anni e più', 14:'totale' |
8 | Motivo inattività | 7 | 1:'scoraggiamento', 2:'motivi familiari', 3:'studio, formazione professionale', 4:'aspetta esiti passate azioni di ricerca', 5:'pensione, non interessa anche per motivi di età', 6:'altri motivi', 7:'totale' |
9 | Condizione dichiarata | 8 | 1:'occupato', 6:'disoccupato alla ricerca di nuova occupazione', 7:'in cerca di prima occupazione', 8:'casalinga-o', 9:'studente', 10:'ritirato-a dal lavoro', 11:'in altra condizione', 12:'totale' |
10 | Tempo e frequenza | 193 | 1536:'T4-1980', 2049:'T4-2007', 1540:'1981', 2053:'2008', 1542:'T1-1981', 2055:'T1-2008', 1546:'T2-1981', 2059:'T2-2008', 1551:'T3-1981', 2064:'T3-2008', 1555:'T4-1981', 2068:'T4-2008', 1559:'1982', 2072:'2009', 1561:'T1-1982', 2074:'T1-2009', 1565:'T2-1982', 2078:'T2-2009', 1570:'T3-1982', 2083:'T3-2009', 1574:'T4-1982', 2087:'T4-2009', 1578:'1983', 2091:'2010', 1580:'T1-1983', 2093:'T1-2010', 1584:'T2-1983', 2097:'T2-2010', 1589:'T3-1983', 2102:'T3-2010', 1593:'T4-1983', 2106:'T4-2010', 1597:'1984', 2110:'2011', 1599:'T1-1984', 2112:'T1-2011', 1603:'T2-1984', 2116:'T2-2011', 1608:'T3-1984', 2121:'T3-2011', 1612:'T4-1984', 2125:'T4-2011', 1616:'1985', 2129:'2012', 1618:'T1-1985', 2131:'T1-2012', 1622:'T2-1985', 2135:'T2-2012', 1627:'T3-1985', 2140:'T3-2012', 1631:'T4-1985', 2144:'T4-2012', 1635:'1986', 2148:'2013', 1637:'T1-1986', 2150:'T1-2013', 1641:'T2-1986', 2154:'T2-2013', 1646:'T3-1986', 2159:'T3-2013', 1650:'T4-1986', 2163:'T4-2013', 1654:'1987', 2167:'2014', 1656:'T1-1987', 2169:'T1-2014', 1660:'T2-1987', 2173:'T2-2014', 1665:'T3-1987', 2178:'T3-2014', 1669:'T4-1987', 2182:'T4-2014', 1673:'1988', 1675:'T1-1988', 2188:'T1-2015', 1679:'T2-1988', 2192:'T2-2015', 1684:'T3-1988', 2197:'T3-2015', 1688:'T4-1988', 1692:'1989', 1694:'T1-1989', 1698:'T2-1989', 1703:'T3-1989', 1707:'T4-1989', 1711:'1990', 1713:'T1-1990', 1717:'T2-1990', 1722:'T3-1990', 1726:'T4-1990', 1730:'1991', 1732:'T1-1991', 1736:'T2-1991', 1741:'T3-1991', 1745:'T4-1991', 1749:'1992', 1751:'T1-1992', 1755:'T2-1992', 1760:'T3-1992', 1764:'T4-1992', 1768:'1993', 1770:'T1-1993', 1774:'T2-1993', 1779:'T3-1993', 1783:'T4-1993', 1787:'1994', 1789:'T1-1994', 1793:'T2-1994', 1798:'T3-1994', 1802:'T4-1994', 1806:'1995', 1808:'T1-1995', 1812:'T2-1995', 1817:'T3-1995', 1821:'T4-1995', 1825:'1996', 1827:'T1-1996', 1831:'T2-1996', 1836:'T3-1996', 1840:'T4-1996', 1844:'1997', 1846:'T1-1997', 1850:'T2-1997', 1855:'T3-1997', 1859:'T4-1997', 1863:'1998', 1865:'T1-1998', 1869:'T2-1998', 1874:'T3-1998', 1878:'T4-1998', 1882:'1999', 1884:'T1-1999', 1888:'T2-1999', 1893:'T3-1999', 1897:'T4-1999', 1901:'2000', 1903:'T1-2000', 1907:'T2-2000', 1912:'T3-2000', 1916:'T4-2000', 1920:'2001', 1922:'T1-2001', 1926:'T2-2001', 1931:'T3-2001', 1935:'T4-2001', 1939:'2002', 1941:'T1-2002', 1945:'T2-2002', 1950:'T3-2002', 1954:'T4-2002', 1958:'2003', 1960:'T1-2003', 1964:'T2-2003', 1969:'T3-2003', 1973:'T4-2003', 1464:'1977', 1977:'2004', 1466:'T1-1977', 1979:'T1-2004', 1470:'T2-1977', 1983:'T2-2004', 1475:'T3-1977', 1988:'T3-2004', 1479:'T4-1977', 1992:'T4-2004', 1483:'1978', 1996:'2005', 1485:'T1-1978', 1998:'T1-2005', 1489:'T2-1978', 2002:'T2-2005', 1494:'T3-1978', 2007:'T3-2005', 1498:'T4-1978', 2011:'T4-2005', 1502:'1979', 2015:'2006', 1504:'T1-1979', 2017:'T1-2006', 1508:'T2-1979', 2021:'T2-2006', 1513:'T3-1979', 2026:'T3-2006', 1517:'T4-1979', 2030:'T4-2006', 1521:'1980', 2034:'2007', 1523:'T1-1980', 2036:'T1-2007', 1527:'T2-1980', 2040:'T2-2007', 1532:'T3-1980', 2045:'T3-2007' |
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
df_inattiv = df_inattiv[df_inattiv['Tempo e frequenza'].str.contains(r'^T.*')]
df_inattiv.tail(6)
Tempo e frequenza | Value | |
---|---|---|
187 | T2-2014 | 26594.57 |
188 | T3-2014 | 26646.90 |
189 | T4-2014 | 26257.15 |
190 | T1-2015 | 26608.07 |
191 | T2-2015 | 26487.67 |
192 | T3-2015 | 26746.26 |