【大数据】—美国交通事故分析(2016 年 2 月至 2020 年 12 月)

引言

在当今快速发展的数字时代,大数据已成为我们理解世界、做出决策的重要工具。特别是在交通安全领域,大数据分析能够揭示事故模式、识别风险因素,并帮助制定预防措施,从而挽救生命。本文将深入探讨2016年2月至2020年12月期间,美国交通事故的大数据集,旨在通过数据分析揭示交通事故的内在规律和趋势。

背景

这是一个美国全国性的车祸数据集,涵盖美国 49 个州。事故数据是在 2016 年 2 月至 2020 年 12 月期间收集的,使用多个提供流式交通事件(或事件)数据的 API。这些 API 由各种实体捕获的交通数据,例如美国和州交通部门、执法机构、交通摄像头和道路网络内的交通传感器获取。目前,该数据集中约有 773万条事故记录。

目的

从Excel 2007开始,读取行数上限增加到了1,048,576行,超出的行数就不能被打开了,工作中目前能遇到的也就1万多不到2万条数据。今天用下图数据集测试家用电脑的数据承载能力,3.06G相当大了,工作中基本是遇不到这么大的数据。
在这里插入图片描述

数据集信息

  • ID: 事故记录的唯一标识符。
  • Severity: 事故严重程度,从1到4的数字,1表示对交通影响最小,4表示影响最大。
  • Start_Time 和 End_Time: 事故开始和结束时间,以当地时间表示。
  • Start_Lat 和 Start_Lng: 事故开始点的经纬度坐标。
  • End_Lat 和 End_Lng: 事故影响结束点的经纬度坐标,可能为空。
  • Distance(mi): 受事故影响的道路长度。
  • Description: 事故的自然语言描述。
  • Number, Street, Side, City, County, State, Zipcode, Country:
    事故地点的地址信息。
  • Timezone: 事故地点的时区。
  • Airport_Code: 最接近事故地点的机场天气站代码。
  • Weather_Timestamp, Temperature(F), Wind_Chill(F), Humidity(%),
    Pressure(in), Visibility(mi), Wind_Direction, Wind_Speed(mph),
    Precipitation(in): 事故时的天气信息。
  • Weather_Condition: 事故时的天气状况,如雨、雪、雷暴、雾等。
  • Amenity, Bump, Crossing, Give_Way, Junction, No_Exit, Railway,
    Roundabout, Station, Stop, Traffic_Calming, Traffic_Signal,
    Turning_Loop: 事故地点附近的各种兴趣点(POI)的注释。

探索性分析(EDA):

读入数据:

# import all necesary libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.patches as mpatches
%matplotlib inline
import seaborn as sns
import calendar
import plotly as pt
from plotly import graph_objs as go
import plotly.express as px
import plotly.figure_factory as ff
from pylab import *
import matplotlib.patheffects as PathEffectsimport descartes
import geopandas as gpd
from Levenshtein import distance
from itertools import product
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
from scipy.spatial.distance import pdist, squareform
from shapely.geometry import Point, Polygonimport geoplot
from geopy.geocoders import Nominatimimport warnings
warnings.filterwarnings('ignore')plt.rcParams['font.family'] = "Microsoft JhengHei UI Light"
plt.rcParams['font.serif'] = ["Microsoft JhengHei UI Light"]

在这里插入图片描述

上面我们测试了一下将7728394行,46列数据读入内存的时间,总用时35.2秒:

CPU时间:

  • 用户时间(User time):25.1秒。这是程序在用户模式下运行所花费的时间,即程序执行自己的代码(不包括操作系统调用)所花费的时间。这个时间主要反映了程序本身的工作负载。
  • 系统时间(Systime):7.32秒。这是程序在内核模式下运行所花费的时间,即程序执行操作系统调用(如文件I/O、内存管理等)所花费的时间。这个时间反映了程序与操作系统交互的频率和复杂度。
  • 总CPU时间(Total CPU time):32.4秒。这是用户时间和系统时间的总和,表示程序在CPU上总共花费的时间。

墙钟时间(Wall time):
总共用时35.2秒。这是从开始执行程序到程序结束所经过的实际时间,包括CPU时间、等待时间(如等待I/O操作完成)、程序不运行的时间(如等待其他进程释放资源)等。

数据可视化

