Caricamento librerie

library(stringr)
library(dplyr)
library(ggplot2)
library(knitr)

Creazione dataset degli infortuni sul lavoro

L’INAIL fornisce opendata sugli infortuni da qui : https://dati.inail.it/opendata/default/Daticadenzasemestrale/index.html dove è possibile scaricarli per regione italiana e dove è possibile trovare la descrizione delle variabili contenute nei dataset . Il seguente codice unisce i dataset di tutte le regioni italiane in un unico file creando nuove variabili relative al codice ateco dell’azienda dell’infortunato:

df_infortuni <- data.frame()

for (f in dir(pattern = "*.csv")) {
  if (str_sub(f, start = 1, end = 4)=="Dati"){
    s<- str_length("DatiConCadenzaSemestraleInfortuni")+1
    regione <-str_sub(f,start = s, end = -5)
    df <- read.csv(f, sep = ";", na.strings = "ND")
    df$Regione=regione
    mat <- str_split(df$SettoreAttivitaEconomica, " ", simplify = TRUE)
    df$SettoreAttivitaEconomicaLettera <- mat[,1]
    df$SettoreAttivitaEconomicaNumeri <- mat[,2]
    
    df$SettoreAttivitaEconomicaNumeri[which(df$SettoreAttivitaEconomicaNumeri=="")]<-NA
    
    df$SettoreAttivitaEconomicaNumeri <- as.numeric(df$SettoreAttivitaEconomicaNumeri)
    
    df_infortuni <- rbind(df_infortuni,df)
    print(regione)
  }
}

write.csv(df_infortuni, file = "infortuni.csv", row.names = FALSE)

Caricamento dati

df_infortuni <- read.csv("infortuni.csv")
lettere.codici.ateco <- read.csv("lettere codici ateco.csv")
codici.ateco <- read.csv("codici-ateco.csv")

colnames(lettere.codici.ateco)[1]<-"SettoreAttivitaEconomicaLettera"
colnames(codici.ateco)[2]<-"SettoreAttivitaEconomicaNumeri"

Domanda di ricerca

Si vogliono evidenziare statistiche sugli infortuni mortali e le rendite Inail ottenibili con un grado di menomazione superiore al 20%

cat("Gli infortuni mortali sono",sum(df_infortuni$DataMorte!=""), "cioè lo",round(mean(df_infortuni$DataMorte!="")*100,2),"% degli infortuni totali pari a",nrow(df_infortuni),"nel seguente range di date:\n" );
## Gli infortuni mortali sono 6497 cioè lo 0.21 % degli infortuni totali pari a 3149399 nel seguente range di date:
df_infortuni$DataProtocollo <- as.Date(df_infortuni$DataProtocollo,"%d/%m/%Y")

df_infortuni$DataRilevazione <- as.Date(df_infortuni$DataRilevazione,"%d/%m/%Y")

df_infortuni$DataAccadimento <- as.Date(df_infortuni$DataAccadimento,"%d/%m/%Y")

range(df_infortuni$DataProtocollo)
## [1] "1985-01-15" "2021-10-31"
range(df_infortuni$DataRilevazione)
## [1] "2021-10-31" "2021-10-31"
range(df_infortuni$DataAccadimento)
## [1] "2016-01-01" "2020-12-31"

Esplorazione dati

Infortuni mortali

df<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera))%>%
  group_by(Regione) %>%
  summarise(Totale=n()) 

df %>%
  mutate(Regione= reorder(Regione,Totale)) %>%
  ggplot(aes(Regione,Totale, fill=Regione))+
  geom_bar(stat = "identity")+
  coord_flip()+
  geom_text(aes(label=Totale), hjust=0)+
  ylim(0,1100)+
  guides(fill="none")+
  ggtitle("Numero totale di infortuni mortali per regione")

df<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera))%>%
  group_by(SettoreAttivitaEconomicaLettera) %>%
  summarise(Totale=n()) 

df <- merge(df,lettere.codici.ateco, by.x = "SettoreAttivitaEconomicaLettera")

df %>%
  mutate(Descrizione= reorder(Descrizione,Totale)) %>%
  ggplot(aes(Descrizione,Totale, fill=Descrizione))+
  geom_bar(stat = "identity")+
  coord_flip()+
  geom_text(aes(label=Totale), hjust=0, size=2)+
  ylim(0,1100)+
  guides(fill="none")+
  ggtitle("Numero totale di infortuni mortali per settore ateco")

df<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera))%>%
  group_by(SettoreAttivitaEconomicaLettera) %>%
  summarise(Totale=n()) 

df <- merge(df,lettere.codici.ateco, by.x = "SettoreAttivitaEconomicaLettera")

df1<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera),Eta>60)%>%
  group_by(SettoreAttivitaEconomicaLettera) %>%
  summarise(Eta_maggiore_60=n()) 

