In [1]:
import os
import pyogrio
import folium
import pandas as pd
import plotly.graph_objects as go
import geopandas as gpd
In [2]:
pd.set_option('display.max_colwidth', 255)

Caratteristiche della popolazione¶

In [3]:
istat_path = os.path.join(os.path.expanduser('~'),'ILAB_DATA','ISTAT','DATA')

vecchiaia = pd.read_parquet(os.path.join(istat_path,'comuni_pop_age_italia.parquet'))
In [4]:
vecchiaia.shape
Out[4]:
(546060, 9)
In [5]:
vecchiaia.TIME_PERIOD.unique()
Out[5]:
array(['2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009',
       '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017',
       '2018', '2019', '2020', '2021', '2022', '2023', '2024'],
      dtype=object)
In [6]:
vecchiaia[vecchiaia['REF_AREA']=='058091']
Out[6]:
REF_AREA TIME_PERIOD SEX TOTAL Y0-14 Y15-64 Y65-109 EM Y0
326949 058091 2002 females 1347406 158482 899560 289364 44.529548 10472.0
326950 058091 2002 males 1198571 168118 832932 197521 41.215456 11268.0
326951 058091 2002 total 2545977 326600 1732492 486885 42.969371 21740.0
326952 058091 2003 females 1348121 160348 892191 295582 44.784015 11515.0
326953 058091 2003 males 1196694 170110 824796 201788 41.442162 12146.0
... ... ... ... ... ... ... ... ... ...
327013 058091 2023 males 1308818 175975 864091 268752 44.681555 9074.0
327014 058091 2023 total 2755309 342239 1766329 646741 46.550928 17488.0
327015 058091 2024 females 1446173 162238 901172 382763 48.499402 7879.0
327016 058091 2024 males 1308546 171272 863772 273502 44.984758 8285.0
327017 058091 2024 total 2754719 333510 1764944 656265 46.829876 16164.0

69 rows × 9 columns

Report immigrati¶

In [7]:
ANNI = list(range(2017, 2024))
In [8]:
col_map = {
    'perc_immigrati':'Immigrati',
    'perc_non_immigrati':'Non immigrati',
    'perc_totale_entrate':'Totale entrate',
}
In [9]:
def slider_plot(pivot, col,color=None, titolo=None):    
    fig = go.Figure()
    for anno in ANNI:
        # pivot.sort_values(by=anno, ascending=True, inplace=True)
        fig.add_trace(go.Bar(name=anno, y=pivot[col], x=pivot[anno], orientation='h', text=pivot[anno],visible=False,marker_color=color))
    fig.data[0].visible=True

    # Create and add slider
    steps = []
    for i in range(len(fig.data)):
        step = dict(
            method="update",
            args=[{"visible": [False] * len(fig.data)},
                ],  # layout attribute
            label=str(ANNI[i])
        )
        step["args"][0]["visible"][i] = True  # Toggle i'th trace to "visible"
        steps.append(step)

    sliders = [dict(
        active=0,
        steps=steps
    )]
    fig.update_layout(title=titolo,sliders=sliders, autosize=False, width=1200, height=500)
    fig.show()

I principali settori di impiego¶

In [10]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_settore.csv', sep=';')
df['perc_numero_immigrati_in_entrata'] = df['perc_numero_immigrati_in_entrata'].round(1)
In [11]:
df.head()
Out[11]:
settore totale_entrate numero_immigrati_in_entrata loca anno cod macro_settore perc_numero_immigrati_in_entrata
0 Industrie alimentari 3210 1430 Torino 2017 02010101 Industrie 44.5
1 Ind. tessili e dell'abbigliamento 900 100 Torino 2017 02010201 Industrie 11.1
2 Industrie del legno e del mobile 720 20 Torino 2017 02010301 Industrie 2.8
3 Industrie della carta e stampa 700 60 Torino 2017 02010401 Industrie 8.6
4 Ind. estrattive e lavorazione minerali 100 0 Torino 2017 02010601 Industrie 0.0

(Slide 10)

In [12]:
g = df.groupby(by='anno', as_index=False).agg('sum')
In [13]:
g[['anno','totale_entrate','numero_immigrati_in_entrata']]
Out[13]:
anno totale_entrate numero_immigrati_in_entrata
0 2017 148930 21870
1 2018 168790 22460
2 2019 166770 22390
3 2020 120290 15730
4 2021 167070 25490
5 2022 183230 33060
6 2023 189390 40120
In [14]:
fig = go.Figure(go.Bar(name='Numero immigrati', y=g['numero_immigrati_in_entrata'], x=g['anno'], text=g['numero_immigrati_in_entrata'], marker_color='indianred'))
fig.update_layout(title='ENTRATE PROGRAMMATE DALLE IMPRESE DI PERSONALE IMMIGRATO nella provincia di Torino')
fig.show()
In [ ]:
 

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI DEI SERVIZI (valori percentuali, anni 2019-2023)¶

In [15]:
df_servizi = df[df['macro_settore']=='Servizi']
pivot = df_servizi.pivot(index='settore', columns='anno', values='perc_numero_immigrati_in_entrata').reset_index().sort_values([2023], ascending=[True])

(Slide 11a)

In [16]:
pivot.sort_values(by='settore')
Out[16]:
anno settore 2017 2018 2019 2020 2021 2022 2023
0 Commercio 8.9 6.6 8.9 9.4 11.8 10.6 11.1
1 Informatica e telecomunicazioni 8.7 6.5 7.4 14.3 11.8 18.6 17.4
2 Istruzione e servizi formativi 8.8 9.6 9.8 9.5 15.9 10.5 21.7
3 Media e comunicazione 5.1 6.7 6.3 7.8 6.3 1.6 0.9
4 Sanità e assistenza sociale 19.8 23.7 23.9 20.5 17.0 25.9 28.0
5 Servizi avanzati alle imprese 15.9 7.1 4.8 3.8 8.4 5.4 11.6
6 Servizi finanziari e assicurativi 3.9 3.9 6.3 2.7 3.5 11.5 5.1
7 Servizi operativi 20.0 21.0 17.9 18.1 22.0 32.0 31.8
8 Tempo libero e altri serv. alle persone 11.1 12.3 11.1 11.8 10.5 8.6 9.6
9 Trasporti e logistica 27.0 22.8 29.2 24.2 36.4 36.9 43.9
10 Turismo e ristorazione 7.7 15.7 15.5 12.3 9.1 10.3 20.7
In [17]:
slider_plot(pivot, 'settore',titolo='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI DEI SERVIZI provincia torino (valori percentuali, anni 2017-2023)')

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI DELL’INDUSTRIA (valori percentuali, anni 2019-2023)¶

