作者:邬书豪 ,车联网数据挖掘工程师 ,R语言中文社区专栏作者。微信ID:wsh137552775
知乎专栏:https://www.zhihu.com/people/wu-shu-hao-67/activities
数据集:自1966~2017年发生在美国的大规模枪击案(死伤人数在三人以上的枪击案)
#加载此次所要用到的包
library(lubridate)#日期处理
library(data.table)#更改数据框的格式,使之更为易用
library(dplyr)#包含诸多常用函数
library(ggplot2)#绘图
library(stringr)#对文本进行处理
library(tidyr)#对数据分类汇总
library(ggmap)#进行地图绘制
#设置工作路径
setwd("D:/US Mass Shootings")
#导入数据
shoot
shoot数据集中共有398行,13个变量 ID:各案件编号
Title:案件名称
Location:案件发生所在的州
Date:案件发生日期,时间跨度:1966-08-01 ~ 2017-10-01
Summary:对案件的概述,如枪手名字,年龄,事件经过等
Fatalities:该次案件中死亡人数
Injured:该次案件中受伤人数
Total:该次案件中总计伤亡人数
Mental:枪手是否有精神问题
Race:枪手的种族/肤色,有White、Black、Asian等等
Gender:枪手性别
Latitude:纬度
Longitude经度
由于第一条关于Las vegas枪击案不完善,据最近新闻报道对其进行修改补充
shoot$Injured[shoot$ID==1]
数据集(Gender、Mental、Race)变量下的观测值命名较为混乱,咱们将它修补统一哈!
shoot$Gender[shoot$Gender=="M"]
通过浏览对比发现一部分事件存在重复,即Summary不同但所描述事件过程基本一样,经纬度及伤亡人数上区别很小,可能是数据集录入之初产生的错误,故去重!
shoot
按年份、月份、性别以及精神问题进行可视化分析!
shoot$Date
按照年份统计枪击频率 枪击案发生频率连年递增,尤其近几年来显著增多
#按照月份统计枪击频率
hist(month(shoot$Date),xlab="Month",ylab="Count",main="the distribution of month")
发生在一月份的枪击案的频率较其它月份相对显著
按照月份统计枪击频率 #将plot()函数绘制的四幅图形组合在一个大的1×2的图中,按照性别及种族统计枪击频率
par(mfrow=c(1,2))
barplot(table(shoot$Gender),xlab = "Gender",ylab="Count",main="the distribution of Gender")
barplot(table(shoot$Mental),xlab = "Mental Health Issue",ylab="Count",main="the distribution of mental")
按照性别及种族统计枪击频率 绝大多数枪手都是男性
在已知的枪手中,过半数人有精神问题
#增加一个Level变量,按照死伤人数多少对案件划分严重程度。
shoot$Level =5 & shoot$Total<=10] 10]
统计各Level的频次
本数据集只包含死伤三人及以上的数据集,5至10人发生频次较高。然而论死伤总人数,超过10人死伤的案件虽然只占总体案件的约20%,然而累计死伤人数却占了近60%。
#精神问题与伤亡,subset()函数抽取出已知枪手精神问题的部分
mental
从前两个与第三个箱线图的比较来看,被杀死的受害者中,明显被有精神问题杀害的人居多!
#先用tapply()函数计算被是否患有精神问题的枪手导致的伤亡累计,然后绘图!
barplot(tapply(mental$Total,mental$Mental,sum),main="Shooter with mental health issue",col = "lightblue",ylab = "No. of Casualties")
有精神问题的枪手导致的伤亡甚至占到了三分之二。
#分析枪手所属种族所占比例
shooter
shooter
枪手里面,白人以及黑人占绝大多数!!而亚裔枪手只占一小丢丢!
#cut()函数将变量year按值域切割为多个区间,赋值为新变量yearcut,对年份进行分段
shoot$yearcut
随年份的改变枪手种族比例的变化 在2012年以前枪手主要是白人,最近5年来黑人以及其它族裔的种族枪手所占比例提升较大!
#年份与死伤人数统计
shoot_year2% summarise(Sum=sum(victim))
ggplot(shoot_year2,aes(yearcut,Sum,fill=type))+geom_bar(stat="identity",position = "dodge")
年份与死伤人数统计
在2012年以前,死亡人数一直保持在与受伤人数相差无几的状态下,而2012年以后受伤人群-大幅增加!~~~~~其主要原因在于2017-10-01日发生的拉斯维加斯露天音乐会枪击案!!!!~~~~死59人,伤527人,实乃美国枪击案件之最也!!!
~~~~看到这幅图,我们无比震惊!!!仿佛可以听到拉斯维加斯露天音乐会枪击案现场“哒哒哒哒哒哒哒哒哒哒哒哒”的子弹声!!!
#各年份中各Level所占比例
ggplot(shoot,aes(yearcut,fill=Level))+geom_bar(position = "fill")+ggtitle("How year impact Level")
各年份中各Level所占比例 综上~虽然近5年来死伤人数远超以往!!
但超过10人死伤的严重枪击案反而只占很小一部分,更反映出小规模枪击案的频繁!
#从文本概述中运用正则表达式抽取出年龄
tem % select(ID,age) %>% mutate(agecut=cut(te$age,breaks = 10*(1:7))) #将年龄分段
shoot_age
年龄分布 已知年龄的枪手中,50岁以下占主要比例,青年与中年人的比例不相上下! #绘制出各年龄段中是否有精神问题的比例
ggplot(shoot_age,aes(agecut,fill=Mental))+geom_bar(position = "fill")+ggtitle("The relationship between Age and Mental")
各年龄段中是否有精神问题的比例 已知年龄的犯罪分子中,有精神问题者居多,其中30岁至40岁的人比例略大一些!
#年龄与种族的关系
ggplot(shoot_age,aes(agecut,fill=Race))+geom_bar(position="fill")+ggtitle("the relationhship between Age and Race")
在20岁以下及50岁以上,白人占比都超过六成;黑人枪手则主要集中于20岁至50岁的年龄段
ggplot2包它精致唯美博大精深,万言不如一图!
掌握ggplot2包可视化技巧对于数据分析至关重要!
就像一门顶尖 的厨师,它的厨艺技能绝对不是看来跟师傅看来的,而是十年如一日的孜孜不倦的练习!学习ggplot2可视化也一样,需要孜孜不倦的对大量数据集进行练习!
公众号后台回复“枪击 ”获取数据集下载链接。