df <- merge(df,df1, by.x = "SettoreAttivitaEconomicaLettera")

df$percentuale <- df$Eta_maggiore_60*100/df$Totale

df<-df %>%
  select(Descrizione,Totale,Eta_maggiore_60,percentuale) %>%
  arrange(desc(Totale))

kable(df, caption = "Infortuni mortali totali e per età del lavoratore maggiore di 60 con relativa percentuale:")
Infortuni mortali totali e per età del lavoratore maggiore di 60 con relativa percentuale:
Descrizione Totale Eta_maggiore_60 percentuale
ATTIVITÀ MANIFATTURIERE 999 125 12.512512
COSTRUZIONI 865 137 15.838150
TRASPORTO E MAGAZZINAGGIO 719 115 15.994437
COMMERCIO ALL’INGROSSO E AL DETTAGLIO 535 89 16.635514
ATTIVITÀ DEI SERVIZI DI ALLOGGIO E DI RISTORAZIONE 280 38 13.571429
NOLEGGIO, AGENZIE DI VIAGGIO, SERVIZI DI SUPPORTO ALLE IMPRESE 252 41 16.269841
SANITÀ E ASSISTENZA SOCIALE 235 74 31.489362
AMMINISTRAZIONE PUBBLICA E DIFESA; ASSICURAZIONE SOCIALE OBBLIGATORIA 155 50 32.258065
ATTIVITÀ DI GESTIONE DEI RIFIUTI E RISANAMENTO 138 33 23.913044
ATTIVITÀ PROFESSIONALI, SCIENTIFICHE E TECNICHE 120 14 11.666667
ALTRE ATTIVITÀ DI SERVIZI 72 19 26.388889
SERVIZI DI INFORMAZIONE E COMUNICAZIONE 62 5 8.064516
AGRICOLTURA, SILVICOLTURA E PESCA 60 13 21.666667
ATTIVITÀ FINANZIARIE E ASSICURATIVE 55 15 27.272727
ATTIVITÀ ARTISTICHE, SPORTIVE, DI INTRATTENIMENTO E DIVERTIMENTO 37 3 8.108108
ATTIVITÀ IMMOBILIARI 28 6 21.428571
ESTRAZIONE DI MINERALI DA CAVE E MINIERE 26 5 19.230769
ISTRUZIONE 24 3 12.500000
FORNITURA DI ENERGIA ELETTRICA, GAS, VAPORE E ARIA CONDIZIONATA 18 3 16.666667
ORGANIZZAZIONI ED ORGANISMI EXTRATERRITORIALI 1 1 100.000000
df<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera), SettoreAttivitaEconomicaLettera %in% c("C","F","H","G"))%>%
  group_by(SettoreAttivitaEconomicaLettera,SettoreAttivitaEconomicaNumeri) %>%
  summarise(Totale=n())
## `summarise()` has grouped output by 'SettoreAttivitaEconomicaLettera'. You can
## override using the `.groups` argument.
df <- merge(df,lettere.codici.ateco, by.x = "SettoreAttivitaEconomicaLettera")

df <- merge(df,codici.ateco, by.x = "SettoreAttivitaEconomicaNumeri")

df<-df %>%
  select(Descrizione_ateco,Totale) %>%
  arrange(desc(Totale))