In [18]:
df_industrie = df[df['macro_settore']=='Industrie']
pivot = df_industrie.pivot(index='settore', columns='anno', values='perc_numero_immigrati_in_entrata').reset_index().sort_values([2023], ascending=[True])

(Slide 11b)

In [19]:
pivot.sort_values(by='settore')
Out[19]:
anno settore 2017 2018 2019 2020 2021 2022 2023
0 Altre industrie 20.0 11.4 9.1 5.7 12.7 22.9 15.2
1 Costruzioni 14.8 9.9 11.8 11.0 15.1 23.8 23.3
2 Ind. della gomma e della plastica 10.6 8.4 19.3 17.4 21.1 19.8 24.1
3 Ind. estrattive e lavorazione minerali 0.0 3.5 13.4 19.0 10.9 17.2 40.6
4 Ind. tessili e dell'abbigliamento 11.1 22.2 7.7 8.8 3.8 7.2 11.1
5 Industrie alimentari 44.5 7.3 14.5 16.3 14.3 19.2 27.7
6 Industrie dei metalli 15.6 19.5 17.0 17.7 19.1 24.8 29.5
7 Industrie del legno e del mobile 2.8 10.1 17.2 10.5 4.2 13.2 13.9
8 Industrie della carta e stampa 8.6 5.6 10.3 3.6 5.7 17.1 14.0
9 Industrie elettriche ed elettroniche 4.2 6.9 7.7 8.4 6.4 9.4 14.4
10 Industrie meccaniche 8.0 10.4 6.8 7.1 14.9 16.4 16.0
11 Public utilities 6.1 3.7 5.6 6.7 13.5 21.0 26.3
In [20]:
slider_plot(pivot, 'settore',color='indianred',titolo='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI DELL’INDUSTRIA (valori percentuali, anni 2017-2023)')

Differenze di genere e secondo la classe dimensionale d’impresa nella domanda di lavoratori immigrati¶

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI PER GENERE (valori assoluti e percentuali, 2023)¶

In [21]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_settore_sesso.csv', sep=';')
df['perc_figura_femminile'] = df['perc_figura_femminile'].round(1)
df['perc_figura_maschile'] = df['perc_figura_maschile'].round(1)
df['perc_indifferente'] = df['perc_indifferente'].round(1)
df = df.sort_values(['perc_figura_femminile','perc_figura_maschile'], ascending=[True, True])
In [22]:
fig = go.Figure()
for col in ['perc_figura_femminile', 'perc_figura_maschile', 'perc_indifferente']:
    fig.add_trace(go.Bar(name=col, y=df['settore'], x=df[col], orientation='h'))#, text=df[col]))

