R-交通事故数据分析报告

引言

该数据来源于kaggle网站中的一个项目,其原数据集(US_Accidents_Dec20)是一个数据量49列,共400多万数据量包含2016-2020年交通事故信息。
本文的目标是对这些数据进行统计分析,探寻发生事故最多的州,并探查什么时候容易发生事故,事故发生时天气状况,并对此做出可视化展示:总结分析所得信息,讲述美国发生事故的总体情况,找出影响事故发生以及影响事故严重程度的因子;最后对事故的严重程度进行预测分析。

数据基本分析

缺失值处理

查看原始数据的缺失值数量结果如下:

library('dplyr')
library('DMwR')
library('ggplot2')
library('lubridate')
#install.packages('Rmisc')
library(Rmisc)
library(mice)
#install.packages('VIM')
library(VIM)
library(zoo)
library(reshape2)
#导入数据
data = read.csv("D:/R数据/US_Accidents_Dec20.csv")
####----------------数据预处理-----------------------
head(data)
#查看数据的变量名
colnames(data) 
#查看数据的结构(4232541,49)
dim(data)
#查看数据中含有空值的列
colSums(is.na(data))
table(is.na(data))
#可以看到TMC含1516064;End_Lat含2716477;End_Lng含2716477
#Number含2687849;Temperature.F.89900;Wind_Chill.F.1896001;
#Humidity...95467;Pressure.in.76384;Visibility.mi.98668;
#列变量可视化展示
miscol = colSums(is.na(data))##列变量缺失值计数
miscol = sort(miscol,decreasing = T)  ##降序排列
miscol = miscol[miscol > 0]
p <- barplot(miscol,col = 'pink',axisnames=F,ylim=c(0,2000000),main = '列变量缺失值数量展示')
axis(side=1,p,labels = F)
labs <- names(miscol)
text(cex=0.8,x=p-0.25,y=-0.1,labs,xpd=T,srt=45,adj = c(1,1))

在这里插入图片描述
首先,本文将变量值缺失个数多于总个数的20%的交通事故案例去除,此处共去除22913个案例;而后,因街道编号、风寒指数、风速、降水量的缺失值过多,所以将这几个变量移除;然后,移除与事故发生原因不相关变量;最后,采用均值插补的方法对温度、湿度、气压和能见度四个变量的缺失值进行插补,最终保留了27个变量。

#去除空值占比过大的行
r1 <- rowSums(is.na(data))/ncol(data) >= 0.2
#r1是缺失值大于0.2的行
data1 <- data[!r1, ]
rm(r1)
colSums(is.na(data1))
dim(data1)    #4209628      
#将空值过多以及对研究影响因素作用不大的变量去除
data2 <- subset(data1, select = -c(ID,Source,TMC,End_Time,Zipcode,Timezone,
                                   End_Lat,End_Lng,Number,
                                   Distance.mi.,Description,Airport_Code,
                                   Weather_Timestamp,Wind_Chill.F.,
                                   Civil_Twilight,Nautical_Twilight,
                                   Astronomical_Twilight))

#补齐缺失值
##用均值插补温度湿度气压能见度
fun1 <- function(x) {
   
  x[is.na(x)] <- mean(x, na.rm = TRUE)
}
data2$Temperature.F. <- sapply(data2$Temperature.F., fun1)
data2$Humidity... <- sapply(data2$Humidity..., fun1)
data2$Pressure.in. <- sapply(data2$Pressure.in., fun1)
data2$Visibility.mi. <- sapply(data2$Visibility.mi., fun1)
##使用0填补降水量的缺失值
data2$Precipitation.in.[data1$Precipitation.in. %>% is.na()] <- 0
##测试各个变量之间有无显著线性关系
symnum(cor(data1 %>% select(Severity,Start_Lat,Start_Lng,Distance.mi.,Temperature.F.,Humidity...,Pressure.in.,
                            Pressure.in.,Visibility.mi.,Wind_Speed.mph.,Precipitation.in.), use="complete.obs"))
##对风速使用前值插补法
data2$Wind_Speed.mph.[1:5] <- zoo::na.locf(data1$Wind_Speed.mph.[1:5],fromLast = T)
data2$Wind_Speed.mph. <- zoo::na.locf(data1$Wind_Speed.mph.)
head(data2)
#table(is.na(data2$Precipitation.in.))

对27个变量的解释如下:

“Severity” 显示事故的严重程度1-4 ;
“Start_Time” 在本地时区事故的开始时间;
“Street” 街道名称;
“Side” 事故发生在哪一侧(L/R);
“City” 城市名;
“County” 乡镇名;
“State” 州名;
“Country” 国家US ;
“Temperature.F.” 温度;
“Humidity…

  • 12
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值