kable(df, caption = "Numeto totale di infortuni mortali per codice ateco:")
Numeto totale di infortuni mortali per codice ateco:
Descrizione_ateco Totale
49 - TRASPORTO TERRESTRE E TRASPORTO MEDIANTE CONDOTTE 530
43 - LAVORI DI COSTRUZIONE SPECIALIZZATI 487
41 - COSTRUZIONE DI EDIFICI 306
47 - COMMERCIO AL DETTAGLIO (ESCLUSO QUELLO DI AUTOVEICOLI E DI MOTOCICLI) 227
25 - FABBRICAZIONE DI PRODOTTI IN METALLO (ESCLUSI MACCHINARI E ATTREZZATURE) 221
46 - COMMERCIO ALL’INGROSSO (ESCLUSO QUELLO DI AUTOVEICOLI E DI MOTOCICLI) 186
52 - MAGAZZINAGGIO E ATTIVITÀ DI SUPPORTO AI TRASPORTI 131
28 - FABBRICAZIONE DI MACCHINARI ED APPARECCHIATURE NCA 122
45 - COMMERCIO ALL’INGROSSO E AL DETTAGLIO E RIPARAZIONE DI AUTOVEICOLI E MOTOCICLI 122
10 - INDUSTRIE ALIMENTARI 120
42 - INGEGNERIA CIVILE 72
23 - FABBRICAZIONE DI ALTRI PRODOTTI DELLA LAVORAZIONE DI MINERALI NON METALLIFERI 68
53 - SERVIZI POSTALI E ATTIVITÀ DI CORRIERE 56
33 - RIPARAZIONE, MANUTENZIONE ED INSTALLAZIONE DI MACCHINE ED APPARECCHIATURE 53
24 - METALLURGIA 44
22 - FABBRICAZIONE DI ARTICOLI IN GOMMA E MATERIE PLASTICHE 42
31 - FABBRICAZIONE DI MOBILI 40
16 - INDUSTRIA DEL LEGNO E DEI PRODOTTI IN LEGNO E SUGHERO (ESCLUSI I MOBILI); FABBRICAZIONE DI ARTICOLI IN PAGLIA E MATERIALI DA INTRECCIO 37
20 - FABBRICAZIONE DI PRODOTTI CHIMICI 37
27 - FABBRICAZIONE DI APPARECCHIATURE ELETTRICHE ED APPARECCHIATURE PER USO DOMESTICO NON ELETTRICHE 29
29 - FABBRICAZIONE DI AUTOVEICOLI, RIMORCHI E SEMIRIMORCHI 27
13 - INDUSTRIE TESSILI 23
32 - ALTRE INDUSTRIE MANIFATTURIERE 23
18 - STAMPA E RIPRODUZIONE DI SUPPORTI REGISTRATI 22
14 - CONFEZIONE DI ARTICOLI DI ABBIGLIAMENTO; CONFEZIONE DI ARTICOLI IN PELLE E PELLICCIA 19
17 - FABBRICAZIONE DI CARTA E DI PRODOTTI DI CARTA 16
15 - FABBRICAZIONE DI ARTICOLI IN PELLE E SIMILI 13
30 - FABBRICAZIONE DI ALTRI MEZZI DI TRASPORTO 12
19 - FABBRICAZIONE DI COKE E PRODOTTI DERIVANTI DALLA RAFFINAZIONE DEL PETROLIO 8
21 - FABBRICAZIONE DI PRODOTTI FARMACEUTICI DI BASE E DI PREPARATI FARMACEUTICI 8
26 - FABBRICAZIONE DI COMPUTER E PRODOTTI DI ELETTRONICA E OTTICA; APPARECCHI ELETTROMEDICALI, APPARECCHI DI MISURAZIONE E DI OROLOGI 8
11 - INDUSTRIA DELLE BEVANDE 7
50 - TRASPORTO MARITTIMO E PER VIE D’ACQUA 1
51 - TRASPORTO AEREO 1
df<-df_infortuni %>%
  filter(DataMorte!="",!is.na(SettoreAttivitaEconomicaLettera), SettoreAttivitaEconomicaLettera %in% c("C","F","H","G"))


df <- merge(df,lettere.codici.ateco, by.x = "SettoreAttivitaEconomicaLettera")


df%>%
  ggplot(aes(Eta,Descrizione))+
  geom_boxplot()+
  ggtitle("Boxplot dei settori maggiormente colpiti",subtitle = "da infortuni mortali sul lavoro per età dei lavoratori")

Rendite Inail

cat("Le rendite Inail ottenetu con grado menomazione > 20% sono",sum(df_infortuni$GradoMenomazione>20), "cioè lo",round(mean(df_infortuni$GradoMenomazione>20)*100,2),"% degli infortuni totali pari a",nrow(df_infortuni),"\n" );
## Le rendite Inail ottenetu con grado menomazione > 20% sono 15912 cioè lo 0.51 % degli infortuni totali pari a 3149399
df<-df_infortuni %>%
  filter(GradoMenomazione>20)%>%
  group_by(Regione) %>%
  summarise(Totale=n()) 

df %>%
  mutate(Regione= reorder(Regione,Totale)) %>%
  ggplot(aes(Regione,Totale, fill=Regione))+
  geom_bar(stat = "identity")+
  coord_flip()+
  geom_text(aes(label=Totale), hjust=0)+
  ylim(0,2300)+
  guides(fill="none")+
  ggtitle("Rendite inail per regione")

df<-df_infortuni %>%
  filter(GradoMenomazione>20)%>%
  group_by(SettoreAttivitaEconomicaLettera) %>%
  summarise(Totale=n()) 


df <- merge(df,lettere.codici.ateco, by.x = "SettoreAttivitaEconomicaLettera")



df %>%
  mutate(Descrizione= reorder(Descrizione,Totale)) %>%
  ggplot(aes(Descrizione,Totale, fill=Descrizione))+
  geom_bar(stat = "identity")+
  coord_flip()+
  geom_text(aes(label=Totale), hjust=0, size=2)+
  ylim(0,3200)+
  guides(fill="none")+
  ggtitle("Rendite inail", subtitle="per settore ateco")