예제 #1
0
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()
예제 #3
0
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,
예제 #4
0
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()
예제 #7
0
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,
예제 #8
0
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()
예제 #9
0
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()