Overall - accuracy:0.94, precision:0.89, recall:1.00
Over het hoofd zien - accuracy:0.98, precision:0.80, recall:1.00 Macht over stuur verliezen - accuracy:1.00, precision:1.00, recall:1.00
Out[28]:
u'Op de kruising Van der Mondeweg met de Waaldijk, richting de dijk, heeft een ongeval plaatsgevonden tussen twee personenauto\u2019s. Vermoedelijk w ilde de voorste auto afslaan toen het misging.\n\nHet ongeval gebeurde ron d 13:20 uur. Een auto wilde afslaan in de richting van de dijk, waarna een achteropkomende auto dit over het hoofd zag. Deze klapte hier vervolgens h ard achterop, waardoor er veel schade ontstond. Er lekte ook de nodige oli e. Tenminste \xe9\xe9n auto moet worden afgesleept door een berger.\n\nErg geschrokken\nDe ambulance is ter plaatse ter controle van de inzittenden. Alle inzittenden waren erg geschrokken, maar het is niet bekend of iemand dusdanig gewond is geraakt, dat deze naar het ziekenhuis vervoerd moest wo rden.\n\n\xc9\xe9n rijstrook is enige tijd volledig afgesloten geweest, wa t voor de nodige verkeershinder zorgde. De schadeformulieren worden ingevu ld voor de verzekeraar, die de schade verder afhandelt.'
In [29]: slachtoffer_pers_regex = r"(?<!zonder)(?=[a-z]*(fiets((s)?t)?er|(?<!door)rijd(st)?er|re nner|medewerker|bestuur(der|(s)?ster)|dief|chauffeur|scooteraar|postbode|bezorger|dader |veroorz(ak|aakst)er|meisje|jonge(n|tje)|vader|moeder)(s)?|baby('s)?|(automobilist(e)?| vrouw|agent|toerist(e)?)(en)?|[0-9]*-jarige|voetgang(st)?er(s)?|pers(o)?on(en)?|man(ne n)?|echtpa(a)?r(en)?|(gewonde|dode|bejaarde|jongere|inzittende)(n)?|kind(eren)?|"+inhab itants_string+")[^\n\.$,:]*((((zwaar|licht)?(gewond|komt om|letsel|overleden)( (bij va l)| (na |bij |door )(aanrijding|ongeval|.*botsing|(auto-)?ongeluk))?)|omgekomen|ongesch onden|(te )?water|aangereden|geschept|naar ziekenhuis|bekneld|schrik|(na |bij )(frontal e )?botsing|ongedeerd|meegesleurd|over het hoofd|(van de weg )?gedrukt|(ten |na )val|(g e)?val(len|t)))"
slachtoffer_pers_regex2 = r"(rijdt|reed|knalt|ziet|zag| schept| botst|aanrijding)(tegen |met)?[^\n\.$,:]*([a-z]*(fiets((s)?t)?er|rijd(st)?er|renner|bestuur(der|(s)?ster)|dief| chauffeur|scooteraar|postbode|medewerker|dader|veroorz(ak|aakst)er|meisje|jonge(n|tje)| vader|moeder)(s)?|baby('s)?|(automobilist(e)?|vrouw|agent|toerist(e)?)(en)?|[0-9]*-jari ge|voetgang(st)?er(s)?|pers(o)?on(en)?|man(nen)?|(gewonde|dode|bejaarde|jongere|inzitte nde)(n)?|kind(eren)?|"+inhabitants_string+")($|\s|,|\.)" slachtoffer_v_regex = r"(?<!op)(?=[a-z]*(auto|scooter|ambulance|wagen|motor|bus|voertui g|tractor|tram|trein|brommer|brommobiel|taxi|truck)((t)?je)?(\'|\’)?(s)?(en)?(\s))[^\n \.$,:]*((((zwaar|licht)?(gewond|beschadigd|komt om|letsel|overleden|slaat om)( (bij va l)| (na |bij |door )(aanrijding|gladheid|ongeval|.*botsing|(auto-)?ongeluk))?)|omgekome n|water|(?<!ramt )vangrail|op elkaar|geraakt|rijdt van|sloot|kop|komt onder|aangereden| kant|vliegt|geschept|botsen| botst|naar ziekenhuis|bekneld|schrik|(na |bij )(frontale
)?botsing|over het hoofd|ongedeerd|meegesleurd|van de weg gedrukt|(ten |na )val|(ge)?v al(len|t)))"
slachtoffer_v_regex2 = r"(rijdt|reed|knalt|zag|ramt| botst|^(harde)?botsing|geschaarde| te water geraakte|ongeluk met)(tegen|tussen)?[^\n\.$,:]*(?<!op)([a-z]*(auto|scooter|wag en|motor|ambulance|bus|voertuig|tractor|tram|trein|brommer|brommobiel|taxi|truck)((t)?j e)?(\'|\’)?(s)?(en)?(\s|$|\.|,))" dader_pers_regex = r"(?<!zonder)(?=[a-z]*(fiets((s)?t)?er|rijd(st)?er|renner|medewerker |bestuur(der|(s)?ster)|dief|chauffeur|scooteraar|postbode|bezorger|dader|veroorz(ak|aak st)er|meisje|jonge(n|tje)|vader|moeder)(s)?|baby('s)?|(automobilist(e)?|vrouw|agent|toe rist(e)?)(en)?|[0-9]*-jarige|voetgang(st)?er(s)?|pers(o)?on(en)?|man(nen)?|(gewonde|dod e|bejaarde|jongere|inzittende)(n)?|kind(eren)?|"+inhabitants_string+")[^\n\.$,:]*((knal t|reed|rijdt|zag|fietst(?!er|ocht)|loopt|botst)(tegen|met)?|ramt|strandt|zorgt voor opo nthoud|over (de )?kop|(uit )?moet (uit)?wijken|tegen boom|veroorzaakt|ervandoor|richt r avage|in botsing|(?<!ge)schept|(/s|aange)richt(?!ing)|(?<!ge)raakt (?!gewond|onwel)|ove r het hoofd (?!werd)|macht over|beland|(?<!ver)mist)"
dader_pers_regex2 = r"(door|(bij |na |door )(aanrijding|botsing|ongeluk)|vluchtende)[^ \n\.$,:]*([a-z]*(fiets((s)?t)?er|rijd(st)?er|renner|bestuur(der|(s)?ster)|die(f|ven)|ch auffeur|scooteraar|postbode|medewerker|dader|veroorz(ak|aakst)er|meisje|jonge(n|tje)|va der|moeder)(s)?|baby('s)?|(automobilist(e)?|vrouw|agent|toerist(e)?)(en)?|[0-9]*-jarige |voetgang(st)?er(s)?|pers(o)?on(en)?|man(nen)?|(gewonde|dode|bejaarde|jongere|inzittend e)(n)?|kind(eren)?|"+inhabitants_string+")($|\s|,|\.)" dader_v_regex = r"(?<!op)(?=[a-z]*(auto|scooter|wagen|ambulance|motor|bus|voertuig|trac tor|tram|trein|brommer|brommobiel|taxi|truck)((t)?je)?(\'|\’)?(s)?(en)?(\s))[^\n\.$,:]* ((knalt|reed|rijdt|zag|fietst(?!er|ocht)|loopt) (tegen)?|ramt|(tegen )?[a-z]* gereden|v erkeerde weghelft|veroorzaakt|betrokken bij|(?<!ge)schept|(/s|aange)richt(?!ing)|(?<!g e)raakt (?!gewond|onwel)|over het hoofd|bots(t)?en|gebotst|in botsing|macht over|crasht |beland|(?<!ver)mist)"
dader_v_regex2 = r"( botst (met|tegen)| door| onder| botsten| (aanrijding|ongeval|ongel uk|botsing) [a-z]*( tussen)?| (bij|na|door) (aanrijding|botsing|ongeluk))[^\n\.$,:]*(? <!op)([a-z]*(auto|scooter|wagen|motor|bus|ambulance|voertuig|tractor|tram|trein|brommer |brommobiel|taxi|truck)((t)?je)?(\'|\’)?(s)?(en)?)($|\s|,|\.)"
verkeer_regex = r"tunnel|file|boete|(weg|weer) (vrij|open)|vertraging(en)?|hinder|dicht |afgesloten|lost op|oponthoud|overlast"
In [30]: def Q4(df):
titel_benoemt_df = pd.DataFrame.from_dict({"VIC_PERSON":len(df[df['Titles'].str.enc ode('utf-8', errors='ignore').str.lower().str.contains(slachtoffer_pers_regex+"|"+slach toffer_pers_regex2, regex=True)])/float(len(df))*100,
"VIC_VEHICLE":len(df[df['Titles'].str.encode('utf -8', errors='ignore').str.lower().str.contains(slachtoffer_v_regex+"|"+slachtoffer_v_re gex2, regex=True)])/float(len(df))*100,
"OPPO_PERSON":len(df[df['Titles'].str.encode('utf -8', errors='ignore').str.lower().str.contains(dader_pers_regex+"|"+dader_pers_regex2, regex=True)])/float(len(df))*100,
"OPPO_VEHICLE":len(df[df['Titles'].str.encode('ut f-8', errors='ignore').str.lower().str.contains(dader_v_regex+"|"+dader_v_regex2, regex =True)])/float(len(df))*100,
"TRAFFIC":len(df[df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(verkeer_regex, regex=True)])/float(len(df))*1 00}, orient="index") return titel_benoemt_df In [31]: df1_q4 = Q4(hetongeluk_df) df2_q4 = Q4(flitsservice_df)
ax = pd.concat([df1_q4, df2_q4], axis=1).plot.bar(figsize=(18,8), title='De titel benoe mt', rot=0, legend=False, fontsize=16)
ax.legend(["Het Ongeluk", "Flitsservice"], fontsize=16) ax.title.set_fontsize(16)
plt.savefig("TitelBenoemt.png") plt.show()
Evaluation
In [32]:
#True Positives
Q4_TP_vic_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_PERSON'] == 1)&(hetongeluk _df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoffer _pers_regex+'|'+slachtoffer_pers_regex2, regex=True))])
Q4_TP_vic_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_VEHICLE'] == 1)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoff er_v_regex+'|'+slachtoffer_v_regex2, regex=True))])
Q4_TP_oppo_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_PERSON'] == 1)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_per s_regex+'|'+dader_pers_regex2, regex=True))])
Q4_TP_oppo_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_VEHIC'] == 1)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_v_r egex+'|'+dader_v_regex2, regex=True))])
Q4_TP_verkeer = len(hetongeluk_df[(hetongeluk_df['TITLE_TRAFFIC'] == 1)&(hetongeluk_df[
'Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(verkeer_regex, regex=True))])
Q4_TP = Q4_TP_vic_pers + Q4_TP_vic_vehic + Q4_TP_oppo_pers + Q4_TP_oppo_vehic + Q4_TP_v erkeer
#True Negatives
Q4_TN_vic_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_PERSON'] == 0)&~(hetongelu k_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoffe r_pers_regex+'|'+slachtoffer_pers_regex2, regex=True))])
Q4_TN_vic_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_VEHICLE'] == 0)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtof fer_v_regex+'|'+slachtoffer_v_regex2, regex=True))])
Q4_TN_oppo_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_PERSON'] == 0)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_pe rs_regex+'|'+dader_pers_regex2, regex=True))])
Q4_TN_oppo_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_VEHIC'] == 0)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_v_ regex+'|'+dader_v_regex2, regex=True))])
Q4_TN_verkeer = len(hetongeluk_df[(hetongeluk_df['TITLE_TRAFFIC'] == 0)&~(hetongeluk_df ['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(verkeer_regex, regex=True))])
Q4_TN = Q4_TN_vic_pers + Q4_TN_vic_vehic + Q4_TN_oppo_pers + Q4_TN_oppo_vehic + Q4_TN_v erkeer
#False Positives
Q4_FP_vic_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_PERSON'] == 0)&(hetongeluk _df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoffer _pers_regex+'|'+slachtoffer_pers_regex2, regex=True))])
Q4_FP_vic_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_VEHICLE'] == 0)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoff er_v_regex+'|'+slachtoffer_v_regex2, regex=True))])
Q4_FP_oppo_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_PERSON'] == 0)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_per s_regex+'|'+dader_pers_regex2, regex=True))])
Q4_FP_oppo_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_VEHIC'] == 0)&(hetongel uk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_v_r egex+'|'+dader_v_regex2, regex=True))])
Q4_FP_verkeer = len(hetongeluk_df[(hetongeluk_df['TITLE_TRAFFIC'] == 0)&(hetongeluk_df[
'Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(verkeer_regex, regex=True))])
Q4_FP = Q4_FP_vic_pers + Q4_FP_vic_vehic + Q4_FP_oppo_pers + Q4_FP_oppo_vehic + Q4_FP_v erkeer
#False Negatives
Q4_FN_vic_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_PERSON'] == 1)&~(hetongelu 780
k_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtoffe r_pers_regex+'|'+slachtoffer_pers_regex2, regex=True))])
Q4_FN_vic_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_VIC_VEHICLE'] == 1)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(slachtof fer_v_regex+'|'+slachtoffer_v_regex2, regex=True))])
Q4_FN_oppo_pers = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_PERSON'] == 1)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_pe rs_regex+'|'+dader_pers_regex2, regex=True))])
Q4_FN_oppo_vehic = len(hetongeluk_df[(hetongeluk_df['TITLE_OPPO_VEHIC'] == 1)&~(hetonge luk_df['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(dader_v_ regex+'|'+dader_v_regex2, regex=True))])
Q4_FN_verkeer = len(hetongeluk_df[(hetongeluk_df['TITLE_TRAFFIC'] == 1)&~(hetongeluk_df ['Titles'].str.encode('utf-8', errors='ignore').str.lower().str.contains(verkeer_regex, regex=True))])
Q4_FN = Q4_FN_vic_pers + Q4_FN_vic_vehic + Q4_FN_oppo_pers + Q4_FN_oppo_vehic + Q4_FN_v erkeer
In [33]: #overall Q4_acc = float(Q4_TP + Q4_TN) / (Q4_TP + Q4_TN + Q4_FP + Q4_FN) Q4_prec = float(Q4_TP) / (Q4_TP + Q4_FP) Q4_rec = float(Q4_TP) / (Q4_TP + Q4_FN) #vic_pers
Q4_acc_vic_pers = float(Q4_TP_vic_pers + Q4_TN_vic_pers) / (Q4_TP_vic_pers + Q4_TN_vic_ pers + Q4_FP_vic_pers + Q4_FN_vic_pers)
Q4_prec_vic_pers = float(Q4_TP_vic_pers) / (Q4_TP_vic_pers + Q4_FP_vic_pers) Q4_rec_vic_pers = float(Q4_TP_vic_pers) / (Q4_TP_vic_pers + Q4_FN_vic_pers)
#vic_vehic
Q4_acc_vic_vehic = float(Q4_TP_vic_vehic + Q4_TN_vic_vehic) / (Q4_TP_vic_vehic + Q4_TN_ vic_vehic + Q4_FP_vic_vehic + Q4_FN_vic_vehic)
Q4_prec_vic_vehic = float(Q4_TP_vic_vehic) / (Q4_TP_vic_vehic + Q4_FP_vic_vehic) Q4_rec_vic_vehic = float(Q4_TP_vic_vehic) / (Q4_TP_vic_vehic + Q4_FN_vic_vehic)
#oppo_pers
Q4_acc_oppo_pers = float(Q4_TP_oppo_pers + Q4_TN_oppo_pers) / (Q4_TP_oppo_pers + Q4_TN_ oppo_pers + Q4_FP_oppo_pers + Q4_FN_oppo_pers)
Q4_prec_oppo_pers = float(Q4_TP_oppo_pers) / (Q4_TP_oppo_pers + Q4_FP_oppo_pers) Q4_rec_oppo_pers = float(Q4_TP_oppo_pers) / (Q4_TP_oppo_pers + Q4_FN_oppo_pers)
#oppo_vehic
Q4_acc_oppo_vehic = float(Q4_TP_oppo_vehic + Q4_TN_oppo_vehic) / (Q4_TP_oppo_vehic + Q4 _TN_oppo_vehic + Q4_FP_oppo_vehic + Q4_FN_oppo_vehic)
Q4_prec_oppo_vehic = float(Q4_TP_oppo_vehic) / (Q4_TP_oppo_vehic + Q4_FP_oppo_vehic) Q4_rec_oppo_vehic = float(Q4_TP_oppo_vehic) / (Q4_TP_oppo_vehic + Q4_FN_oppo_vehic)
#verkeer
Q4_acc_verkeer = float(Q4_TP_verkeer + Q4_TN_verkeer) / (Q4_TP_verkeer + Q4_TN_verkeer + Q4_FP_verkeer + Q4_FN_verkeer)
Q4_prec_verkeer = float(Q4_TP_verkeer) / (Q4_TP_verkeer + Q4_FP_verkeer) Q4_rec_verkeer = float(Q4_TP_verkeer) / (Q4_TP_verkeer + Q4_FN_verkeer)
print("Overall - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".format(Q4_acc, Q4 _prec, Q4_rec))
print("Victim as a person - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".format (Q4_acc_vic_pers, Q4_prec_vic_pers, Q4_rec_vic_pers))
print("Victim as a vehicle - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".forma t(Q4_acc_vic_vehic, Q4_prec_vic_vehic, Q4_rec_vic_vehic))
print("Opposite as a person - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".form at(Q4_acc_oppo_pers, Q4_prec_oppo_pers, Q4_rec_oppo_pers))
print("Opposite as a vehicle - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".for mat(Q4_acc_oppo_vehic, Q4_prec_oppo_vehic, Q4_rec_oppo_vehic))
print("Traffic - accuracy:{0:.2f}, precision:{1:.2f}, recall:{2:.2f}".format(Q4_acc_ver keer, Q4_prec_verkeer, Q4_rec_verkeer))
Overall - accuracy:0.94, precision:0.85, recall:0.91
Victim as a person - accuracy:0.95, precision:0.97, recall:0.94 Victim as a vehicle - accuracy:0.90, precision:0.71, recall:0.88 Opposite as a person - accuracy:0.95, precision:0.71, recall:1.00 Opposite as a vehicle - accuracy:0.90, precision:0.80, recall:0.81 Traffic - accuracy:0.99, precision:0.94, recall:1.00
In [34]:
hetongeluk_df[(hetongeluk_df['TITLE_OPPO_PERSON'] == 1)& (hetongeluk_df['Titles'].str.l ower().str.contains(dader_pers_regex+'|'+dader_pers_regex2, regex=True))].reset_index(d rop=True)['Titles'][0]