<jupyter_start><jupyter_text>Car Accidents ItalyNotebook for data analysis for car accidents in Italy.**note** - Il dataset che avevamo trovato era delle _tabelle_, ovvero dei dati già analizzati. Si mostra quindi con dei metadati.- Il dataset è troppo pesante per GitHub. È stato quindi messo in `.gitignore`.**cose da fare**- Calcolare indici di eterogeneità di Gini- Controllare se sotto Natale ci sono più incidenti- Dimostrare che le donne **non** sono più pericolose al volante degli uomini- Morti su tipo di incidente, anche per età. - Stabilire il sesso con più morti.- Maschi, femmine che si schiantano da soli.- Scopriamo perché in Molise ci sono così tanti incidenti.<jupyter_code>dataset_proj <- read.csv("dataset/dataset progetto.csv", sep=';')
dataset_proj
cat("Grandezza del dataset:",ncol(dataset_proj),"x",nrow(dataset_proj))<jupyter_output>Grandezza del dataset: 117 x 174933<jupyter_text>Andiamo a prendere un campione di dal dataset che viene fornito. Per modificare la grandezza del campione, si cambi `SAMPLE_SIZE`.<jupyter_code>SAMPLE_SIZE = 20000
sample_rows <- sample(nrow(dataset_proj), SAMPLE_SIZE)<jupyter_output><empty_output><jupyter_text>for(i in 1:(SAMPLE_SIZE-1)){for(j in (i+1):SAMPLE_SIZE){if(sample_rows[i] == sample_rows[j])                     {                    print("errore")                    }}}<jupyter_code>sample_data = dataset_proj[sample_rows,]
names(sample_data)
attach(sample_data)
giorno <- factor(giorno)
levels(giorno) <- c("Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom")
incidenti_per_giorni = table(giorno)
levels(giorno)
barplot(incidenti_per_giorni)
barplot(table(trimestre))<jupyter_output><empty_output><jupyter_text>-----Provo a creare una qualche tabella bivariata.<jupyter_code>pavimentazione <- factor(pavimentazione)
levels(pavimentazione) <- c("good", "bad", "non-pav")<jupyter_output><empty_output><jupyter_text>Provo a fare una nuova variabile per la localizzazione degli incidenti, nella quale distinguo solamente tra _urbana_, _extraurbana_ e _autostrada_. In questo modo si dovrebbe vedere meglio dove si ha una maggiore incidenza del fondo stradale messo male.<jupyter_code>new_localizzazione_incidente = array(10, length(localizzazione_incidente))
for(i in 1:length(localizzazione_incidente))
{

    if(localizzazione_incidente[i] == 0 || localizzazione_incidente[i] == 1 || localizzazione_incidente[i] == 2 || localizzazione_incidente[i] == 3)    
    {
        new_localizzazione_incidente[i] = 0

    }
    if(localizzazione_incidente[i] == 4 || localizzazione_incidente[i] == 5 || localizzazione_incidente[i] == 6 || localizzazione_incidente[i] == 9)    
    {
        new_localizzazione_incidente[i] = 1
    }
    if(localizzazione_incidente[i] == 7)
    {
        new_localizzazione_incidente[i] = 2
    }
    
}<jupyter_output><empty_output><jupyter_text>Controllo che effettivamente il numero di strade scartate coincida con quelle non considerate (ovvero `altro`).<jupyter_code>length(which(new_localizzazione_incidente == 10)) == length(which(localizzazione_incidente==8))
barplot(table(new_localizzazione_incidente))
tabella_pav_tipo_strada <- table(pavimentazione, new_localizzazione_incidente)
tabella_pav_tipo_strada
table(pavimentazione)<jupyter_output><empty_output><jupyter_text>**Considerazioni**: il numero di strade segnate come sdrucciolevoli è talmente basso da non rendere possibile un'analisi. Mi sembra comunque strano che sia così basso - bisognerebbe guardare esattamente alla definizione.<jupyter_code>new_localizzazione_incidente <- factor(new_localizzazione_incidente)
levels(new_localizzazione_incidente) <- c("urbana", "extraurbana", "autostrada", "altro")
fondo_stradale <- factor(fondo_stradale)
levels(fondo_stradale) <- c("asciutto", "bagnato", "sdrucciolevole", "ghiacciato", "innevato")
tabella_fondo_tipo_strada <- table(fondo_stradale, new_localizzazione_incidente)
tabella_fondo_tipo_strada
tot_incidenti_urbani = sum(tabella_fondo_tipo_strada[,1])
tot_incidenti_extra_urbani = sum(tabella_fondo_tipo_strada[,2])
tot_incidenti_autostrada = sum(tabella_fondo_tipo_strada[,3])
prob_incidente = array(666, dim=c(nrow(tabella_fondo_tipo_strada), ncol(tabella_fondo_tipo_strada),3))<jupyter_output><empty_output><jupyter_text>prob_incidente[1,,1] = "urbana"prob_incidente[2,,1] = "extraurbana"prob_incidente[3,,1] = "autostrada"prob_incidente[4,,1] = "altro"prob_incidente[,1,2] = "asciutto"prob_incidente[,2,2] = "bagnato"prob_incidente[,3,2] = "sdrucciolevole"prob_incidente[,4,2] = "ghiacciato"prob_incidente[,5,2] = "innevato"<jupyter_code>prob_incidente_per_acqua_urbano = tabella_fondo_tipo_strada[2]/tot_incidenti_urbani
cat("Probabilità incidente per fondo bagnato in strada urbana", as.integer(prob_incidente_per_acqua_urbano*10000)/100, "%\n")