city_df = pd.DataFrame(df['City'].value_counts()).reset_index().rename(columns={'index':'City', 'City':'Cases'})
top_10_cities = pd.DataFrame(city_df.head(10))
fig, ax = plt.subplots(figsize = (12,7), dpi = 80)cmap = cm.get_cmap('rainbow', 10)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=top_10_cities['Cases'], x=top_10_cities['City'], palette='rainbow')total = sum(city_df['Cases'])
for i in ax.patches:ax.text(i.get_x()+.03, i.get_height()-2500, \str(round((i.get_height()/total)*100, 2))+'%', fontsize=15, weight='bold',color='white')plt.title('\nTop 10 Cities in US with most no. of \nRoad Accident Cases (2016-2020)\n', size=20, color='grey')plt.rcParams['font.family'] = "Microsoft JhengHei UI Light"
plt.rcParams['font.serif'] = ["Microsoft JhengHei UI Light"]plt.ylim(1000, 50000)
plt.xticks(rotation=10, fontsize=12)
plt.yticks(fontsize=12)ax.set_xlabel('\nCities\n', fontsize=15, color='grey')
ax.set_ylabel('\nAccident Cases\n', fontsize=15, color='grey')for i in ['bottom', 'left']:ax.spines[i].set_color('white')ax.spines[i].set_linewidth(1.5)right_side = ax.spines["right"]
right_side.set_visible(False)
top_side = ax.spines["top"]
top_side.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=.3)
MA = mpatches.Patch(color=clrs[0], label='City with Maximum\n no. of Road Accidents')
ax.legend(handles=[MA], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=clrs[0], edgecolor='white');
plt.show()

在这里插入图片描述从上图可以看出,美国的道路交通事故(2016-2020 年)数量最多的城市是洛杉矶,占全部交通事故的比重为2.64%,排名第二的城市是迈阿密,占全部交通事故的比重为2.39%。过去5年中大约有14%的事故仅来自美国10657个城市中的这10个城市。

在这里插入图片描述过去 5 年(2016-2020 年)中,洛杉矶每年平均发生 7,997 起交通事故.

states = gpd.read_file('../input/us-states-map')def lat(city):address=citygeolocator = Nominatim(user_agent="Your_Name")location = geolocator.geocode(address)return (location.latitude)def lng(city):address=citygeolocator = Nominatim(user_agent="Your_Name")location = geolocator.geocode(address)return (location.longitude)# list of top 10 cities
top_ten_city_list = list(city_df.City.head(10))top_ten_city_lat_dict = {}
top_ten_city_lng_dict = {}
for i in top_ten_city_list:top_ten_city_lat_dict[i] = lat(i)top_ten_city_lng_dict[i] = lng(i)top_10_cities_df = df[df['City'].isin(list(top_10_cities.City))]top_10_cities_df['New_Start_Lat'] = top_10_cities_df['City'].map(top_ten_city_lat_dict)
top_10_cities_df['New_Start_Lng'] = top_10_cities_df['City'].map(top_ten_city_lng_dict)
geometry_cities = [Point(xy) for xy in zip(top_10_cities_df['New_Start_Lng'], top_10_cities_df['New_Start_Lat'])]
geo_df_cities = gpd.GeoDataFrame(top_10_cities_df, geometry=geometry_cities)
fig, ax = plt.subplots(figsize=(15,15))
ax.set_xlim([-125,-65])
ax.set_ylim([22,55])
states.boundary.plot(ax=ax, color='grey');colors = ['#e6194B','#f58231','#ffe119','#bfef45','#3cb44b', '#aaffc3','#42d4f4','#4363d8','#911eb4','#f032e6']
markersizes = [50+(i*20) for i in range(10)][::-1]
for i in range(10):geo_df_cities[geo_df_cities['City'] == top_ten_city_list[i]].plot(ax=ax, markersize=markersizes[i], color=colors[i], marker='o', label=top_ten_city_list[i], alpha=0.7);plt.legend(prop={'size': 13}, loc='best', bbox_to_anchor=(0.5, 0., 0.5, 0.5), edgecolor='white', title="Cities", title_fontsize=15);for i in ['bottom', 'top', 'left', 'right']:side = ax.spines[i]side.set_visible(False)plt.tick_params(top=False, bottom=False, left=False, right=False,labelleft=False, labelbottom=False)plt.title('\nVisualization of Top 10 Accident Prone Cities in US (2016-2020)', size=20, color='grey');

在这里插入图片描述交通事故排名前10的城市有3个不属于加利福尼亚州。

def city_cases_percentage(val, operator):if operator == '<':res = city_df[city_df['Cases']<val].shape[0]elif operator == '>':res = city_df[city_df['Cases']>val].shape[0]elif operator == '=':res = city_df[city_df['Cases']==val].shape[0]print(f'{res} Cities, {round(res*100/city_df.shape[0], 2)}%')city_cases_percentage(1, '=')
city_cases_percentage(100, '<')
city_cases_percentage(1000, '<')
city_cases_percentage(1000, '>')
city_cases_percentage(5000, '>')
city_cases_percentage(10000, '>')

在这里插入图片描述
在此数据集中,我们总共有 10,657 个城市的记录:
在过去5年,只发生1起事故的城市有1167个,占美国所有城市的比重为11%。
在过去5年,美国所有的城市中,有8682个城市事故少于100起,占美国所有城市的比重为81%。
在过去5年,美国所有的城市中,有10406个城市事故少于1000起。
在过去5年,美国所有的城市中,有251个城市事故多于1000起。
在过去5年,美国所有的城市中,有40个城市事故多于5000起。
在过去5年,美国只有13个城市事故超过10000起。

