This repo contains all the source codes and materials I used as support for a course on applied social research for una Regione per Restare. The analysis was first conducted in September 2024 and is based on the Survey on Household Income and Wealth (Bank of Italy). The repository contains the original data set, source code, cleaned datasets (in RDS format), exported visualisations and a .qmd version of the present document.
Soglia di povertà al 60% della mediana (soglia Eurostat).
Incidenza della povertà
Headcount/pop totale
\[\text{Indice di povertà} =
\frac{
\text{Numero di persone con reddito inferiore al 60% del reddito mediano}
}{
\text{Popolazione totale}
}\]
Intensità della povertà
\[\text{Intensità della povertà} = \text{indice di povertà} \times
\frac{
(\text{soglia di povertà} - \text{reddito povero medio})}
{
\text{soglia di povertà}}\]
Diseguaglianze di reddito
Mappatura
Show the code
##### import sfregMap <-readRDS('regMap.rds')##### merge Gini tibbles with sf dataincMap <-left_join(giniInc, regMap, by =join_by(stratum == DEN_REG))##### ggiraph ready mapincGiniGG <- incMap |>filter(year ==2000| year ==2010|year ==2020) |>drop_na(rank) |>ggplot() +geom_sf_interactive(aes(geometry = geometry, fill = value, data_id = stratum, tooltip = value), colour ='black') +facet_wrap(vars(year)) +labs(x =NULL, y =NULL,title ='Indice di Gini per regione',subtitle ='Reddito familiare equivalente',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +scale_fill_viridis_c(direction =-1, limits =c(15, 40), option ='mako') +theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.grid =element_blank(),legend.title =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =9,hjust = .5))##### interactive mapgirafe(ggobj = incGiniGG,width_svg =13,options =list(opts_hover(css =''), ## CSS code of line we're hovering overopts_hover_inv(css ="opacity:0.3;"), ## CSS code of all other linesopts_tooltip(css ="background-color:white; color:black; font-family:Helvetica; font-style:empty; padding:8px; border-radius:10px;",use_cursor_pos = T),opts_toolbar(position ='bottomright') ))
Serie storica
Show the code
giniInc |>select(year, stratum, value) |>group_by(stratum) |>group_modify(~add_row(.x, year =2018)) |>group_modify(~add_row(.x, year =2006)) |>ungroup() |>ggplot(aes(x = year, y = value)) +geom_line(data =~. |>filter(stratum =='Italia')) +geom_line(data =~. |>filter(stratum =='Umbria'), linetype ='dashed') +geom_line(data =~. |>filter(stratum !='Umbria'& stratum !='Italia'),aes(group = stratum), alpha = .1) +geom_point(data =~. |>filter(stratum =='Italia')) +geom_point(data =~. |>filter(stratum =='Umbria')) +geom_point(data =~. |>filter(stratum =='Umbria'), colour ='white', size = .5) +geom_point(data =~. |>filter(stratum !='Umbria'& stratum !='Italia'),alpha = .1) +labs(title ='Indice di Gini calcolato sul reddito disponibile delle famiglie',subtitle ='Serie storica 2000-2020',caption ='Linea continua per la media italiana. Linea spezzata per i valori umbri. Le linee in grigio sono i valori delle altre regioni.') +scale_x_continuous(breaks =seq(2000, 2020, by =2)) +theme_minimal() +theme(axis.title =element_blank(),axis.line =element_line(),legend.title =element_blank())
Classifica per regione
Show the code
##### staticginiInc |>filter(year ==2000| year ==2004| year ==2008| year ==2012| year ==2016| year ==2020) |>drop_na(rank) |>ggplot(aes(x = year, y = rank, data_id = stratum)) +geom_bump(linewidth =0.6, color ='gray90',data =~. |>filter(stratum !='Umbria')) +geom_bump(aes(colour = stratum), linewidth =0.8,data =~. |>filter(stratum =='Umbria')) +geom_point(color ='gray90',data =~. |>filter(stratum !='Umbria'),size =4) +geom_point(aes(colour = stratum),data =~. |>filter(stratum =='Umbria'),size =4) +geom_point(color ='white', size =2) +geom_text_interactive(aes(label = stratum, group = stratum), colour ='gray90', x =2021, hjust =0, size =3.5, family ='Helvetica',data =~. |>filter(year ==2020)) +geom_text(aes(label = stratum, group = stratum), colour ='black', x =2021, hjust =0,, size =3.5, family ='Helvetica',data =~. |>filter(year ==2020& stratum =='Umbria')) +scale_color_viridis_d(option ='mako') +scale_x_continuous(limits =c(2000, 2024) ,expand =c(0.01, 0), breaks=c(2000, 2004, 2008, 2012, 2016, 2020)) +scale_y_reverse(expand =c(0.02, 0), breaks =c(5, 10, 15, 20)) +labs(x =NULL, y =NULL,title ='Classifica delle regioni italiane per indice di Gini',subtitle ='Reddito equivalente familiare',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +theme(legend.position ='none',panel.grid =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =8,hjust = .5) )
Diseguaglianze di ricchezza
Mappatura
Show the code
wMap <-left_join(giniW, regMap, by =join_by(stratum == DEN_REG))##### ggiraph ready mapwGiniGG <- wMap |>filter(year ==2000| year ==2010|year ==2020) |>drop_na(rank) |>ggplot() +geom_sf_interactive(aes(geometry = geometry, fill = value, data_id = stratum, tooltip = value), colour ='black') +facet_wrap(vars(year)) +labs(x =NULL, y =NULL,title ='Indice di Gini per regione',subtitle ='Ricchezza',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +scale_fill_viridis_c(direction =-1, limits =c(38, 73), option ='mako') +theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.grid =element_blank(),legend.title =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =9,hjust = .5))##### interactive mapgirafe(ggobj = wGiniGG,width_svg =13,options =list(opts_hover(css =''), ## CSS code of line we're hovering overopts_hover_inv(css ="opacity:0.3;"), ## CSS code of all other linesopts_tooltip(css ="background-color:white; color:black; font-family:Helvetica; font-style:empty; padding:8px; border-radius:10px;",use_cursor_pos = T),opts_toolbar(position ='bottomright') ))
Serie storica
Show the code
giniW |>select(year, stratum, value) |>group_by(stratum) |>group_modify(~add_row(.x, year =2018)) |>group_modify(~add_row(.x, year =2006)) |>ungroup() |>ggplot(aes(x = year, y = value)) +geom_line(data =~. |>filter(stratum =='Italia')) +geom_line(data =~. |>filter(stratum =='Umbria'), linetype ='dashed') +geom_line(data =~. |>filter(stratum !='Umbria'& stratum !='Italia'),aes(group = stratum), alpha = .1) +geom_point(data =~. |>filter(stratum =='Italia')) +geom_point(data =~. |>filter(stratum =='Umbria')) +geom_point(data =~. |>filter(stratum =='Umbria'), colour ='white', size = .5) +geom_point(data =~. |>filter(stratum !='Umbria'& stratum !='Italia'),alpha = .1) +labs(title ='Indice di Gini calcolato sul reddito disponibile delle famiglie',subtitle ='Serie storica 2000-2020',caption ='Linea continua per la media italiana. Linea spezzata per i valori umbri. Le linee in grigio sono i valori delle altre regioni.') +scale_x_continuous(breaks =seq(2000, 2020, by =2)) +theme_minimal() +theme(axis.title =element_blank(),axis.line =element_line(),legend.title =element_blank())
Classifica per regione
Show the code
giniW |>filter(year ==2000| year ==2004| year ==2008| year ==2012| year ==2016| year ==2020) |>drop_na(rank) |>ggplot(aes(x = year, y = rank, data_id = stratum)) +geom_bump(linewidth =0.6, color ='gray90',data =~. |>filter(stratum !='Umbria')) +geom_bump(aes(colour = stratum), linewidth =0.8,data =~. |>filter(stratum =='Umbria')) +geom_point(color ='gray90',data =~. |>filter(stratum !='Umbria'),size =4) +geom_point(aes(colour = stratum),data =~. |>filter(stratum =='Umbria'),size =4) +geom_point(color ='white', size =2) +geom_text_interactive(aes(label = stratum, group = stratum), colour ='gray90', x =2021, hjust =0, size =3.5, family ='Helvetica',data =~. |>filter(year ==2020)) +geom_text(aes(label = stratum, group = stratum), colour ='black', x =2021, hjust =0,, size =3.5, family ='Helvetica',data =~. |>filter(year ==2020& stratum =='Umbria')) +scale_color_viridis_d(option ='mako') +scale_x_continuous(limits =c(2000, 2024) ,expand =c(0.01, 0), breaks=c(2000, 2004, 2008, 2012, 2016, 2020)) +scale_y_reverse(expand =c(0.02, 0), breaks =c(5, 10, 15, 20)) +labs(x =NULL, y =NULL,title ='Classifica delle regioni italiane per indice di Gini',subtitle ='Ricchezza',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +theme(legend.position ='none',panel.grid =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =8,hjust = .5) )
Povertà
Incidenza
Mappatura
Show the code
pov$ireg <-gsub(' - ', '-', pov$ireg)povMap <-left_join(pov, regMap, by =join_by(ireg == DEN_REG))##### ggiraph ready mappovMap$hCount <-round(povMap$hCount*100, 2)povhGG <- povMap |>filter(anno ==2000| anno ==2010|anno ==2020) |>ggplot() +geom_sf_interactive(aes(geometry = geometry, fill = hCount, data_id = ireg, tooltip = hCount), colour ='black') +facet_wrap(vars(anno)) +labs(x =NULL, y =NULL,title ='Indice di povertà per regione',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +scale_fill_viridis_c(direction =-1, limits =c(0, 51), option ='inferno') +theme(axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.text.y=element_blank(),axis.ticks.y=element_blank(),panel.grid =element_blank(),legend.title =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =9,hjust = .5))##### interactive mapgirafe(ggobj = povhGG,width_svg =13,options =list(opts_hover(css =''), ## CSS code of line we're hovering overopts_hover_inv(css ="opacity:0.3;"), ## CSS code of all other linesopts_tooltip(css ="background-color:white; color:black; font-family:Helvetica; font-style:empty; padding:8px; border-radius:10px;",use_cursor_pos = T),opts_toolbar(position ='bottomright') ))
Serie storica
Show the code
pov |>summarise(hCount =mean(hCount)) |>mutate(ireg ='average') |>bind_rows(pov) |>select(anno, ireg, hCount) |>group_by(ireg) |>group_modify(~add_row(.x, anno =2018)) |>group_modify(~add_row(.x, anno =2006)) |>ungroup() |>ggplot(aes(x = anno, y = hCount)) +geom_line(data =~. |>filter(ireg =='average')) +geom_line(data =~. |>filter(ireg =='Umbria'), linetype ='dashed') +geom_line(data =~. |>filter(ireg !='Umbria'& ireg !='average'),aes(group = ireg), alpha = .1) +geom_point(data =~. |>filter(ireg =='average')) +geom_point(data =~. |>filter(ireg =='Umbria')) +geom_point(data =~. |>filter(ireg =='Umbria'), colour ='white', size = .5) +geom_point(data =~. |>filter(ireg !='Umbria'& ireg !='average'),alpha = .1) +labs(title ='Incidenza della povertà',subtitle ='Serie storica 2000-2020',caption ='Linea continua per la media italiana. Linea spezzata per i valori umbri. Le linee in grigio sono i valori delle altre regioni.') +scale_x_continuous(breaks =seq(2000, 2020, by =2)) +theme_minimal() +theme(axis.title =element_blank(),axis.line =element_line(),legend.title =element_blank())
Classifica per regione
Show the code
pov |>filter(anno ==2000| anno ==2004| anno ==2008| anno ==2012| anno ==2016| anno ==2020) |>ggplot(aes(x = anno, y = rankHCount, group = ireg, data_id = ireg)) +geom_bump(linewidth =0.6, color ="gray90", smooth =6) +geom_bump(aes(colour = ireg), linewidth =0.8, smooth =6,data =~. |>filter(ireg =='Umbria')) +geom_point(color ="gray90", size =4) +geom_point(aes(colour = ireg),data =~. |>filter(ireg =='Umbria'),size =4) +geom_point(color ='white', size =2) +geom_text(aes(label = ireg, group = ireg), colour ='gray90', x =2021, hjust =0, size =3.5, family ='Helvetica',data =~. |>filter(anno ==2020)) +geom_text(aes(label = ireg, group = ireg), colour ='black', x =2021, hjust =0,, size =3.5, family ='Helvetica',data =~. |>filter(anno ==2020& ireg =='Umbria')) +scale_color_manual(values =met.brewer('Degas')) +scale_x_continuous(limits =c(2000, 2030) ,expand =c(0.01, 0), breaks=c(2000, 2010, 2020)) +scale_y_reverse(expand =c(0.02, 0), breaks =c(1, 5, 10, 15, 20)) +labs(x =NULL, y =NULL,title ='Classifica delle regioni italiane per tasso di povertà',subtitle ='Dalla più povera alla meno povera',caption ='Dati: Banca d\'Italia. Elaborazione di Lorenzo Mattioli - Una Regione per Restare') +theme_minimal(base_family ='Helvetica') +theme(legend.position ='none',panel.grid =element_blank(),plot.title =element_text(size =15,hjust = .5),plot.subtitle =element_text(hjust = .5),plot.caption =element_text(size =8,hjust = .5) )