prob_incidente_per_ghiacciato_urbano = tabella_fondo_tipo_strada[4]/tot_incidenti_urbani
cat("Probabilità incidente per fondo ghiacciato in strada urbana", as.integer(prob_incidente_per_ghiacciato_urbano*10000)/100, "%")
prob_incidente_per_acqua_extra_urbano = tabella_fondo_tipo_strada[2,2]/tot_incidenti_extra_urbani
cat("Probabilità incidente per fondo bagnato in strada extra urbana", as.integer(prob_incidente_per_acqua_extra_urbano*10000)/100, "%\n")

prob_incidente_per_ghiacciato_extra_urbano = tabella_fondo_tipo_strada[4,2]/tot_incidenti_extra_urbani
cat("Probabilità incidente per fondo ghiacciato in strada extra urbana", as.integer(prob_incidente_per_ghiacciato_extra_urbano*10000)/100, "%")<jupyter_output>Probabilità incidente per fondo bagnato in strada extra urbana 15.7 %
Probabilità incidente per fondo ghiacciato in strada extra urbana 1.02 %<jupyter_text>Quello che si dovrebbe ora calcolare è di andare a vedere se effettivamente questi due fenomeno sono dovuti abbastanza diversi. Ovvero devo fare un qualche test di confronto, e.g. chi-quadro. Ci ritorno quando sarò in grado di farlo.Sarebbe carino mettere un plot in 3 dimensioni per mostrare le tabelle bivariate che sono state prodotte sopra.Calcolo gli intervalli di confidenza per le probabilità calcolate sopra. ----  Confidence IntervalsCon un confidence level del 95%, l'intervallo di probabilità per i vari tipi di incidente è<jupyter_code>confidence_level = 0.99
confidence_interval_acqua_urbano =  qnorm(confidence_level+(1-confidence_level)/2) * sqrt(prob_incidente_per_acqua_urbano*(1-prob_incidente_per_acqua_urbano)/SAMPLE_SIZE)

cat("Intervallo di confidenza al", confidence_level*100,"% per incidenti su fondo bagnato in strada urbana:(", 
      as.integer(prob_incidente_per_acqua_urbano*10000)/100,"±",
        as.integer(confidence_interval_acqua_urbano*10000)/100,")%")<jupyter_output>Intervallo di confidenza al 99 % per incidenti su fondo bagnato in strada urbana:( 10.8 ± 0.56 )%<jupyter_text>**Nota importante** La funzione `qnorm` rimanda solamente l'inverso dell'integrale sotto la Gaussiana (ovvero il valore $Z$ associato a un certo quantile) per una coda. Ovvero, per avere uno $Z$ associato a un calcolo di intervallo, come quello che dobbiamo fare, dobbiamo fare considerazioni algebriche.In particolare, se noi vogliamo il 95% su due cose, su una coda questo corrisponde a richiedere il 97.5% (infatti, le due code sono entrambe del 2.5%; ovvero aggiungo questo valore per vedere dove arrivo a "destra"). ----- Analisi autostradalePer prima cosa vado a selezionare, all'interno del mio campione, solamente i dati relativi ad autostrada.**nota**: Tra le autostrade, configurano anche delle denominazioni tipo `R03`: sono riferiti a dei pezzi di raccordo. Cercando velocemente online si chiarisce facilmente.La funzione `droplevels` serve per escludere tutti i livelli non utilizzati, i.e. i nomi delle strade normali.<jupyter_code>incidenti_in_autostrada = sample_data[which(new_localizzazione_incidente=="autostrada"),]