# create a dictionary using US State code and their corresponding Name
us_states = {'AK': 'Alaska','AL': 'Alabama','AR': 'Arkansas','AS': 'American Samoa','AZ': 'Arizona','CA': 'California','CO': 'Colorado','CT': 'Connecticut','DC': 'District of Columbia','DE': 'Delaware','FL': 'Florida','GA': 'Georgia','GU': 'Guam','HI': 'Hawaii','IA': 'Iowa','ID': 'Idaho','IL': 'Illinois','IN': 'Indiana','KS': 'Kansas','KY': 'Kentucky','LA': 'Louisiana','MA': 'Massachusetts','MD': 'Maryland','ME': 'Maine','MI': 'Michigan','MN': 'Minnesota','MO': 'Missouri','MP': 'Northern Mariana Islands','MS': 'Mississippi','MT': 'Montana','NC': 'North Carolina','ND': 'North Dakota','NE': 'Nebraska','NH': 'New Hampshire','NJ': 'New Jersey','NM': 'New Mexico','NV': 'Nevada','NY': 'New York','OH': 'Ohio','OK': 'Oklahoma','OR': 'Oregon','PA': 'Pennsylvania','PR': 'Puerto Rico','RI': 'Rhode Island','SC': 'South Carolina','SD': 'South Dakota','TN': 'Tennessee','TX': 'Texas','UT': 'Utah','VA': 'Virginia','VI': 'Virgin Islands','VT': 'Vermont','WA': 'Washington','WI': 'Wisconsin','WV': 'West Virginia','WY': 'Wyoming'}# create a dataframe of State and their corresponding accident cases
state_df = pd.DataFrame(df['State'].value_counts()).reset_index().rename(columns={'index':'State', 'State':'Cases'})# Function to convert the State Code with the actual corressponding Name
def convert(x): return us_states[x]state_df['State'] = state_df['State'].apply(convert)top_ten_states_name = list(state_df['State'].head(10))
fig, ax = plt.subplots(figsize = (12,6), dpi = 80)cmap = cm.get_cmap('winter', 10)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=state_df['Cases'].head(10), x=state_df['State'].head(10), palette='winter')
ax1 = ax.twinx()
sns.lineplot(data = state_df[:10], marker='o', x='State', y='Cases', color = 'white', alpha = .8)total = df.shape[0]
for i in ax.patches:ax.text(i.get_x()-0.2, i.get_height()+10000, \' {:,d}\n  ({}%) '.format(int(i.get_height()), round(100*i.get_height()/total, 1)), fontsize=15,color='black')ax.set(ylim =(-10000, 600000))
ax1.set(ylim =(-100000, 1700000))plt.title('\nTop 10 States with most no. of \nAccident cases in US (2016-2020)\n', size=20, color='grey')
ax1.axes.yaxis.set_visible(False)
ax.set_xlabel('\nStates\n', fontsize=15, color='grey')
ax.set_ylabel('\nAccident Cases\n', fontsize=15, color='grey')for i in ['top','right']:side1 = ax.spines[i]side1.set_visible(False)side2 = ax1.spines[i]side2.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=.3)ax.spines['bottom'].set_bounds(0.005, 9)
ax.spines['left'].set_bounds(0, 600000)
ax1.spines['bottom'].set_bounds(0.005, 9)
ax1.spines['left'].set_bounds(0, 600000)
ax.tick_params(axis='y', which='major', labelsize=10.6)
ax.tick_params(axis='x', which='major', labelsize=10.6, rotation=10)MA = mpatches.Patch(color=clrs[0], label='State with Maximum\n no. of Road Accidents')
ax.legend(handles=[MA], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=clrs[0], edgecolor='white');

在这里插入图片描述在过去5年,美国所有的城市中,加利福尼亚州是事故排名最高的州,约占全部交通事故的比重为30%,平均每天发生246起事故,意味着每小时约10起交通事故。
佛罗里达州是事故排名第二的州,约占全部交通事故的比重为10%。

geometry = [Point(xy) for xy in zip(df['Start_Lng'], df['Start_Lat'])]
geo_df = gpd.GeoDataFrame(df, geometry=geometry)geo_df['year'] = geo_df.Start_Time.dt.yeargeo_df['State'] = geo_df['State'].apply(convert)
fig, ax = plt.subplots(figsize=(15,15))
ax.set_xlim([-125,-65])
ax.set_ylim([22,55])states.boundary.plot(ax=ax, color='grey');
states.apply(lambda x: None if (x.NAME not in top_ten_states_name) else ax.annotate(s=x.NAME, xy=x.geometry.centroid.coords[0], ha='center', color='black', weight='bold', fontsize=12.5), axis=1);# CFOTNYMVNPI
colors = ['#FF5252','#9575CD','#FF8A80','#FF4081','#FFEE58','#7C4DFF','#00E5FF','#81D4FA','#64FFDA','#8C9EFF']
count = 0
for i in list(state_df['State'].head(10)):geo_df[geo_df['State'] == i].plot(ax=ax, markersize=1, color=colors[count], marker='o');count += 1for i in ['bottom', 'top', 'left', 'right']:side = ax.spines[i]side.set_visible(False)plt.tick_params(top=False, bottom=False, left=False, right=False,labelleft=False, labelbottom=False)plt.title('\nVisualization of Top 10 Accident Prone States in US (2016-2020)', size=20, color='grey');