fig.update_layout(barmode='stack', width=1100, height=700, xaxis={'visible': False},title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO NEI SETTORI PER GENERE (valori percentuali, 2023)')
fig.show()

DINAMICA DELLE ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO DI GENERE FEMMINILE (valori assoluti e percentuali, anni 2019-2023)¶

In [23]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_settore_sesso_femminile.csv', sep=';')

Servizi¶

In [24]:
df_servizi = df[df['macro_settore']=='Servizi']
pivot = df_servizi.pivot(index='settore', columns='anno', values='figura_femminile').reset_index().sort_values([2023], ascending=[True])
In [25]:
slider_plot(pivot, 'settore',titolo='DINAMICA DELLE ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO DI GENERE FEMMINILE (valori assoluti, anni 2017-2023)')

Industrie¶

In [26]:
df_industrie = df[df['macro_settore']=='Industrie']
pivot = df_industrie.pivot(index='settore', columns='anno', values='figura_femminile').reset_index().sort_values([2023], ascending=[True])
In [27]:
slider_plot(pivot, 'settore',titolo='DINAMICA DELLE ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO DI GENERE FEMMINILE (valori assoluti, anni 2017-2023)')

I fabbisogni di personale immigrato per tipologia professionale e le difficoltà di reperimento¶

ENTRATE PROGRAMMATE PER NAZIONALITÀ E GRANDI GRUPPI PROFESSIONALI (valori percentuali, anni 2019-2023)¶

In [28]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_macro_professione.csv', sep=';')
df['perc_immigrati'] = df['perc_immigrati'].round(1)
df['perc_non_immigrati'] = df['perc_non_immigrati'].round(1)

(Slide 12)

In [29]:
df
Out[29]:
professione totale_entrate numero_immigrati_in_entrata loca anno cod numero_non_immigrati_in_entrata perc_immigrati perc_non_immigrati
0 Dirigenti 360 10 Torino 2017 1 350 0.0 0.3
1 Professioni intellettuali, scientifiche e di elevata specializzazione 11350 900 Torino 2017 2 10450 4.1 8.2
2 Professioni tecniche 22810 1790 Torino 2017 3 21020 8.2 16.5
3 Professioni esecutive nel lavoro d'ufficio 17310 1960 Torino 2017 4 15350 9.0 12.1
4 Professioni qualificate nelle attività commerciali e nei servizi 31380 2950 Torino 2017 5 28430 13.5 22.4
5 Artigiani, operai specializzati e agricoltori 21790 3840 Torino 2017 6 17950 17.6 14.1
6 Conduttori di impianti e operai di macchinari fissi e mobili 20780 3410 Torino 2017 7 17370 15.6 13.7
7 Professioni non qualificate 23170 7000 Torino 2017 8 16170 32.0 12.7
8 Dirigenti 630 90 Torino 2018 1 540 0.4 0.4
9 Professioni intellettuali, scientifiche e di elevata specializzazione 14370 960 Torino 2018 2 13410 4.3 9.2
10 Professioni tecniche 26000 1980 Torino 2018 3 24020 8.8 16.4
11 Professioni esecutive nel lavoro d'ufficio 16940 850 Torino 2018 4 16090 3.8 11.0
12 Professioni qualificate nelle attività commerciali e nei servizi 37690 5160 Torino 2018 5 32530 23.0 22.2
13 Artigiani, operai specializzati e agricoltori 24130 3570 Torino 2018 6 20560 15.9 14.1
14 Conduttori di impianti e operai di macchinari fissi e mobili 24860 3360 Torino 2018 7 21500 15.0 14.7
15 Professioni non qualificate 24160 6490 Torino 2018 8 17670 28.9 12.1
16 Dirigenti 620 80 Torino 2019 1 540 0.4 0.4
17 Professioni intellettuali, scientifiche e di elevata specializzazione 15770 1200 Torino 2019 2 14570 5.4 10.1
18 Professioni tecniche 30840 2350 Torino 2019 3 28490 10.5 19.7
19 Professioni esecutive nel lavoro d'ufficio 18050 960 Torino 2019 4 17090 4.3 11.8
20 Professioni qualificate nelle attività commerciali e nei servizi 41110 6270 Torino 2019 5 34840 28.0 24.1
21 Artigiani, operai specializzati e agricoltori 20160 3450 Torino 2019 6 16710 15.4 11.6
22 Conduttori di impianti e operai di macchinari fissi e mobili 21480 4320 Torino 2019 7 17160 19.3 11.9
23 Professioni non qualificate 18730 3770 Torino 2019 8 14960 16.8 10.4
24 Dirigenti 250 10 Torino 2020 1 240 0.1 0.2
25 Professioni intellettuali, scientifiche e di elevata specializzazione 11180 810 Torino 2020 2 10370 5.2 9.9
26 Professioni tecniche 21370 1620 Torino 2020 3 19750 10.3 18.9
27 Professioni esecutive nel lavoro d'ufficio 11750 790 Torino 2020 4 10960 5.0 10.5
28 Professioni qualificate nelle attività commerciali e nei servizi 28890 4480 Torino 2020 5 24410 28.5 23.3
29 Artigiani, operai specializzati e agricoltori 15270 1950 Torino 2020 6 13320 12.4 12.7
30 Conduttori di impianti e operai di macchinari fissi e mobili 16410 3400 Torino 2020 7 13010 21.7 12.4
31 Professioni non qualificate 15180 2640 Torino 2020 8 12540 16.8 12.0
32 Dirigenti 530 40 Torino 2021 1 490 0.2 0.3
33 Professioni intellettuali, scientifiche e di elevata specializzazione 13880 1420 Torino 2021 2 12460 5.6 8.8
34 Professioni tecniche 27230 2480 Torino 2021 3 24750 9.7 17.5
35 Professioni esecutive nel lavoro d'ufficio 15400 950 Torino 2021 4 14450 3.7 10.2
36 Professioni qualificate nelle attività commerciali e nei servizi 41230 5160 Torino 2021 5 36070 20.3 25.5
37 Artigiani, operai specializzati e agricoltori 22790 4350 Torino 2021 6 18440 17.1 13.0
38 Conduttori di impianti e operai di macchinari fissi e mobili 26280 6820 Torino 2021 7 19460 26.8 13.7
39 Professioni non qualificate 19730 4240 Torino 2021 8 15490 16.7 10.9
40 Dirigenti 390 20 Torino 2022 1 370 0.1 0.2
41 Professioni intellettuali, scientifiche e di elevata specializzazione 16490 2190 Torino 2022 2 14300 6.6 9.5
42 Professioni tecniche 34420 3850 Torino 2022 3 30570 11.6 20.4
43 Professioni esecutive nel lavoro d'ufficio 17140 1330 Torino 2022 4 15810 4.0 10.5
44 Professioni qualificate nelle attività commerciali e nei servizi 37640 5580 Torino 2022 5 32060 16.9 21.4
45 Artigiani, operai specializzati e agricoltori 23890 5280 Torino 2022 6 18610 16.0 12.4
46 Conduttori di impianti e operai di macchinari fissi e mobili 24600 6640 Torino 2022 7 17960 20.1 12.0
47 Professioni non qualificate 28650 8180 Torino 2022 8 20470 24.7 13.6
48 Dirigenti 380 20 Torino 2023 1 360 0.0 0.2
49 Professioni intellettuali, scientifiche e di elevata specializzazione 15070 1690 Torino 2023 2 13380 4.2 9.0
50 Professioni tecniche 34180 5190 Torino 2023 3 28990 12.9 19.4
51 Professioni esecutive nel lavoro d'ufficio 20400 2860 Torino 2023 4 17540 7.1 11.7
52 Professioni qualificate nelle attività commerciali e nei servizi 42700 8270 Torino 2023 5 34430 20.6 23.1
53 Artigiani, operai specializzati e agricoltori 26990 6070 Torino 2023 6 20920 15.1 14.0
54 Conduttori di impianti e operai di macchinari fissi e mobili 21520 6750 Torino 2023 7 14770 16.8 9.9
55 Professioni non qualificate 28150 9260 Torino 2023 8 18890 23.1 12.7
In [30]:
fig = go.Figure()
for anno in ANNI:
    bars = list()
    temp = df[df['anno']==anno].copy()
    temp.sort_values(by='professione', ascending=True, inplace=True)
    fig.add_traces(go.Bar(name='Percentuale Immigrati', 
                       y=temp['professione'], 
                       x=temp['perc_immigrati'], 
                       orientation='h', 
                       text=temp['perc_immigrati'],
                       visible=False,
                       hoverinfo='skip',
                       #hovertemplate = '%{y}'
                       ))
    fig.add_traces(go.Bar(name='Percentuale Non Immigrati', 
                       y=temp['professione'], 
                       x=temp['perc_non_immigrati'], 
                       orientation='h', 
                       text=temp['perc_non_immigrati'],
                       visible=False,
                       hoverinfo='skip',
                       #hovertemplate = '%{y}'
                       ))
fig.data[0].visible=True
fig.data[1].visible=True

# Create and add slider
steps = []
for i in range(0,len(fig.data),2):
    step = dict(
        method="update",
        args=[{"visible": [False] * len(fig.data)},
            ],  # layout attribute
        label=str(ANNI[int(i/2)])
    )
    step["args"][0]["visible"][i] = True  # Toggle i'th trace to "visible"
    step["args"][0]["visible"][i+1] = True  # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(active=0,steps=steps)]
fig.update_layout(barmode='group',
                  sliders=sliders,
                  autosize=False, 
                  width=1100, 
                  height=600,
                  title='ENTRATE PROGRAMMATE PER NAZIONALITÀ E GRANDI GRUPPI PROFESSIONALI (valori percentuali, anni 2017-2023)',
                  hoverlabel=dict(
                    #bgcolor="white",
                    font_size=16,
                    #font_family="Rockwell"
                    )
                )
fig.show()
In [ ]:
 
In [31]:
df23 = df[df['anno']==2023].copy()
df23.sort_values(by='perc_immigrati', inplace=True)
fig = go.Figure([go.Scatterpolar(name=col_map[el], r=df23[el], theta=df23['professione'], fill='toself') for el in ['perc_non_immigrati','perc_immigrati']])
fig.update_layout(title='ENTRATE PROGRAMMATE PER NAZIONALITÀ E GRANDI GRUPPI PROFESSIONALI (valori percentuali) - Anno 2023', polar={'radialaxis':{'visible':True, 'showticklabels':False}})
fig.show()

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER GRANDI GRUPPI PROFESSIONALI (valori assoluti, anni 2019-2023)¶

In [32]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_macro_professione.csv', sep=';')
pivot = df.pivot(index='professione', columns='anno', values='numero_immigrati_in_entrata').reset_index().sort_values([2023], ascending=[True])
In [33]:
professioni = df.professione.unique()
professioni.sort()
In [34]:
fig = go.Figure()
for professione in professioni:
    provv = df[df['professione']==professione].copy()
    fig.add_trace(go.Scatter(x=provv['anno'],y=provv['numero_immigrati_in_entrata'], name=professione))
fig.update_layout(title='Provincia di Torino - Andamento negli anni dei lavoratori immigrati per grandi gruppi professionali')
fig.show()
In [35]:
fig = go.Figure()
for professione in professioni:
    provv = df[df['professione']==professione].copy()
    fig.add_trace(go.Scatter(x=provv['anno'],y=provv['perc_immigrati'], name=professione))
fig.update_layout(title='Provincia di Torino - Andamento negli anni dei lavoratori immigrati per grandi gruppi professionali sul totale di lavoratori immigrati')
fig.show()
In [36]:
slider_plot(pivot,'professione',titolo='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER GRANDI GRUPPI PROFESSIONALI (valori assoluti, anni 2017-2023)')

ENTRATE PROGRAMMATE RITENUTE DI DIFFICILE REPERIMENTO SECONDO LA CITTADINANZA (valori percentuali, anni 2019-2023)¶

In [37]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_reperimento.csv', sep=';')
df['perc_immigrati'] = df['perc_immigrati'].round(1)
df['perc_non_immigrati'] = df['perc_non_immigrati'].round(1)

(Slide 6)

In [38]:
df[['perc_non_immigrati','perc_immigrati','anno']]
Out[38]:
perc_non_immigrati perc_immigrati anno
0 20.8 30.6 2017
1 27.2 27.8 2018
2 25.4 30.8 2019
3 30.3 32.0 2020
4 31.3 38.0 2021
5 41.0 47.1 2022
6 43.4 51.5 2023
In [39]:
fig = go.Figure([go.Bar(name=col_map[el], x=df['anno'], y=df[el], text=df[el]) for el in ['perc_immigrati', 'perc_non_immigrati']])
fig.update_layout(barmode='group',title='ENTRATE PROGRAMMATE RITENUTE DI DIFFICILE REPERIMENTO SECONDO LA CITTADINANZA (valori percentuali, anni 2017-2023)')
fig.show()

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO RITENUTE DI DIFFICILE REPERIMENTO PER GRANDI GRUPPI PROFESSIONALI (valori percentuali, anni 2019-2023)¶

In [40]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_macro_professione_reperimento.csv', sep=';')
df['perc_difficile_da_reperire'] = df['perc_difficile_da_reperire'].round(1)
In [41]:
pivot = df.pivot(index='professione', columns='anno', values='perc_difficile_da_reperire').reset_index().sort_values([2023], ascending=[True])
In [42]:
slider_plot(pivot,'professione',titolo='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO RITENUTE DI DIFFICILE REPERIMENTO PER GRANDI GRUPPI PROFESSIONALI (valori percentuali, anni 2017-2023)')

I titoli di studio e la formazione richiesta al personale immigrato in entrata¶

In [43]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_titolo_studio.csv', sep=';')
df['perc_immigrati'] = df['perc_immigrati'].round(1)
df['perc_totale_entrate'] = df['perc_totale_entrate'].round(1)

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER LIVELLI DI ISTRUZIONE (valori percentuali, anni 2019-2023)¶

In [44]:
pivot = df.pivot(index='titolo_studio', columns='anno', values='perc_immigrati').reset_index().sort_values(by=2023, ascending=True)
pivot = pivot[pivot['titolo_studio']!='Istruzione tecnica superiore (ITS)'].copy()
In [45]:
fig = go.Figure([go.Bar(name=anno, x=pivot['titolo_studio'], y=pivot[anno], orientation='v', text=pivot[anno]) for anno in ANNI])
fig.update_layout(barmode='group', title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER LIVELLI DI ISTRUZIONE (valori percentuali, anni 2017-2023)')#, autosize=False, width=1100, height=800)
fig.update_traces(textposition='outside', textfont_size=10)
fig.show()

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER LIVELLI DI ISTRUZIONE (valori assoluti, 2023)¶

In [46]:
df23 = df[df['anno']==2023]

fig = go.Figure([go.Bar(y=df23['titolo_studio'], x=df23['numero_immigrati_in_entrata'], orientation='h', text=df23['numero_immigrati_in_entrata'])])
fig.update_layout(title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO PER LIVELLI DI ISTRUZIONE (valori assoluti, 2023)')#, autosize=False, width=1100, height=800)
fig.show()

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LIVELLI DI ISTRUZIONE (valori percentuali, 2023)¶

In [47]:
fig = go.Figure([go.Bar(name=el, y=df23['titolo_studio'], x=df23[el], orientation='h', text=df23[el]) for el in ['perc_immigrati','perc_totale_entrate']])
fig.update_layout(barmode='group',title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LIVELLI DI ISTRUZIONE (valori percentuali, 2023)')#, autosize=False, width=1100, height=800)
fig.update_traces(textposition='outside', textfont_size=10)
fig.show()
In [48]:
fig = go.Figure([go.Scatterpolar(name=col_map[el], r=df23[el], theta=df23['titolo_studio'], fill='toself') for el in ['perc_totale_entrate','perc_immigrati']])
fig.update_layout(title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LE QUALI SONO RICHIESTE COMPETENZE CON LIVELLO DI IMPORTANZA MEDIO-ALTA O ALTA (valori percentuali, 2023)', polar={'radialaxis':{'visible':True, 'showticklabels':False}})
fig.show()

Le competenze ricercate dalle imprese¶

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LE QUALI SONO RICHIESTE COMPETENZE CON LIVELLO DI IMPORTANZA MEDIO-ALTO O ALTO (valori percentuali, 2023)¶

In [49]:
df = pd.read_csv('migration/immigrati/OUT/TORINO_competenza.csv', sep=';')
df['perc_immigrati'] = df['perc_immigrati'].round(1)
df['perc_totale_entrate'] = df['perc_totale_entrate'].round(1)
df.sort_values(by='perc_immigrati', ascending=True, inplace=True)
In [50]:
fig = go.Figure([go.Bar(name=col_map[el], y=df['competenza_medioalta_alta'], x=df[el], orientation='h', text=df[el]) for el in ['perc_immigrati','perc_totale_entrate']])
fig.update_layout(barmode='group', title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LE QUALI SONO RICHIESTE COMPETENZE CON LIVELLO DI IMPORTANZA MEDIO-ALTO O ALTO (valori percentuali, 2023)')#, autosize=False, width=1100, height=800)
fig.update_traces(textposition='outside', textfont_size=10)
fig.show()

ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LE QUALI SONO RICHIESTE COMPETENZE CON LIVELLO DI IMPORTANZA MEDIO-ALTA O ALTA PER GRANDI GRUPPI PROFESSIONALI (valori percentuali, 2023)¶

In [51]:
fig = go.Figure([go.Scatterpolar(name=col_map[el], r=df[el], theta=df['competenza_medioalta_alta'], fill='toself') for el in ['perc_totale_entrate','perc_immigrati']])
fig.update_layout(title='ENTRATE PROGRAMMATE DI PERSONALE IMMIGRATO E NEL COMPLESSO PER LE QUALI SONO RICHIESTE COMPETENZE CON LIVELLO DI IMPORTANZA MEDIO-ALTA O ALTA (valori percentuali, 2023)', polar={'radialaxis':{'visible':True, 'showticklabels':False}})
fig.show()
In [ ]:
 

Fabbisogni nel periodo 2024-2028¶

In [52]:
data_path = 'migration/fabbisogni'

Fabbisogni nazionali¶

Stock di occupati totali¶

Macro settori¶

(Slide 2)

In [53]:
df = pd.read_csv(os.path.join(data_path,'01_2M_occupati_totali.csv'), sep=';')
df.rename(columns={'Occupati 2023_x': 'Occupati 2023'}, inplace=True)
df = df.groupby(['Macro Settore'], as_index=False).agg('sum').sort_values(by='Macro Settore', ascending=False).copy()
fig = go.Figure()
colors = [None,'green','indianred']
for i,col in enumerate(['Occupati 2023', 'Occupati 2028 POS', 'Occupati 2028 NEG']):
    fig.add_trace(go.Bar(name=col, y=df['Macro Settore'], x=df[col], orientation='h', marker_color=colors[i]))#, text=df[col]))
In [54]:
df[['Macro Settore','Occupati 2023','Occupati 2028 POS','Occupati 2028 NEG']]
Out[54]:
Macro Settore Occupati 2023 Occupati 2028 POS Occupati 2028 NEG
2 Servizi 17459700 18133400 17753400
1 Industria 6175400 6306200 6168300
0 Agricoltura, silvicoltura e pesca 870100 788100 767800
In [55]:
fig.update_layout(barmode='group', width=1100, title=f'Stock di occupati per macro settore di attività per gli anni 2023 e 2028')#, xaxis={'visible': False}
fig.show()
In [56]:
df = pd.read_csv(os.path.join(data_path,'01_2M_occupati_totali.csv'), sep=';')
df['Occupati 2028 POS diff'] = df['Occupati 2028 POS'] - df['Occupati 2023_x']
df['Occupati 2028 NEG diff'] = df['Occupati 2028 NEG'] - df['Occupati 2023_x']
df = df.groupby(['Macro Settore'], as_index=False).agg('sum').sort_values(by='Macro Settore', ascending=False).copy()
fig = go.Figure()
colors = ['indianred', 'green']
for i, col in enumerate(['Occupati 2028 NEG diff', 'Occupati 2028 POS diff']):
    fig.add_trace(go.Bar(name=col, y=df['Macro Settore'], x=df[col], orientation='h', marker_color=colors[i]))#, text=df[col]))

fig.update_layout(barmode='group', width=1100, title=f'Stock di occupati per macro settore di attività per gli anni 2023 e 2028')#, xaxis={'visible': False}
fig.show()

Micro settori¶

In [57]:
df = pd.read_csv(os.path.join(data_path,'01_2M_occupati_totali.csv'), sep=';')
df.rename(columns={'Occupati 2023_x': 'Occupati 2023'}, inplace=True)
for ms in ['Industria', 'Servizi']:
    provv = df[df['Macro Settore']==ms].sort_values(by='Occupati 2028 POS').copy()
    fig = go.Figure()
    colors = [None, 'indianred', 'green']
    for i,col in enumerate(['Occupati 2023', 'Occupati 2028 NEG', 'Occupati 2028 POS']):
        fig.add_trace(go.Bar(name=col, y=provv['Settore'], x=provv[col], orientation='h', marker_color=colors[i]))#, text=df[col]))

    fig.update_layout(barmode='group', width=1100, height=700, title=f'Stock di occupati per settore di attività per gli anni 2023 e 2028 - {ms}')#, xaxis={'visible': False}
    fig.show()

Proporzione rispetto agli occupati al 2023

In [58]:
df = pd.read_csv(os.path.join(data_path,'01_2M_occupati_totali.csv'), sep=';')
df['Occupati 2028 POS diff'] = df['Occupati 2028 POS'] - df['Occupati 2023_x']
df['Occupati 2028 NEG diff'] = df['Occupati 2028 NEG'] - df['Occupati 2023_x']
for ms in ['Industria', 'Servizi']:
    provv = df[df['Macro Settore'] == ms].sort_values(by='Occupati 2028 POS diff').copy()
    fig = go.Figure()
    colors = ['indianred', 'green']
    for i, col in enumerate(['Occupati 2028 NEG diff', 'Occupati 2028 POS diff']):
        fig.add_trace(go.Bar(name=col, y=provv['Settore'], x=provv[col], orientation='h', marker_color=colors[i]))#, text=df[col]))

    fig.update_layout(barmode='group', width=1100, height=700, title=f'Stock di occupati per settore di attività per gli anni 2023 e 2028 - {ms}')#, xaxis={'visible': False}
    fig.show()

Fabbisogni TOTALI previsti nel periodo 2024-2028 per settore economico¶

In [59]:
df = pd.read_csv(os.path.join(data_path,'02_2M_settore_economico.csv'), sep=';')
df.rename(columns={'Occupati 2023_x': 'Occupati 2023'}, inplace=True)
df = df.groupby(['Macro Settore'], as_index=False).agg('sum').sort_values(by='Macro Settore', ascending=False).copy()
fig = go.Figure()
# colors = [None,'green','indianred']
for i,col in enumerate(['Replacement POS', 'Expansion POS']):#, 'Fabbisogni POS'
    fig.add_trace(go.Bar(name=col, y=df['Macro Settore'], x=df[col], orientation='h'))#, marker_color=colors[i]))#, text=df[col]))

fig.update_layout(barmode='stack', width=1100, title=f'Stock di occupati per macro settore di attività per gli anni 2023 e 2028')#, xaxis={'visible': False}
fig.show()
In [60]:
# df = pd.read_csv(os.path.join(data_path,'02_2M_settore_economico.csv'), sep=';')
# #df = df[df['Macro Settore']=='Servizi'].copy()
# for ms in df['Macro Settore'].unique():
#     provv = df[df['Macro Settore'] == ms].copy() 
#     colors = [None,'green','indianred']
#     scenari = ['POS','NEG']
#     for scenario in scenari:
#         fig = go.Figure()
#         provv.sort_values(by=f'Fabbisogni {scenario}', ascending=True, inplace=True)
#         for i,col in enumerate([f'Replacement {scenario}',f'Expansion {scenario}']):
#             fig.add_trace(go.Bar(name=col, y=provv['Settore'], x=provv[col], orientation='h',marker_color=colors[i]))#, text=df[col]))
#         fig.update_layout(barmode='relative', width=1100, height=700, xaxis={'visible': False},title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per settore economico - {ms}')
#         fig.show()
In [61]:
df = pd.read_csv(os.path.join(data_path,'02_2M_settore_economico.csv'), sep=';')
for ms in df['Macro Settore'].unique():
    fig = go.Figure()
    provv = df[df['Macro Settore'] == ms].sort_values(by=f'Fabbisogni POS', ascending=True).copy() 
    colors = {
        'NEG': 'indianred',
        'POS': 'green',
    }
    for scenario in colors:
        fig.add_trace(go.Bar(name=f'Fabbisogni {scenario}', y=provv['Settore'], x=provv[f'Fabbisogni {scenario}'], orientation='h',marker_color=colors[scenario]))#, text=df[col]))
    fig.update_layout(barmode='group', width=1100, height=700, xaxis={'visible': False},title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per settore economico - {ms}')
    fig.show()

Fabbisogni TOTALI previsti nel periodo 2024-2028 per grande gruppo professionale¶

In [62]:
df = pd.read_csv(os.path.join(data_path,'06_2M_fab_gruppi_prof.csv'), sep=';')
df.sort_values(by='Fabbisogni - 2024-2028 POS', ascending=True, inplace=True)
fig = go.Figure()
colors = {
    'NEG': 'indianred',
    'POS': 'green',
}
for scenario in colors:
    fig.add_trace(go.Bar(name=f'Fabbisogni - 2024-2028 {scenario}', y=df['Gruppo Professionale'], x=df[f'Fabbisogni - 2024-2028 {scenario}'], orientation='h',marker_color=colors[scenario]))#, text=df[col]))
fig.update_layout(barmode='group', width=1100, height=700, xaxis={'visible': False},title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per grande gruppo professionale')
fig.show()

Fabbisogni TOTALI previsti nel periodo 2024-2028 per livello di studio¶

In [63]:
df = pd.read_csv(os.path.join(data_path,'07_2M_fab_livello_studio.csv'), sep=';')
df.sort_values(by='Fabbisogni - 2024-2028 POS', ascending=True, inplace=True)
fig = go.Figure()
colors = {
    'NEG': 'indianred',
    'POS': 'green',
}
for scenario in colors:
    fig.add_trace(go.Bar(name=f'Fabbisogni - 2024-2028 {scenario}', y=df['Livello di Istruzione'], x=df[f'Fabbisogni - 2024-2028 {scenario}'], orientation='h',marker_color=colors[scenario]))#, text=df[col]))
fig.update_layout(barmode='group', width=1100, height=700, xaxis={'visible': False},title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per livello di studio')
fig.show()

Fabbisogni TOTALI previsti nel periodo 2024-2028 secondo la classificazione ISTAT 2 DIGIT¶

In [64]:
df
Out[64]:
Livello di Istruzione Fabbisogni - 2024-2028 POS Fabbisogni - 2024-2028 NEG
1 Formazione secondaria di secondo grado (licei) 145100 119900
3 Formazione inferiore al secondo ciclo di istruzione 432500 342100
0 Formazione terziaria (universitaria, ITS professionalizzante e AFAM) 1354500 1248700
2 Formazione secondaria di secondo grado (tecnico-professionale) 1688000 1445900
In [65]:
df = pd.read_csv(os.path.join(data_path,'08_2M_fab_prof_istat.csv'), sep=';')
lista = df['Classificazione ISTAT (1 digit)'].unique()
lista.sort()
for ms in lista:
    fig = go.Figure()
    provv = df[df['Classificazione ISTAT (1 digit)'] == ms].sort_values(by=f'Fabbisogni - 2024-2028 POS', ascending=True).copy() 
    colors = {
        'NEG': 'indianred',
        'POS': 'green',
    }
    for scenario in colors:
        fig.add_trace(go.Bar(name=f'Fabbisogni - 2024-2028 {scenario}', y=provv['Classificazione ISTAT (2 digit)'], x=provv[f'Fabbisogni - 2024-2028 {scenario}'], orientation='h',marker_color=colors[scenario]))#, text=df[col]))
    fig.update_layout(barmode='group', width=1100, height=700, xaxis={'visible': False},title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 secondo la classificazione ISTAT - {ms}')
    fig.show()

Fabbisogni TOTALI previsti nel periodo 2024-2028 per indirizzo di studio¶

In [66]:
df = pd.read_csv(os.path.join(data_path,'09_2M_fab_indirizzo_studio.csv'), sep=';')
df.head(3)
Out[66]:
Indirizzo di Studio Tipo Studio Tipo Indirizzo Fabbisogni - 2024-2028 POS Fabbisogni - 2024-2028 NEG
0 Indirizzo ingegneria civile ed architettura Università ISTRUZIONE TERZIARIA 61000 56300
1 Indirizzo ingegneria (escl. ingegneria civile) Università ISTRUZIONE TERZIARIA 157300 139900
2 Indirizzo statistico Università ISTRUZIONE TERZIARIA 8500 7600
In [67]:
df = pd.read_csv(os.path.join(data_path,'09_2M_fab_indirizzo_studio.csv'), sep=';')
lista = df['Tipo Studio'].unique()
lista.sort()
for ms in lista:
    fig = go.Figure()
    provv = df[df['Tipo Studio'] == ms].sort_values(by=f'Fabbisogni - 2024-2028 POS', ascending=True).copy() 
    colors = {
        'NEG': 'indianred',
        'POS': 'green',
    }
    for scenario in colors:
        fig.add_trace(go.Bar(name=f'Fabbisogni - 2024-2028 {scenario}', y=provv['Indirizzo di Studio'], x=provv[f'Fabbisogni - 2024-2028 {scenario}'], orientation='h',marker_color=colors[scenario]))#, text=df[col]))
    fig.update_layout(barmode='group', width=1100, height=700, xaxis={'visible': False}, title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per indirizzo di studio - {ms}')
    fig.show()

Fabbisogni regionali (scenario positivo)¶

In [68]:
regioni = pyogrio.read_dataframe(os.path.join(data_path,'Reg01012024','Reg01012024_WGS84.shp'))
regioni['DEN_REG'] = regioni['DEN_REG'].str.replace('-',' ')
regioni['geometry'] = regioni['geometry'].simplify(1000)
piemonte_valledaosta = regioni[regioni['DEN_REG'].isin(['Piemonte',"Valle d'Aosta"])].copy()
altro = regioni[~regioni['DEN_REG'].isin(['Piemonte',"Valle d'Aosta"])].copy()
piemonte_valledaosta = piemonte_valledaosta.dissolve()
piemonte_valledaosta['DEN_REG'] = "Piemonte e Valle d'Aosta"
regioni = pd.concat([piemonte_valledaosta,altro])
In [69]:
df = pd.read_csv(os.path.join(data_path,'T1a_macro_settore_economico.csv'), sep=';')
g = df.groupby('Regione', as_index=False)['v.a.'].sum()
g = regioni[['DEN_REG','geometry']].merge(g, left_on='DEN_REG', right_on='Regione')
del g['DEN_REG']
g.rename(columns={'v.a.':'Fabbisogni'}, inplace=True)

(Slide 3)

In [70]:
g[['Regione','Fabbisogni']].sort_values(by='Regione')
Out[70]:
Regione Fabbisogni
11 Abruzzo 83100.0
15 Basilicata 23400.0
16 Calabria 87600.0
13 Campania 319500.0
6 Emilia Romagna 306200.0
4 Friuli Venezia Giulia 75000.0
10 Lazio 356600.0
5 Liguria 93800.0
1 Lombardia 669000.0
9 Marche 84900.0
12 Molise 17200.0
0 Piemonte e Valle d'Aosta 247500.0
14 Puglia 218600.0
18 Sardegna 96300.0
17 Sicilia 259300.0
7 Toscana 244800.0
2 Trentino Alto Adige 98500.0
8 Umbria 51000.0
3 Veneto 301700.0
In [71]:
g.explore(column='Fabbisogni', cmap='YlOrBr')
Out[71]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Fabbisogni regionali per macro settore economico¶

In [72]:
df = pd.read_csv(os.path.join(data_path,'T1a_macro_settore_economico.csv'), sep=';')
df['Macro_settore_economico'] = df['Macro_settore_economico'].str.replace('\n',' ')
df = regioni[['DEN_REG','geometry']].merge(df, left_on='DEN_REG', right_on='Regione')
lista = df['Macro_settore_economico'].unique()
lista.sort()
for i,ms in enumerate(lista):
    provv = df[df['Macro_settore_economico']==ms].copy()
    if i == 0:
        m = provv.explore(column='v.a.', name=ms, show=True)
    else:
        m = provv.explore(m=m, column='v.a.', name=ms,show=False)
folium.LayerControl().add_to(m)
m
Out[72]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Fabbisogni regionali per grandi gruppi professionali¶

In [73]:
df = pd.read_csv(os.path.join(data_path,'T1b_grandi_gruppi_professionali.csv'), sep=';')
df['Grandi gruppi professionali'] = df['Grandi gruppi professionali'].str.split('    ').str[-1]
df = regioni[['DEN_REG','geometry']].merge(df, left_on='DEN_REG', right_on='Regione')
lista = df['Grandi gruppi professionali'].unique()
lista.sort()
for i,ms in enumerate(lista):
    provv = df[df['Grandi gruppi professionali']==ms].copy()
    if i == 0:
        m = provv.explore(column='v.a.', name=ms, show=True)
    else:
        m = provv.explore(m=m, column='v.a.', name=ms,show=False)
folium.LayerControl().add_to(m)
m
Out[73]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Fabbisogni regionali per livelli di istruzione¶

In [74]:
df = pd.read_csv(os.path.join(data_path,'T1c_livelli_di_istruzione.csv'), sep=';')
df = regioni[['DEN_REG','geometry']].merge(df, left_on='DEN_REG', right_on='Regione')
lista = df['Livelli di istruzione'].unique()
lista.sort()
for i,ms in enumerate(lista):
    provv = df[df['Livelli di istruzione']==ms].copy()
    if i == 0:
        m = provv.explore(column='v.a.', name=ms, show=True)
    else:
        m = provv.explore(m=m, column='v.a.', name=ms,show=False)
folium.LayerControl().add_to(m)
m
Out[74]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Fabbisogni regionali per principali professioni¶

In [75]:
df = pd.read_csv(os.path.join(data_path,'T2_principali_professioni.csv'), sep=';')
df = regioni[['DEN_REG','geometry']].merge(df, left_on='DEN_REG', right_on='Regione')
lista = df['Principali professioni'].unique()
lista.sort()
for i,ms in enumerate(lista):
    provv = df[df['Principali professioni']==ms].copy()
    if i == 0:
        m = provv.explore(column='v.a.', name=ms, show=True)
    else:
        m = provv.explore(m=m, column='v.a.', name=ms,show=False)
folium.LayerControl().add_to(m)
m
Out[75]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Fabbisogni regionali per indirizzo di studio¶

In [76]:
df = pd.read_csv(os.path.join(data_path,'T3_indirizzi_di_studio.csv'), sep=';')
df['Indirizzo_di_studio'] = df['Indirizzo_di_studio'].str.replace('))',')')
df = regioni[['DEN_REG','geometry']].merge(df, left_on='DEN_REG', right_on='Regione')
lista = df['Indirizzo_di_studio'].unique()
lista.sort()
for i,ms in enumerate(lista):
    provv = df[df['Indirizzo_di_studio']==ms].copy()
    if i == 0:
        m = provv.explore(column='v.a.', name=ms, show=True)
    else:
        m = provv.explore(m=m, column='v.a.', name=ms,show=False)
folium.LayerControl().add_to(m)
m
Out[76]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Piemonte¶

In [77]:
regione = "Piemonte e Valle d'Aosta"

Macro-settore economico¶

In [78]:
df = pd.read_csv(os.path.join(data_path,'T1a_macro_settore_economico.csv'), sep=';')
df['Macro_settore_economico'] = df['Macro_settore_economico'].str.replace('\n',' ')
df = df[df['Regione']==regione].copy()
df['perc.'] = df['perc.'].astype(float)
df.sort_values(by='Macro_settore_economico', ascending=False,inplace=True)

settore_attivita = pd.read_csv(os.path.join(data_path,'settore_attivita_map.csv'),sep=';')
settore_attivita_map = dict()
for row in settore_attivita.to_dict('records'):
    settore_attivita_map[row['Settore']] = row['Macro Settore Regione']

df_naz = pd.read_csv(os.path.join(data_path,'02_2M_settore_economico.csv'), sep=';')
df_naz.rename(columns={'Occupati 2023_x': 'Occupati 2023'}, inplace=True)
df_naz['Macro Settore Regione'] = df_naz['Settore'].map(settore_attivita_map)
df_naz = df_naz.groupby(['Macro Settore Regione'], as_index=False).agg('sum').sort_values(by='Macro Settore Regione', ascending=False)
df_naz.sort_values(by='Macro Settore Regione',ascending=False, inplace=True)
tot = df_naz['Fabbisogni POS'].sum()
df_naz['Fabbisogni POS'] = df_naz['Fabbisogni POS'] / tot * 1000

m = df.merge(df_naz[['Macro Settore Regione','Fabbisogni POS']],left_on='Macro_settore_economico', right_on='Macro Settore Regione')
m.sort_values(by='perc.', ascending=True, inplace=True)

(Slide 4)

In [79]:
m[['Macro Settore Regione','v.a.','perc.','Fabbisogni POS']]
Out[79]:
Macro Settore Regione v.a. perc. Fabbisogni POS
7 Agricoltura, silvicoltura e pesca 1600.0 6.3 3.742536
5 Costruzioni 14700.0 59.2 74.905749
0 Servizi generali della pubblica amministrazione e assicurazione sociale obbligatoria 20000.0 80.6 85.252759
1 Servizi di alloggio e ristorazione; servizi turistici 22800.0 92.0 73.419742
6 Commercio 25900.0 104.4 114.395003
4 Industria manifatturiera 39200.0 158.0 142.161314
3 Servizi alle imprese 55900.0 227.9 231.239165
2 Servizi alle persone 67400.0 271.7 274.883734
In [80]:
fig = go.Figure([go.Bar(name = 'Fabbisogno Piemonte (p)', y=m['Macro_settore_economico'], x=m['perc.'], orientation='h', marker_color='indianred'),
                 go.Bar(name = 'Fabbisogno Italia (p)', y=m['Macro Settore Regione'], x=m['Fabbisogni POS'], orientation='h', marker_color='green')])
fig.update_layout(width=1100, title=f'Confronto Fabbisogno Nazionale e Regione Piemonte (quote per mille)')
fig.show()
In [ ]:
 
In [ ]:
 
In [ ]:
 

Grandi gruppi professionali¶

In [81]:
df = pd.read_csv(os.path.join(data_path, 'T1b_grandi_gruppi_professionali.csv'), sep=';')
df = df[df['Regione']==regione].copy()
df['Grandi gruppi professionali'] = df['Grandi gruppi professionali'].str.split('    ').str[-1]
df['perc.'] = df['perc.'].astype(float)
df.sort_values(by='v.a.', inplace=True)

(Slide 5)

In [82]:
df[['Grandi gruppi professionali','v.a.','perc.']].sort_values(by='Grandi gruppi professionali')
Out[82]:
Grandi gruppi professionali v.a. perc.
5 Artigiani, operai specializzati e agricoltori 26400.0 107.4
6 Conduttori di impianti e operai di macchinari fissi e mobili 15200.0 62.0
0 Dirigenti 4000.0 16.3
3 Professioni esecutive nel lavoro d'ufficio 34800.0 141.8
1 Professioni intellettuali, scientifiche e di elevata specializzazione 49200.0 200.3
7 Professioni non qualificate 21300.0 86.8
4 Professioni qualificate nelle attività commerciali e nei servizi 47800.0 194.4
2 Professioni tecniche 46500.0 189.3
In [83]:
fig = go.Figure(go.Bar(y=df['Grandi gruppi professionali'], x=df['v.a.'], orientation='h', marker_color='indianred'))
fig.update_layout(width=1100, title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per grandi gruppi professionali in {regione}')
fig.show()

Livelli di istruzione¶

In [84]:
df = pd.read_csv(os.path.join(data_path, 'T1c_livelli_di_istruzione.csv'), sep=';')
df = df[df['Regione']==regione].copy()
df['perc.'] = df['perc.'].astype(float)
df.sort_values(by='v.a.', inplace=True)
fig = go.Figure(go.Bar(y=df['Livelli di istruzione'], x=df['v.a.'], orientation='h', marker_color='indianred'))
fig.update_layout(width=1100, title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per livelli di istruzione in {regione}')
fig.show()

Principali professioni¶

In [85]:
df = pd.read_csv(os.path.join(data_path, 'T2_principali_professioni.csv'), sep=';')
df = df[df['Regione']==regione].copy()
df['perc.'] = df['perc.'].astype(float)
df.sort_values(by='v.a.', inplace=True)
fig = go.Figure(go.Bar(y=df['Principali professioni'], x=df['v.a.'], orientation='h', marker_color='indianred'))
fig.update_layout(width=1100, height=700, title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per principali professioni in {regione}')
fig.show()

Indirizzi di studio¶

In [86]:
df = pd.read_csv(os.path.join(data_path, 'T3_indirizzi_di_studio.csv'), sep=';')
df = df[df['Regione']==regione].copy()
df['perc.'] = df['perc.'].astype(float)
df.sort_values(by='v.a.', inplace=True)
fig = go.Figure(go.Bar(y=df['Indirizzo_di_studio'], x=df['v.a.'], orientation='h', marker_color='indianred'))
fig.update_layout(width=1100, height=700, title=f'Fabbisogni TOTALI previsti nel periodo 2024-2028 per indirizzi di studio in {regione}')
fig.show()
In [ ]:
 

Fabbisogno di personale immigrato¶

In [87]:
'PY/migration/Fabbisogni dei settori privati totali e di personale immigrato previsti nel 2024-2028 per macrosettore - Scenario positivo.csv'
Out[87]:
'PY/migration/Fabbisogni dei settori privati totali e di personale immigrato previsti nel 2024-2028 per macrosettore - Scenario positivo.csv'