tabella_incidenti_in_autostrada = table(droplevels(incidenti_in_autostrada$denominazione_della_strada))
barplot(tabella_incidenti_in_autostrada/nrow(incidenti_in_autostrada)*100, ylab='Frequenza percentuale', xlab='Denominazione autostrada', 
        main='Incidenti nelle autostrade in Italia')<jupyter_output><empty_output><jupyter_text>**Moda** degli incidenti in autostrada.<jupyter_code>tabella_incidenti_in_autostrada.percfreq = tabella_incidenti_in_autostrada/nrow(incidenti_in_autostrada)*100
tabella_incidenti_in_autostrada.mode = which(tabella_incidenti_in_autostrada.percfreq==max(tabella_incidenti_in_autostrada.percfreq))
cat("L'autostrada con più incidenti in Italia nel 2017 è la", names(tabella_incidenti_in_autostrada.mode))
library('rgdal')<jupyter_output>Loading required package: sp
rgdal: version: 1.4-7, (SVN revision 845)
 Geospatial Data Abstraction Library extensions to R successfully loaded
 Loaded GDAL runtime: GDAL 2.4.2, released 2019/06/28
 Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
 GDAL binary built with GEOS: FALSE 
 Loaded PROJ.4 runtime: Rel. 5.2.0, September 15th, 2018, [PJ_VERSION: 520]
 Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
 Linking to sp version: 1.3-1<jupyter_text>Sono riuscito a trovare come poter collegare il nome dell'autostrada. Online sono inoltre presenti i dati geografici (si chiamano _shapefile_) relativi alle autostrade. Penso che, una volta capito quello che si deve fare, non sia difficile riportare questi dati su una mappa geografica.Servono ovviamente le apposite mappe.  Sesso nel numero di incidenti.Provo a fare una veloce analisi per vedere se ci sono più incidenti quando sono presenti donne o meno.<jupyter_code># Sostituisco i Nan con dei 3
veicolo__a___sesso_conducente[is.na(veicolo__a___sesso_conducente)] <- 3
veicolo__a___sesso_conducente <- factor(veicolo__a___sesso_conducente)
levels(veicolo__a___sesso_conducente) <- c("Maschio", "Femmina","Sconosciuto")
tabella_veicolo__a__sesso_conducente = table(veicolo__a___sesso_conducente)
tabella_veicolo__a__sesso_conducente
# Calcolo frequenze
tabella_veicolo__a__sesso_conducente.relfreq <- tabella_veicolo__a__sesso_conducente/length(veicolo__a___sesso_conducente)
tabella_veicolo__a__sesso_conducente.percfreq <- tabella_veicolo__a__sesso_conducente.relfreq*100
barplot(tabella_veicolo__a__sesso_conducente.percfreq, xlab='Sesso', ylab='Frequenza percentuale', main='Sesso del primo conducente negli incidenti in Italia nel 2017')
# Sostituisco i Nan con dei 3
veicolo__b___sesso_conducente[is.na(veicolo__b___sesso_conducente)] <- 3
veicolo__b___sesso_conducente <- factor(veicolo__b___sesso_conducente)
levels(veicolo__b___sesso_conducente) <- c("Maschio", "Femmina", "Sconosciuto")
tabella_veicolo__b__sesso_conducente = table(veicolo__b___sesso_conducente)
tabella_veicolo__b__sesso_conducente
# Calcolo frequenze
tabella_veicolo__b__sesso_conducente.relfreq <- tabella_veicolo__b__sesso_conducente/length(veicolo__b___sesso_conducente)
tabella_veicolo__b__sesso_conducente.percfreq <- tabella_veicolo__b__sesso_conducente.relfreq*100
barplot(tabella_veicolo__b__sesso_conducente.percfreq, xlab='Sesso', ylab='Frequenza percentuale',
        main='Sesso del secondo conducente negli incidenti in Italia nel 2017')<jupyter_output><empty_output><jupyter_text>Vado a prendere tutti quegli incidenti in cui si ha che è presente una donna come conducente, o sul primo o sul secondo veicolo.<jupyter_code>incidenti_con_almeno_una_donna = sample_data[which(veicolo__a___sesso_conducente=="Femmina" | veicolo__b___sesso_conducente=="Femmina"),]