在这里插入图片描述

fig, ax = plt.subplots(figsize = (12,6), dpi = 80)cmap = cm.get_cmap('cool', 10)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=state_df['Cases'].tail(10), x=state_df['State'].tail(10), palette='cool')
ax1 = ax.twinx()
sns.lineplot(data = state_df[-10:], marker='o', x='State', y='Cases', color = 'white', alpha = .8)total = df.shape[0]
for i in ax.patches:ax.text(i.get_x()-0.1, i.get_height()+100, \'  {:,d}\n({}%) '.format(int(i.get_height()), round(100*i.get_height()/total, 2)), fontsize=15,color='black')ax.set(ylim =(-50, 5000))
ax1.set(ylim =(-50, 6000))plt.title('\nTop 10 States with least no. of \nAccident cases in US (2016-2020)\n', size=20, color='grey')
ax1.axes.yaxis.set_visible(False)
ax.set_xlabel('\nStates\n', fontsize=15, color='grey')
ax.set_ylabel('\nAccident Cases\n', fontsize=15, color='grey')for i in ['top', 'right']:side = ax.spines[i]side.set_visible(False)side1 = ax1.spines[i]side1.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=.3)ax.spines['bottom'].set_bounds(0.005, 9)
ax.spines['left'].set_bounds(0, 5000)
ax1.spines['bottom'].set_bounds(0.005, 9)
ax1.spines['left'].set_bounds(0, 5000)
ax.tick_params(axis='y', which='major', labelsize=11)
ax.tick_params(axis='x', which='major', labelsize=11, rotation=15)MI = mpatches.Patch(color=clrs[-1], label='State with Minimum\n no. of Road Accidents')
ax.legend(handles=[MI], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=clrs[-1], edgecolor='white');

在这里插入图片描述在过去5年,美国所有的城市中,南达科他州是事故排名数量最低的城市,仅发生了213起事故,意味着平均每年发生42起事故。

timezone_df = pd.DataFrame(df['Timezone'].value_counts()).reset_index().rename(columns={'index':'Timezone', 'Timezone':'Cases'})
fig, ax = plt.subplots(figsize = (10,6), dpi = 80)cmap = cm.get_cmap('spring', 4)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=timezone_df['Cases'], x=timezone_df['Timezone'], palette='spring')total = df.shape[0]
for i in ax.patches:ax.text(i.get_x()+0.3, i.get_height()-50000, \'{}%'.format(round(i.get_height()*100/total)), fontsize=15,weight='bold',color='white')plt.ylim(-20000, 700000)
plt.title('\nPercentage of Accident Cases for \ndifferent Timezone in US (2016-2020)\n', size=20, color='grey')
plt.ylabel('\nAccident Cases\n', fontsize=15, color='grey')
plt.xlabel('\nTimezones\n', fontsize=15, color='grey')
plt.xticks(fontsize=13)
plt.yticks(fontsize=12)for i in ['top', 'right']:side = ax.spines[i]side.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=.3)
ax.spines['bottom'].set_bounds(0.005, 3)
ax.spines['left'].set_bounds(0, 700000)MA = mpatches.Patch(color=clrs[0], label='Timezone with Maximum\n no. of Road Accidents')
MI = mpatches.Patch(color=clrs[-1], label='Timezone with Minimum\n no. of Road Accidents')
ax.legend(handles=[MA, MI], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=[clrs[0], 'grey'], edgecolor='white');

在这里插入图片描述从时区来看,美国东部时区交通事故案件最高,占全部事故案件比重为39%,山区时区数量最低,占比仅为6%。

fig, ax = plt.subplots(figsize=(15,15))
ax.set_xlim([-125,-65])
ax.set_ylim([22,55])
states.boundary.plot(ax=ax, color='black');colors = ['#00db49', '#ff5e29', '#88ff33', '#fffb29']
#4132
count = 0
for i in list(timezone_df.Timezone):geo_df[geo_df['Timezone'] == i].plot(ax=ax, markersize=1, color=colors[count], marker='o', label=i);count += 1plt.legend(markerscale=10., prop={'size': 15}, edgecolor='white', title="Timezones", title_fontsize=15, loc='lower right');for i in ['bottom', 'top', 'left', 'right']:side = ax.spines[i]side.set_visible(False)plt.tick_params(top=False, bottom=False, left=False, right=False,labelleft=False, labelbottom=False)plt.title('\nVisualization of Road Accidents \nfor different Timezones in US (2016-2020)', size=20, color='grey');

在这里插入图片描述

