import pandas as pd import matplotlib.pyplot as plt import sys sys.path.append("src/") import label_utils path = "dataset/incidenti/istat/incidenti_2018.txt" data: pd.DataFrame = pd.read_csv(path, sep="\t", encoding='latin1') intersezione = data['intersezione_o_non_interse3'] intersezione_labels = label_utils.join_labels( intersezione, "dataset/incidenti/istat/Classificazioni/intersezione_o_non_interse3.csv" ).value_counts().sort_index() # Tengo scala in decine di migliaia intersezione_labels /= 1000 intersezione_labels = intersezione_labels.sort_index() intersezione_labels.plot.barh(color=['#77aa66'], width=0.9) plt.xlabel("Incidenti totali, in migliaia, per tipo di incrocio (2018)") plt.ylabel("") plt.tight_layout() plt.show()
import matplotlib.pyplot as plt import sys sys.path.append("src/") import label_utils path = "dataset/incidenti/istat/incidenti_2018.txt" data = pd.read_csv(path, sep="\t") # Selezione dati in base alla localizzazione incidente strade_urbane = data[(data['localizzazione_incidente'] == 1) | (data['localizzazione_incidente'] == 2) | (data['localizzazione_incidente'] == 3)]['veicolo__a___sesso_conducente'] strade_extraurbane = data[(data['localizzazione_incidente'] == 4) | (data['localizzazione_incidente'] == 5) | (data['localizzazione_incidente'] == 6)]['veicolo__a___sesso_conducente'] autostrade = data[data['localizzazione_incidente'] == 7]['veicolo__a___sesso_conducente'] # Rimozione dati nulli e conversione campo da string a int (tipo corretto) strade_urbane = strade_urbane[strade_urbane != ' '].astype(int) strade_extraurbane = strade_extraurbane[strade_extraurbane != ' '].astype(int) autostrade = autostrade[autostrade != ' '].astype(int) strade_extraurbane = label_utils.join_labels(strade_extraurbane, "dataset/incidenti/istat/Classificazioni/veicolo__a___sesso_conducente.csv").value_counts(normalize=True).sort_index() strade_urbane = label_utils.join_labels(strade_urbane, "dataset/incidenti/istat/Classificazioni/veicolo__a___sesso_conducente.csv").value_counts(normalize=True).sort_index() autostrade = label_utils.join_labels(autostrade, "dataset/incidenti/istat/Classificazioni/veicolo__a___sesso_conducente.csv").value_counts(normalize=True).sort_index() dataset_uniti = pd.DataFrame( [strade_extraurbane, strade_urbane, autostrade], index=['Autostrade', 'Strade urbane', 'Strade Extra-Urbane'] ).transpose() dataset_uniti.plot.bar(color = ['#5f64c6', '#c65f64', '#c6c15f']) plt.xticks(rotation=0) plt.tight_layout() plt.show()
import pandas as pd import matplotlib.pyplot as plt import sys sys.path.append("src/") import label_utils import heatmap as H data = pd.read_csv("dataset/incidenti/istat/incidenti_2018.txt", sep="\t") # selezione dati in base al luogo dell'incidente autostrade_veicoli = data[data['localizzazione_incidente'] == 7]['tipo_veicolo_a'] autostrade_veicoli = label_utils.join_labels( autostrade_veicoli, "dataset/incidenti/istat/Classificazioni/tipo_veicoli__b_.csv" ).value_counts(normalize=True).sort_index() strade_urbane = data[(data['localizzazione_incidente'] == 1) | (data['localizzazione_incidente'] == 2) | (data['localizzazione_incidente'] == 3)]['tipo_veicolo_a'] strade_urbane = label_utils.join_labels( strade_urbane, "dataset/incidenti/istat/Classificazioni/tipo_veicoli__b_.csv" ).value_counts(normalize=True).sort_index() strade_extraurbane = data[ (data['localizzazione_incidente'] == 4) | (data['localizzazione_incidente'] == 5) | (data['localizzazione_incidente'] == 6)]['tipo_veicolo_a'] strade_extraurbane = label_utils.join_labels( strade_extraurbane,
import pandas as pd import matplotlib.pyplot as plt import sys sys.path.append('src') import label_utils data = pd.read_csv("dataset/incidenti/istat/incidenti_2013.txt", sep="\t") agosto = data[data['mese'] == 8]['provincia'] agosto_label = label_utils.join_labels(agosto, 'dataset/incidenti/istat/Classificazioni/provincia.csv').value_counts().head(10) mesi = label_utils.join_labels(data['provincia'], 'dataset/incidenti/istat/Classificazioni/provincia.csv').value_counts().head(10) # Colore del grafo per evidenziare delle colonne agosto_ls = ['#6ac48f']*12 agosto_ls[:4] = ['#1dad59']*4 mesi_ls = ['#6a9ec4']*12 mesi_ls[:2] = ['#1d71ad']*2 mesi_ls[7] = '#1d71ad' mesi_ls[9] = '#1d71ad' plt.subplot(2,1,1) agosto_label.plot.bar(width=0.9, color=agosto_ls) plt.ylabel("Incidenti in Agosto (2011)") plt.tight_layout() plt.subplot(2,1,2) mesi.plot.bar(width=0.9, color=mesi_ls) plt.ylabel("Incidenti all'anno (2011)") plt.tight_layout() plt.show()
import pandas as pd import matplotlib.pyplot as plt import sys sys.path.append("src/") import label_utils path = "dataset/incidenti/istat/incidenti_2018.txt" data: pd.DataFrame = pd.read_csv(path, sep="\t", encoding='latin1') natura_incidente = data['natura_incidente'] natura_incidente_labels = label_utils.join_labels( natura_incidente, "dataset/incidenti/istat/Classificazioni/natura_incidente.csv" ).value_counts().sort_index() natura_incidente_labels.plot.barh(color='#5da3c1', width=0.9) plt.xlabel("Incidenti all'anno (2018)") plt.tight_layout() plt.show()
print("Processing: " + str(year)) # inconsistenze tra dataset istat if year == 2017: data = pd.read_csv(path + str(year) + ".txt", sep="\t", error_bad_lines=False, engine='python') else: data = pd.read_csv(path + str(year) + ".txt", sep="\t", encoding="latin1") natura_incidente = data['natura_incidente'] natura_incidente_labels = label_utils.join_labels( natura_incidente, "dataset/incidenti/istat/Classificazioni/natura_incidente.csv" ).value_counts(normalize=True) natura_incidente_labels = natura_incidente_labels[tipo_incidenti] inc_per_anno[str(year)] = pd.Series(natura_incidente_labels) fig, ax = plt.subplots() im = H.heatmap(inc_per_anno, inc_per_anno.index, inc_per_anno.columns, ax=ax, cmap="OrRd", cbar_visible=False) texts = H.annotate_heatmap(im) fig.tight_layout()
incidenti_pedoni = data[fields] fields.remove('intersezione_o_non_interse3') # Pulizia dataset da valori nulli incidenti_pedoni = incidenti_pedoni[ incidenti_pedoni['pedone_ferito_1__sesso'] != ' '] # Conteggio pedoni e conversione degli indici numerici degli incroci in testo pedoni_feriti = istat_utils.get_people(incidenti_pedoni, fields) incidenti_pedoni = pd.DataFrame( [incidenti_pedoni['intersezione_o_non_interse3'], pedoni_feriti], ['tipo_incrocio', 'pedoni_feriti']).transpose() incidenti_pedoni = incidenti_pedoni[incidenti_pedoni['pedoni_feriti'] != 0] incidenti_labels = label_utils.join_labels( incidenti_pedoni['tipo_incrocio'], 'dataset/incidenti/istat/Classificazioni/intersezione_o_non_interse3.csv') incidenti_pedoni = pd.DataFrame( [incidenti_labels, incidenti_pedoni['pedoni_feriti']], ['tipo_incrocio', 'pedoni_feriti']).transpose() pedoni_contati = pd.DataFrame( pd.crosstab(incidenti_pedoni['tipo_incrocio'], incidenti_pedoni['pedoni_feriti'])).transpose() pedoni_contati.index = pedoni_contati.index.astype(int) fig, ax = plt.subplots() im = H.heatmap(pedoni_contati, pedoni_contati.index, pedoni_contati.columns, ax=ax,
data['morti'] = data[morti[0]] + data[morti[1]] # Somma morti per tipo di incrocio df = {} for inc in data[incroci].unique(): df[inc] = 0 for inc, morti in zip(data[incroci], data['morti']): df[inc] += morti # Numero di incidenti è uguale a numero righe dataset, diviso per tipo di incroci num_incroci = data[incroci].value_counts().sort_index() indice_mortalita = pd.Series(df.values(), index=df.keys()).sort_index() mortalita = pd.DataFrame([indice_mortalita * 100 / num_incroci], index=['indice']).transpose() mortalita['incrocio'] = mortalita.index mortalita['incrocio'] = label_utils.join_labels( mortalita['incrocio'], "dataset/incidenti/istat/Classificazioni/intersezione_o_non_interse3.csv") mortalita.index = mortalita['incrocio'] mortalita = mortalita['indice'] mortalita = mortalita.sort_index() mortalita.plot.barh(color='#aa6677', width=0.9) plt.xlabel("Indice di Mortalità per tipo di incrocio (2018)") plt.ylabel("") plt.tight_layout() plt.show()
ostacolo = tipo_incidenti[tipo_incidenti['natura_incidente'] == 8]['feriti'] sbandamento = tipo_incidenti[tipo_incidenti['natura_incidente'] == 10]['feriti'] tamponamento = tamponamento.value_counts() frontale = frontale.value_counts() ostacolo = ostacolo.value_counts() sbandamento = sbandamento.value_counts() df = pd.DataFrame( [tamponamento, frontale, ostacolo, sbandamento], ['tamponamento', 'frontale', 'ostacolo', 'sbandamento'] )[[1,2,3,4]].transpose() # Conversione di indici numerici per tipologia di incidente perc = tipo_incidenti['natura_incidente'] perc = label_utils.join_labels(perc, "dataset/incidenti/istat/Classificazioni/natura_incidente.csv") perc = perc.value_counts(normalize=False) # Normalizzazione valori in base alla percentuale del tipo di incidente df['tamponamento'] = df['tamponamento'] / 32104 # numero di incidenti di questo tipo (da perc) df['frontale'] = df['frontale'] / 9715 df['ostacolo'] = df['ostacolo'] / 8606 df['sbandamento'] = df['sbandamento'] / 15284 color_ls = ['#60c1c1', '#6060c1', '#c16060', '#c1c160'] df.plot.bar(width=0.9, color=color_ls) plt.xticks(rotation=0) plt.xlabel("Numero di feriti") plt.ylabel("Percentuale della categoria di incidente\ncon numero di feriti indicato (2018)") plt.show()