nrow(incidenti_con_almeno_una_donna)
incidenti_con_almeno_un_uomo = sample_data[which(veicolo__a___sesso_conducente=="Maschio" |  veicolo__b___sesso_conducente=="Maschio"),]
nrow(incidenti_con_almeno_un_uomo)<jupyter_output><empty_output><jupyter_text>-----<jupyter_code>incidenti_con_solo_uomo = sample_data[which(veicolo__a___sesso_conducente=="Maschio" & veicolo__b___sesso_conducente=="Maschio"),]
nrow(incidenti_con_solo_uomo)
incidenti_uomo_donna_confronto = as.table(c(nrow(incidenti_con_almeno_una_donna),nrow(incidenti_con_solo_uomo)))
rownames(incidenti_uomo_donna_confronto) = c("Almeno una donna", "Solo uomini")
incidenti_uomo_donna_confronto.percfreq <- as.numeric(as.character(as.integer(incidenti_uomo_donna_confronto/(incidenti_uomo_donna_confronto[1]+incidenti_uomo_donna_confronto[2])*10000)/100))
ylim <- c(0, 1.1*max(incidenti_uomo_donna_confronto.percfreq))
xx <- barplot(incidenti_uomo_donna_confronto.percfreq, xaxt = 'n', xlab = '', width = 0.85, ylim = ylim,
              main = "Incidenti con e senza presenza di donne", 
              ylab = "Frequenza percentuale")
text(x = xx, y = incidenti_uomo_donna_confronto.percfreq,
     label = incidenti_uomo_donna_confronto.percfreq,
     pos = 3, cex = 0.8, col = "red")
axis(1, at=xx, labels=c("Almeno una donna", "Solo uomini"), tick=FALSE, las=1, line=-0.5, cex.axis=0.8)<jupyter_output><empty_output><jupyter_text>-----<jupyter_code>incidenti_uomo_donna_confronto = as.table(c(nrow(incidenti_con_almeno_una_donna),nrow(incidenti_con_almeno_un_uomo)))
rownames(incidenti_uomo_donna_confronto) = c("Almeno una donna", "Almeno un uomo")
incidenti_solo_sconosciuti = sample_data[which(veicolo__a___sesso_conducente=="Sconosciuto" & veicolo__b___sesso_conducente=="Sconosciuto"),]
nrow(incidenti_solo_sconosciuti)<jupyter_output><empty_output><jupyter_text>Il grafico qua sotto rappresenta la probabilità che un uomo e una donna siano coinvolti in un incidente, in generale. Questo risultato non è però pesato sul numero di patenti.<jupyter_code>incidenti_uomo_donna_confronto.percfreq <- as.numeric(as.character(as.integer(incidenti_uomo_donna_confronto/(SAMPLE_SIZE - nrow(incidenti_solo_sconosciuti))*10000)/100))
ylim <- c(0, 1.1*max(incidenti_uomo_donna_confronto.percfreq))
xx <- barplot(incidenti_uomo_donna_confronto.percfreq, xaxt = 'n', xlab = '', width = 0.85, ylim = ylim,
              main = "Confronto incidenti per sesso", 
              ylab = "Frequenza percentuale")
text(x = xx, y = incidenti_uomo_donna_confronto.percfreq,
     label = incidenti_uomo_donna_confronto.percfreq,
     pos = 3, cex = 0.8, col = "red")