street_df = pd.DataFrame(df['Street'].value_counts()).reset_index().rename(columns={'index':'Street No.', 'Street':'Cases'})
top_ten_streets_df = pd.DataFrame(street_df.head(10))
fig, ax = plt.subplots(figsize = (12,6), dpi = 80)cmap = cm.get_cmap('gnuplot2', 10)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=top_ten_streets_df['Cases'], x=top_ten_streets_df['Street No.'], palette='gnuplot2')
ax1 = ax.twinx()
sns.lineplot(data = top_ten_streets_df, marker='o', x='Street No.', y='Cases', color = 'white', alpha = .8)total = df.shape[0]
for i in ax.patches:ax.text(i.get_x()+0.04, i.get_height()-2000, \'{:,d}'.format(int(i.get_height())), fontsize=12.5,weight='bold',color='white')ax.axes.set_ylim(-1000, 30000)
ax1.axes.set_ylim(-1000, 40000)
plt.title('\nTop 10 Accident Prone Streets in US (2016-2020)\n', size=20, color='grey')ax1.axes.yaxis.set_visible(False)
ax.set_xlabel('\nStreet No.\n', fontsize=15, color='grey')
ax.set_ylabel('\nAccident Cases\n', fontsize=15, color='grey')for i in ['top','right']:side1 = ax.spines[i]side1.set_visible(False)side2 = ax1.spines[i]side2.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=.3)ax.spines['bottom'].set_bounds(0.005, 9)
ax.spines['left'].set_bounds(0, 30000)
ax1.spines['bottom'].set_bounds(0.005, 9)
ax1.spines['left'].set_bounds(0, 30000)
ax.tick_params(axis='both', which='major', labelsize=12)MA = mpatches.Patch(color=clrs[1], label='Street with Maximum\n no. of Road Accidents')
MI = mpatches.Patch(color=clrs[-2], label='Street with Minimum\n no. of Road Accidents')
ax.legend(handles=[MA, MI], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=[clrs[1], 'grey'], edgecolor='white');

在这里插入图片描述
在过去5年,美国所有的街道中,I-5 N 号街道事故记录最高,平均每天发生14起事故。

def street_cases_percentage(val, operator):if operator == '=':val = street_df[street_df['Cases']==val].shape[0]elif operator == '>':val = street_df[street_df['Cases']>val].shape[0]elif operator == '<':val = street_df[street_df['Cases']<val].shape[0]print('{:,d} Streets, {}%'.format(val, round(val*100/street_df.shape[0], 2)))street_cases_percentage(1, '=')
street_cases_percentage(100, '<')
street_cases_percentage(1000, '<')
street_cases_percentage(1000, '>')
street_cases_percentage(5000, '>')

在这里插入图片描述在过去5年,美国有93048条街道发生意外事故。其中,36441条街道(39%)在过去5年只有1起事故;98%的街道事故少于100起;街道事故超过1000起的仅占0.2%。有24条街道事故超5000起。

severity_df = pd.DataFrame(df['Severity'].value_counts()).rename(columns={'index':'Severity', 'Severity':'Cases'})fig = go.Figure(go.Funnelarea(text = ["Severity - 2","Severity - 3", "Severity - 4", "Severity - 1"],values = severity_df.Cases,title = {"position": "top center", "text": "<b>Impact on the Traffic due to the Accidents</b>", 'font':dict(size=18,color="#7f7f7f")},marker = {"colors": ['#14a3ee', '#b4e6ee', '#fdf4b8', '#ff4f4e'],"line": {"color": ["#e8e8e8", "wheat", "wheat", "wheat"], "width": [7, 0, 0, 2]}}))fig.show()

在这里插入图片描述
在过去5年中,有80%事故对交通影响为中等,严重影响的仅占7.5%。

fig, ax = plt.subplots(figsize=(15,15))
ax.set_xlim([-125,-65])
ax.set_ylim([22,55])
states.boundary.plot(ax=ax, color='black');geo_df[geo_df['Severity'] == 1].plot(ax=ax, markersize=50, color='#5cff4a', marker='o', label='Severity 1');
geo_df[geo_df['Severity'] == 3].plot(ax=ax, markersize=10, color='#ff1c1c', marker='x', label='Severity 3');
geo_df[geo_df['Severity'] == 4].plot(ax=ax, markersize=1, color='#6459ff', marker='v', label='Severity 4');
geo_df[geo_df['Severity'] == 2].plot(ax=ax, markersize=5, color='#ffb340', marker='+', label='Severity 2');for i in ['bottom', 'top', 'left', 'right']:side = ax.spines[i]side.set_visible(False)plt.tick_params(top=False, bottom=False, left=False, right=False,labelleft=False, labelbottom=False)plt.title('\nDifferent level of Severity visualization in US map', size=20, color='grey');One = mpatches.Patch(color='#5cff4a', label='Severity 1')
Two = mpatches.Patch(color='#ffb340', label='Severity 2')
Three = mpatches.Patch(color='#ff1c1c', label='Severity 3')
Four = mpatches.Patch(color='#6459ff', label='Severity 4')ax.legend(handles=[One, Two, Three, Four], prop={'size': 15}, loc='lower right', borderpad=1, labelcolor=['#5cff4a', '#ffb340', '#ff1c1c', '#6459ff'], edgecolor='white');