axis(1, at=xx, labels=c("Almeno una donna", "Almeno un uomo"), tick=FALSE, las=1, line=-0.5, cex.axis=0.8)<jupyter_output><empty_output><jupyter_text>Da questa tabella si deduce che la probabilità che una donna sia coinvolta in un incidente è del 40%, mentre quella che un uomo ne sia coinvolto è del 90%.Ovviamente le due probabilità non sono mutualmente esclusive: il fatto che ci sia un uomo in un incidente, non impedisce che l'altro conducente non sia donna. Ovvero ci sono una serie di incidente `uomo-donna`. Poiché questi risultati non sono pesati per il numero di persone, non indicano effettivamente quale tra i due sessi sia più pericoloso. Per poter avere accesso a questa informazione, bisogna pesare i risultati sul numero di patenti per sesso. ------------- Provo a fare un rapporto tra le frequenze di queste tabelle e il numero di patentati per sesso.Carico qua sotto le informazioni su tutte le patenti presenti in Italia, divise per regioni.**Info** Ci mette l'eternità ad aprire tutti questi file.<jupyter_code>patenti_Abruzzo <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Abruzzo.csv", sep=',')
patenti_Basilicata <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Basilicata.csv", sep=',')
patenti_Calabria <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Calabria.csv", sep=',')
patenti_Campania <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Campania.csv", sep=',')
patenti_EmiliaRomagna <- read.csv("dataset/informazioni_patenti_per_regione/patenti_EmiliaRomagna.csv", sep=',')
patenti_FriuliVeneziaGiulia <- read.csv("dataset/informazioni_patenti_per_regione/patenti_FriuliVeneziaGiulia.csv", sep=',')
patenti_Lazio <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Lazio.csv", sep=',')
patenti_Liguria <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Liguria.csv", sep=',')
patenti_Liguria <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Liguria.csv", sep=',')
patenti_Lombardia <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Lombardia.csv", sep=',')
patenti_Marche <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Marche.csv", sep=',')
patenti_Molise <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Molise.csv", sep=',')
patenti_Piemonte <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Piemonte.csv", sep=',')
patenti_Puglia <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Puglia.csv", sep=',') 
patenti_Sardegna <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Sardegna.csv", sep=',') 
patenti_Sicilia <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Sicilia.csv", sep=',') 
patenti_Toscana <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Toscana.csv", sep=',') 
patenti_TrentinoAltoAdige <- read.csv("dataset/informazioni_patenti_per_regione/patenti_TrentinoAltoAdige.csv", sep=',') 
patenti_Umbria <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Umbria.csv", sep=',') 
patenti_ValleAosta <- read.csv("dataset/informazioni_patenti_per_regione/patenti_ValleAosta.csv", sep=',') 
patenti_Veneto <- read.csv("dataset/informazioni_patenti_per_regione/patenti_Veneto.csv", sep=',') 
patenti_femmine = length(which(patenti_Abruzzo$sesso=="F")) + length(which(patenti_Basilicata$sesso=="F")) + length(which(patenti_Calabria$sesso=="F")) + length(which(patenti_Campania$sesso=="F")) + length(which(patenti_EmiliaRomagna$sesso=="F")) + length(which(patenti_FriuliVeneziaGiulia$sesso=="F")) + length(which(patenti_Lazio$sesso=="F")) + length(which(patenti_Liguria$sesso=="F")) + length(which(patenti_Lombardia$sesso=="F")) + length(which(patenti_Marche$sesso=="F")) + length(which(patenti_Molise$sesso=="F")) + length(which(patenti_Piemonte$sesso=="F")) + length(which(patenti_Puglia$sesso=="F")) + length(which(patenti_Sardegna$sesso=="F")) + length(which(patenti_Sicilia$sesso=="F")) + length(which(patenti_Toscana$sesso=="F")) + length(which(patenti_TrentinoAltoAdige$sesso=="F")) + length(which(patenti_Umbria$sesso=="F")) + length(which(patenti_ValleAosta$sesso=="F")) + length(which(patenti_Veneto$sesso=="F"))
patenti_femmine 
patenti_maschi = length(which(patenti_Abruzzo$sesso=="M")) + length(which(patenti_Basilicata$sesso=="M")) + length(which(patenti_Calabria$sesso=="M")) + length(which(patenti_Campania$sesso=="M")) + length(which(patenti_EmiliaRomagna$sesso=="M")) + length(which(patenti_FriuliVeneziaGiulia$sesso=="M")) + length(which(patenti_Lazio$sesso=="M")) + length(which(patenti_Liguria$sesso=="M")) + length(which(patenti_Lombardia$sesso=="M")) + length(which(patenti_Marche$sesso=="M")) + length(which(patenti_Molise$sesso=="M")) + length(which(patenti_Piemonte$sesso=="M")) + length(which(patenti_Puglia$sesso=="M")) + length(which(patenti_Sardegna$sesso=="M")) + length(which(patenti_Sicilia$sesso=="M")) + length(which(patenti_Toscana$sesso=="M")) + length(which(patenti_TrentinoAltoAdige$sesso=="M")) + length(which(patenti_Umbria$sesso=="M")) + length(which(patenti_ValleAosta$sesso=="M")) + length(which(patenti_Veneto$sesso=="M"))
patenti_maschi
tabella_patenti = as.table(c(patenti_maschi,patenti_femmine))
rownames(tabella_patenti) = c("Maschi", "Femmine")
tabella_patenti.percfreq <- as.numeric(as.character(as.integer(tabella_patenti/(tabella_patenti[1]+tabella_patenti[2])*10000)/100))
ylim <- c(0, 1.1*max(tabella_patenti.percfreq))
xx <- barplot(tabella_patenti.percfreq, xaxt = 'n', xlab = '', width = 0.85, ylim = ylim,
              main = "Patenti in Italia per sesso", 
              ylab = "Frequenza percentuale")
text(x = xx, y = tabella_patenti.percfreq,
     label = tabella_patenti.percfreq,
     pos = 3, cex = 0.8, col = "red")
axis(1, at=xx, labels=c("Maschi", "Femmine"), tick=FALSE, las=1, line=-0.5, cex.axis=0.8)<jupyter_output><empty_output><jupyter_text>Non sono sicuro che l'analisi sia giusta, ma qua sotto metto il risultato del mio obiettivo, ovvero il rapporto tra gli incidenti con donne e uomini e il numero di guidatori in Italia.<jupyter_code>incidenti_femmine_pesato = nrow(incidenti_con_almeno_una_donna) / patenti_femmine 
incidenti_femmine_pesato
incidenti_maschi_pesato = nrow(incidenti_con_almeno_un_uomo) / patenti_maschi 
incidenti_maschi_pesato<jupyter_output><empty_output><jupyter_text>Voglio mostrare che vi sia indipendenza statistica o meno tra questi due risultati.<jupyter_code>prob_incidente_femmina = incidenti_femmine_pesato / (incidenti_femmine_pesato + incidenti_maschi_pesato)
prob_incidente_femmina
prob_incidente_maschio = incidenti_maschi_pesato / (incidenti_maschi_pesato + incidenti_femmine_pesato)
prob_incidente_maschio<jupyter_output><empty_output><jupyter_text>------------------- Regioni ItalianeProvo a fare una mappa con numero di incidenti per Regione in Italia. * Per prima cosa, trasformo i dati relativi alle province in dati relativi alle regioni.<jupyter_code>incidenti_per_provincia <- provincia
tabella_incidenti_per_provincia <- table(incidenti_per_provincia)
tabella_incidenti_per_provincia
incidenti_per_regione = array(666, length(incidenti_per_provincia))
for(i in 1:SAMPLE_SIZE)
{

    if(incidenti_per_provincia[i] > 0 & incidenti_per_provincia[i] < 7 | incidenti_per_provincia[i] == 96 | incidenti_per_provincia[i] == 103)
    {
        incidenti_per_regione[i] = 1


    }

     if(incidenti_per_provincia[i] == 7)
    {
        incidenti_per_regione[i] = 2

    }
    

     if(incidenti_per_provincia[i] > 7 & incidenti_per_provincia[i] < 12)
    {
        incidenti_per_regione[i] = 7

    }    


     if(incidenti_per_provincia[i] > 11 & incidenti_per_provincia[i] < 21 | incidenti_per_provincia[i] == 97 | incidenti_per_provincia[i] == 98 | incidenti_per_provincia[i] == 108)
    {
        incidenti_per_regione[i] = 3

    }    
    

     if(incidenti_per_provincia[i] == 21 | incidenti_per_provincia[i] == 22)
    {
        incidenti_per_regione[i] = 4

    }    
    

     if(incidenti_per_provincia[i] > 22 & incidenti_per_provincia[i] < 30)
    {
        incidenti_per_regione[i] = 5

    }    
    

     if(incidenti_per_provincia[i] > 29 & incidenti_per_provincia[i] < 33 | incidenti_per_provincia[i] == 93)
    {
        incidenti_per_regione[i] = 6

    }    
    

     if(incidenti_per_provincia[i] > 32 & incidenti_per_provincia[i] < 41 | incidenti_per_provincia[i] == 99)
    {
        incidenti_per_regione[i] = 8

    }    
    

     if(incidenti_per_provincia[i] > 40 & incidenti_per_provincia[i] < 45 | incidenti_per_provincia[i] == 109)
    {
        incidenti_per_regione[i] = 11

    }
    

     if(incidenti_per_provincia[i] > 44 & incidenti_per_provincia[i] < 54 | incidenti_per_provincia[i] == 100)
    {
        incidenti_per_regione[i] = 9

    }    


     if(incidenti_per_provincia[i] ==54 | incidenti_per_provincia[i] == 55)
    {
        incidenti_per_regione[i] = 10

    }    
    

     if(incidenti_per_provincia[i] > 55 & incidenti_per_provincia[i] < 61)
    {
        incidenti_per_regione[i] = 12

    }    
    

     if(incidenti_per_provincia[i] > 60 & incidenti_per_provincia[i] < 66)
    {
        incidenti_per_regione[i] = 15

    }    
    

     if(incidenti_per_provincia[i] > 65 & incidenti_per_provincia[i] < 70)
    {
        incidenti_per_regione[i] = 13

    }    
    

     if(incidenti_per_provincia[i] == 70 | incidenti_per_provincia[i] == 94)
    {
        incidenti_per_regione[i] = 14

    }    
    

     if(incidenti_per_provincia[i] > 70 & incidenti_per_provincia[i] < 76 | incidenti_per_provincia[i] == 110)
    {
        incidenti_per_regione[i] = 16

    }
    

     if(incidenti_per_provincia[i] == 76 | incidenti_per_provincia[i] == 77)
    {
        incidenti_per_regione[i] = 17

    }    
    

     if(incidenti_per_provincia[i] > 77 & incidenti_per_provincia[i] < 81 | incidenti_per_provincia[i] == 101 | incidenti_per_provincia[i] == 102)
    {
        incidenti_per_regione[i] = 18

    }    
    

     if(incidenti_per_provincia[i] > 80 & incidenti_per_provincia[i] < 90)
    {
        incidenti_per_regione[i] = 19

    }    
    

     if(incidenti_per_provincia[i] > 89 & incidenti_per_provincia[i] < 93 | incidenti_per_provincia[i] == 95 | incidenti_per_provincia[i] == 111)
    {
        incidenti_per_regione[i] = 20

    }    
    
}
barplot(table(incidenti_per_regione), main="Incidenti per regioni", ylab="Numero di incidenti", xlab='Codice regione')<jupyter_output><empty_output><jupyter_text><jupyter_code>library(dplyr)
geo_regioni <- readOGR( 
  dsn= paste0("../../../Downloads/Limiti01012017_g/Reg01012017_g/") , 
  layer="Reg01012017_g_WGS84",
  verbose=FALSE
)
# Controllo che i codici delle regioni combacino
geo_regioni$COD_REG %in% incidenti_per_regione
geo_regioni@data <- cbind(geo_regioni@data, as.array(table(incidenti_per_regione)/SAMPLE_SIZE))