在这里插入图片描述

accident_duration_df = pd.DataFrame(df['End_Time'] - df['Start_Time']).reset_index().rename(columns={'index':'Id', 0:'Duration'})top_10_accident_duration_df = pd.DataFrame(accident_duration_df['Duration'].value_counts().head(10).sample(frac = 1)).reset_index().rename(columns={'index':'Duration', 'Duration':'Cases'})Duration = [str(i).split('days')[-1].strip() for i in top_10_accident_duration_df.Duration]top_10_accident_duration_df['Duration'] = Duration
fig, ax = plt.subplots(figsize = (12,6), dpi = 80)
ax.set_facecolor('#e6f2ed')
fig.patch.set_facecolor('#e6f2ed')cmap = cm.get_cmap('bwr', 10)   
clrs = [matplotlib.colors.rgb2hex(cmap(i)) for i in range(cmap.N)]ax=sns.barplot(y=top_10_accident_duration_df['Cases'], x=top_10_accident_duration_df['Duration'], palette='bwr')
ax1 = ax.twinx()
sns.lineplot(data = top_10_accident_duration_df, marker='o', x='Duration', y='Cases', color = 'white', alpha = 1)total = df.shape[0]
for i in ax.patches:ax.text(i.get_x(), i.get_height()+5000, \str(round((i.get_height()/total)*100, 2))+'%', fontsize=15,color='black')ax.set(ylim =(1000, 400000))
ax1.set(ylim =(1000, 500000))plt.title('\nMost Impacted Durations on the \nTraffic flow due to the Accidents \n', size=20, color='grey')ax1.axes.yaxis.set_visible(False)
ax.set_xlabel('\nDuration of Accident (HH:MM:SS)\n', fontsize=15, color='grey')
ax.set_ylabel('\nAccident Cases\n', fontsize=15, color='grey')for i in ['bottom', 'top', 'left', 'right']:ax.spines[i].set_color('white')ax.spines[i].set_linewidth(1.5)ax1.spines[i].set_color('white')ax1.spines[i].set_linewidth(1.5)ax.set_axisbelow(True)
ax.grid(color='white', linewidth=1.5)
ax.tick_params(axis='both', which='major', labelsize=12)
MA = mpatches.Patch(color=clrs[-3], label='Duration with Maximum\n no. of Road Accidents')
ax.legend(handles=[MA], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=clrs[-3], facecolor='#e6f2ed', edgecolor='#e6f2ed');

在这里插入图片描述
从上图可以推断,大部分(24.25%)道路交通事故对交通流量的影响持续了6小时。

year_df = pd.DataFrame(df.Start_Time.dt.year.value_counts()).reset_index().rename(columns={'index':'Year', 'Start_Time':'Cases'}).sort_values(by='Cases', ascending=True)
fig, ax = plt.subplots(figsize = (12,6), dpi = 80)ax=sns.barplot(y=year_df['Cases'], x=year_df['Year'], palette=['#9a90e8', '#5d82de', '#3ee6e0', '#40ff53','#2ee88e'])total = df.shape[0]
for i in ax.patches:ax.text(i.get_x()+0.2, i.get_height()-50000, \str(round((i.get_height()/total)*100, 2))+'%', fontsize=15,weight='bold',color='white')plt.ylim(10000, 900000)
plt.title('\nRoad Accident Percentage \nover past 5 Years in US (2016-2020)\n', size=20, color='grey')
plt.ylabel('\nAccident Cases\n', fontsize=15, color='grey')
plt.xlabel('\nYears\n', fontsize=15, color='grey')
plt.xticks(fontsize=13)
plt.yticks(fontsize=12)
for i in ['bottom', 'top', 'left', 'right']:ax.spines[i].set_color('white')ax.spines[i].set_linewidth(1.5)for k in ['top', 'right', "bottom", 'left']:side = ax.spines[k]side.set_visible(False)ax.set_axisbelow(True)
ax.grid(color='#b2d6c7', linewidth=1, axis='y', alpha=0.3)
MA = mpatches.Patch(color='#2ee88e', label='Year with Maximum\n no. of Road Accidents')
MI = mpatches.Patch(color='#9a90e8', label='Year with Minimum\n no. of Road Accidents')
ax.legend(handles=[MA, MI], prop={'size': 10.5}, loc='best', borderpad=1, labelcolor=['#2ee88e', '#9a90e8'], edgecolor='white');
plt.show()

在这里插入图片描述
从上图可以看出,在过去 5 年(2016-2020 年)中,美国的事故百分比显着增加,有 70% 仅发生在过去 2 年(2019 年、2020 年)内。

fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(nrows=3, ncols=2, figsize=(15, 10))
fig.suptitle('Accident Cases over the past 5 years in US', fontsize=20,fontweight ="bold", color='grey')
count = 0
years = ['2016', '2017', '2018', '2019', '2020']
colors = ['#77fa5a', '#ffff4d', '#ffab36', '#ff894a', '#ff513b']
for i in [ax1, ax2, ax3, ax4, ax5]:i.set_xlim([-125,-65])i.set_ylim([22,55])states.boundary.plot(ax=i, color='black');geo_df[geo_df['year']==int(years[count])].plot(ax=i, markersize=1, color=colors[count], marker='+', alpha=0.5)for j in ['bottom', 'top', 'left', 'right']:side = i.spines[j]side.set_visible(False)i.set_title(years[count] + '\n({:,} Road Accident Cases)'.format(list(year_df.Cases)[count]), fontsize=12, color='grey', weight='bold')i.axis('off')count += 1sns.lineplot(data = year_df, marker='o', x='Year', y='Cases', color = '#734dff', ax=ax6, label="Yearly Road Accidents");for k in ['bottom', 'top', 'left', 'right']:side = ax6.spines[k]side.set_visible(False)
ax6.xaxis.set_ticks(year_df.Year);
ax6.legend(prop={'size': 12}, loc='best', edgecolor='white');

在这里插入图片描述

accident_severity_df = geo_df.groupby(['year', 'Severity']).size().unstack()
ax = accident_severity_df.plot(kind='barh', stacked=True, figsize=(12, 6), color=['#fcfa5d', '#ffe066', '#fab666', '#f68f6a'],rot=0);ax.set_title('\nSeverity and Corresponding Accident \nPercentage for past 5 years in US\n', fontsize=20, color='grey');for i in ['top', 'left', 'right']:side = ax.spines[i]side.set_visible(False)ax.spines['bottom'].set_bounds(0, 800000);
ax.set_ylabel('\nYears\n', fontsize=15, color='grey');
ax.set_xlabel('\nAccident Cases\n', fontsize=15, color='grey');
ax.legend(prop={'size': 12.5}, loc='best', fancybox = True, title="Severity", title_fontsize=15, edgecolor='white');
ax.tick_params(axis='both', which='major', labelsize=12.5)
#ax.set_facecolor('#e6f2ed')for p in ax.patches:width, height = p.get_width(), p.get_height()x, y = p.get_xy()var = width*100/df.shape[0]if var > 0:if var > 4:ax.text(x+width/2, y+height/2-0.05, '{:.2f}%'.format(width*100/df.shape[0]),fontsize=12,  color='black', alpha= 0.8)elif var > 1.8 and var < 3.5:ax.text(x+width/2-17000, y+height/2-0.05, '{:.2f}%'.format(width*100/df.shape[0]),fontsize=12,  color='black', alpha= 0.8)      elif var>1.5 and var<1.8:ax.text(x+width/2+7000, y+height/2-0.05, '  {:.2f}%'.format(width*100/df.shape[0]),fontsize=12,  color='black', alpha= 0.8)elif var>1:ax.text(x+width/2-20000, y+height/2-0.05, '  {:.2f}%'.format(width*100/df.shape[0]),fontsize=12,  color='black', alpha= 0.8)else:ax.text(x+width/2+10000, y+height/2-0.05, '  {:.2f}%'.format(width*100/df.shape[0]),fontsize=12,  color='black', alpha= 0.8)

在这里插入图片描述过去4年(2017-2020年),美国高度严重的意外个案维持在1.55%至1.8%之间,仅在 2020 年发生的过去 5 年道路交通事故总数中,有 45% 是中度严重。

小结

本文旨在测试大型数据集在家用电脑读入内存的上限,但数据量有限未能测试出结果,顺便研究了一下显示美国地图的模块,很费时间,显示中文也有问题,最后只能用翻译软件转为英文给大家展示,感兴趣的朋友可以继续研究,反正我是要放弃这款了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/368184.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——树的基础概念

目录 1.树的概念 2.树的相关概念 3.树的表示 &#xff08;1&#xff09;直接表示法 &#xff08;2&#xff09;双亲表示法 (3)左孩子右兄弟表示法 4.树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 1.树的概念 树是一种非线性的数据结构&#xff0…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

数字人直播源码开发全攻略揭秘:如何搭建自己的数字人直播平台?

当前&#xff0c;数字人直播逐渐成为众多中小型企业线上带货和品牌宣传的不二之选&#xff0c;而艾媒研究数据也显示&#xff0c;超五成以上的被调查群体的企业使用过虚拟人技术&#xff0c;超三成被调查群体的企业计划使用虚拟人技术。在此背景下&#xff0c;越来越多的创业者…

CSS-实例-div 水平居中 垂直靠上

1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…

如何加密U盘?U盘加密软件推荐

U盘是我们最常用的移动存储设备&#xff0c;可以帮助我们随身携带大量数据。为了避免U盘数据泄露&#xff0c;我们需要加密保护U盘。那么&#xff0c;U盘该如何加密呢&#xff1f;下面小编就为大家推荐两款专业的U盘加密软件。 U盘超级加密3000 U盘超级加密3000是一款优秀的U盘…

Linux高并发服务器开发(十一)UDP通信和本地socket通信