drop <- c("incidenti_per_regione")
geo_regioni@data = geo_regioni@data[,!(names(geo_regioni@data) %in% drop)]
geo_regioni@data
dataset_pop <- read.csv("dataset/popolazione.csv", sep=',')
dataset_pop$X = geo_regioni$COD_REG
dataset_pop
levels(dataset_pop$Regione) == levels(geo_regioni$DEN_REG)
for(i in 1:length(geo_regioni$Freq))
{
        geo_regioni$Incidenti_per_100000_abitanti[i] =  100000 * geo_regioni$Freq[i] * nrow(dataset_proj) /  dataset_pop$Popolazione[which(dataset_pop$Regione == geo_regioni$DEN_REG[i])]
}
library(tmap)
qtm(geo_regioni, "Freq")<jupyter_output><empty_output><jupyter_text>Per completare questa analisi, mi manca solamente di dividere la frequenza relativa di incidenti per regione con la popolazione della suddetta regione.* Devo un attimo capire come ottenere qualcosa del tipo "incidenti ogni 1000 abitanti".     L'unico modo sarebbe quello di dividere le frequenze relative per la popolazione della regione e moltiplicare per il numero totale di incidenti in Italia. (Ho controllato e matematicamente è corretto)<jupyter_code>qtm(geo_regioni, "Incidenti_per_100000_abitanti")
dataset_pop
dataset_pop$parco_veicolare = c(7850589,4868938,4420628,4344556,4002778,3789017,3777687,2917885,3381332,1592866,1328799,1337699,1364973,1143937,1028446,1226089,814635,468788,280453,215315)
for(i in 1:length(geo_regioni$Freq))
{
        geo_regioni$Incidenti_per_100000_veicoli[i] =  100000 * geo_regioni$Freq[i] * nrow(dataset_proj) /  dataset_pop$parco_veicolare[which(dataset_pop$Regione == geo_regioni$DEN_REG[i])]
}
qtm(geo_regioni, "Incidenti_per_100000_veicoli")<jupyter_output>Warning message:
“The shape geo_regioni is invalid. See sf::st_is_valid”<jupyter_text>------------------------------------  Persone che si schiantano da soleAnalizzo per vedere sesso ed età delle persone che si schiantano da sole, ovvero dove si è solamente un veicolo coinvolto nell'incidente.Vado a prendere tutti quei casi in cui non risulta informazione su *veicolo b*, ovvero laddove si ha `tipo_veicoli__b_ = `.Per ora non faccio analisi campionaria, ma prendo direttamente tutta la popolazione, per pura comodità (sono comunque pochi).<jupyter_code>tipo_veicoli__b_[is.na(tipo_veicoli__b_)] <- 666
tipo_veicoli__b_[is.na(tipo_veicoli__b_)] <- 666
schianto_da_soli = dataset_proj[which(tipo_veicoli__b_ == 666),]
nrow(schianto_da_soli)
# Sostituisco i Nan con dei 3
schianto_da_soli$veicolo__a___sesso_conducente[is.na(schianto_da_soli$veicolo__a___sesso_conducente)] <- 3
schianto_da_soli$veicolo__a___sesso_conducente <- factor(schianto_da_soli$veicolo__a___sesso_conducente)
levels(schianto_da_soli$veicolo__a___sesso_conducente) <- c("Maschio", "Femmina","Sconosciuto")
tabella_schianto_da_soli_sesso = table(schianto_da_soli$veicolo__a___sesso_conducente)
tabella_schianto_da_soli_sesso
# Calcolo frequenze
tabella_schianto_da_soli_sesso.relfreq <- tabella_schianto_da_soli_sesso/length(schianto_da_soli$veicolo__a___sesso_conducente)
tabella_schianto_da_soli_sesso.percfreq <- tabella_schianto_da_soli_sesso.relfreq*100
ylim <- c(0, 1.1*max(tabella_schianto_da_soli_sesso.percfreq))
xx <- barplot(tabella_schianto_da_soli_sesso.percfreq, xaxt = 'n', xlab = '', width = 0.85, ylim = ylim,
              main = "Incidenti da soli per sesso in Italia nel 2017", 
              ylab = "Frequenza percentuale")
text(x = xx, y = tabella_schianto_da_soli_sesso.percfreq,
     label = as.integer(tabella_schianto_da_soli_sesso.percfreq*100)/100,
     pos = 3, cex = 0.8, col = "red")
axis(1, at=xx, labels=c("Maschio", "Femmine", "Sconosciuto"), tick=FALSE, las=1, line=-0.5, cex.axis=0.8)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10987701902526191, 'fraction_numerical': 0.02386041133807505, 'mean_word_length': 6.516987095075059, 'pattern_counts': {'":': 0, '<': 170, '<?xml version=': 0, '>': 103, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '23', 'dir': 'jupyter-structured-clean-dedup', 'id': '107897', 'license': 'MIT', 'n_tokens_mistral': 11748, 'n_tokens_neox': 11082, 'n_words': 1870, 'path': 'leoNotebook.ipynb', 'repo_name': 'LeonardoAlchieri/car_accidents_italy', 'size': '28541'}