文章目录 1 TCP和UDP的区别2 UDPAPI流程服务端流程客户端流程 代码服务端客户端 3 本地socket通信服务端客户端客户端代码 1 TCP和UDP的区别 2 UDP API 流程 服务端流程 客户端流程 代码 服务端 #include<sys/socket.h> #include<stdio.h> #include<arpa/in…

14-23 深度神经网络的主要架构(RNN/LSTM/CNN)

神经网络架构 神经网络的架构决定了这些网络如何运行&#xff0c;这是执行各种任务和扩展神经网络应用的关键因素&#xff0c;主要有两种方法&#xff1a;前馈神经网络和反馈神经网络。在本文中&#xff0c;在彻底分析每种方法之后&#xff0c;我们将对这两种架构进行深入比较…

工商业光伏项目如何快速开发?

一、前期调研与规划 1、屋顶资源评估&#xff1a;详细测量屋顶面积、承重能力及朝向&#xff0c;利用光伏业务管理软件进行日照分析和发电量预测&#xff0c;确保项目可行性。 2、政策与补贴研究&#xff1a;深入了解当地政府对工商业光伏项目的政策支持和补贴情况&#xff0…

亚马逊云服务器的价格真的那么贵吗?一年要花多少钱?

亚马逊Web服务&#xff08;AWS&#xff09;作为全球领先的云计算平台&#xff0c;其定价策略常常引起用户的关注。很多人可能会问&#xff1a;"AWS真的那么贵吗&#xff1f;"实际上&#xff0c;这个问题的答案并不是简单的"是"或"否"&#xff0c…

vue table表格 ( parseTime-格式化时间)

<el-table-column label"发布时间" width"420px" prop"bidPublishDatetime"><template slot-scope"scope"><span>{{ parseTime(scope.row.bidPublishDatetime, {y}-{m}-{d}) }}</span></template></…

宝塔Linux面板配置环境 + 创建站点

一、安装 &#xff08;1&#xff09;进入宝塔官网 https://www.bt.cn/new/index.html &#xff08;2&#xff09;点击“ 立即免费安装 ”&#xff0c;选择 Centos安装脚本 &#xff08;3&#xff09;进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …

Go语言工程管理

本文内容为Go工程创建和配置开发及简单程序示例。 目录 工程管理 GOPATH 配置GOPATH GOROOT 新建系统变量 配置go工程 添加go path 简单的程序实现 程序代码 开始运行 运行结果 内容解析 总结 工程管理 GOPATH go语言的项目&#xff0c;需要有特定的目录结构进行…

FMEA在大型光伏电站安全生产管理中的应用

一、FMEA概述 FMEA&#xff08;Failure Modes and Effects Analysis&#xff09;即失效模式和影响分析&#xff0c;是一种用于识别和分析产品或过程中潜在故障模式及其影响的方法。它通过对产品或过程中可能出现的故障模式进行系统性地梳理和分析&#xff0c;评估其可能的影响…

ORA-12170: TNS:连接超时

今天在oracle数据库搭建连接远程数据库的dbink时&#xff0c;发现搭建失败报错&#xff1a;ORA-12170: TNS:连接超时 但是是能够ping的通远程数据库地址的。 telnet 172.18.6.104 1522要求查看下创建dblink语句&#xff0c;也确认创建语句无误。 (DESCRIPTION (ADDRESS_LIST…

用Python轻松转换Markdown文件为PDF文档

Markdown&#xff0c;以其简洁的语法和易于阅读的特性&#xff0c;成为了许多作家、开发者和学生记录思想、编写教程或撰写报告的首选格式。然而&#xff0c;在分享或打印这些文档时&#xff0c;Markdown的纯文本形式可能无法满足对版式和布局的专业需求。而将Markdown转换为PD…

基于C++实现的EventLoop与事件驱动编程

一&#xff0c;概念介绍 事件驱动编程&#xff08;Event-Driven&#xff09;是一种编码范式&#xff0c;常被应用在图形用户界面&#xff0c;应用程序&#xff0c;服务器开发等场景。 采用事件驱动编程的代码中&#xff0c;通常要有事件循环&#xff0c;侦听事件&#xff0c;…

无线物联网题集

测试一 未来信息产业的发展在由信息网络向 全面感知和 智能应用两个方向拓展、延伸和突破。 各国均把 物联网作为未来信息化战略的重要内容,融合各种信息技术,突破互联网的限制,将物体接入信息网络。 计算机的出现,开始了第四次工业革命,开始了人机物的高度融合&#xff08;&…

数据库安全审计系统:满足数据安全治理合规要求

伴随着数据库信息价值以及可访问性提升&#xff0c;使得数据库面对来自内部和外部的安全风险大大增加&#xff0c;如违规越权操作、恶意入侵导致机密信息窃取泄漏&#xff0c;但事后却无法有效追溯和审计。 国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数…

微信小程序 typescript 开发日历界面

1.界面代码 <view class"o-calendar"><view class"o-calendar-container" ><view class"o-calendar-titlebar"><view class"o-left_arrow" bind:tap"prevMonth">《</view>{{year}}年{{month…