2014年在密苏里州一名叫做弗格森(Ferguson)的警察杀害了迈克尔·布朗(Michael Brown)后,美国开始了一场抗议警察暴力对待黑人的运动—Black Lives Matter(黑人的命也是命,简称BLM)。

2020年,在明尼阿波利斯警察Derek Chauvin杀害乔治·弗洛伊德(George Floyd)之后,BLM运动再次成为头条新闻,引起国际社会的进一步关注。

自2015年1月1日起,《华盛顿邮报》一直在整理一个数据库,其中记录了值班警员在美国发生的每起致命枪击事件。这个数据库里包含了死者的种族,年龄和性别,该人是否有武器,以及受害人是否正在遭受精神健康危机。

下面就让我们来使用这个数据集来进行数据分析。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。

请选择以下任一种方式输入命令安装依赖
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install numpy
pip install pandas
pip install plotly
pip install seaborn

本文译自:https://www.kaggle.com/edoardo10/fatal-police-shooting-eda-plotly-seaborn/data,如需数据请在公众号后台回复:警察枪击EDA

本文具备流程性,建议使用 VSCode 的 Jupiter Notebook 扩展,新建一个名为 test.ipynb 的文件,跟着教程一步步走下去。

2.代码与分析

首先,引入我们分析所需要使用的模块:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from datetime import datetime
import plotly.express as px
import plotly.graph_objects as go
import warnings
import plotly.offline as pyo
pyo.init_notebook_mode()
warnings.filterwarnings('ignore')
pd.set_option('display.max_columns', 500)
sns.set_style('white')
%matplotlib inline

打开需要分析的数据集:

df = pd.read_csv('./PoliceKillingsUS.csv', encoding='cp1252')
df.head()


时间特征

从这6年的月度数据来看,我们可以看到,在2015年上半年、2018年初和2020年第一季度,我们达到了每月超过100起致命事故的高峰。从月度来看,这种现象不具备明显的季节性。

df['date'] = df['date'].apply(lambda x: pd.to_datetime(x))
df['date'].groupby(df.date.dt.to_period('M')).count().plot(kind='line')

看看警察枪击案的事故是否具有周末特征:

count = df['date'].apply(lambda x: 'Weekday' if x.dayofweek < 5 else 'Weekend').value_counts(normalize=True)
f, ax = plt.subplots(1,1)
sns.barplot(x=count.index, y=count.values, ax=ax, palette='twilight')

显然,我们没有证据表明周末会发生更多的案件。

不过,如果细化到星期里的每一天,我们会发现周中发生案件的概率较高:

count = df['date'].apply(lambda x: x.dayofweek).value_counts(normalize=True).sort_index()
count.index = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']f, ax = plt.subplots(1,1)
sns.barplot(x=count.index, y=count.values, ax=ax, palette='twilight')
ax.set_title('Cases (%) for each day of the week');

接下来看看以下4个特征的分布:

signs_of_mental_illness:是否精神不稳定

threat_level:威胁等级

body_camera:警察是否带了随身摄像头

manner_of_death:死亡方式

count_1 = df['signs_of_mental_illness'].value_counts(normalize=True)
count_2 = df['threat_level'].value_counts(normalize=True)
count_3 = df['body_camera'].value_counts(normalize=True)
count_4 = df['manner_of_death'].value_counts(normalize=True)fig, axes = plt.subplots(2, 2, figsize=(8, 8), sharey=True)sns.barplot(x=count_1.index, y=count_1.values, palette="rocket", ax=axes[0,0])
axes[0,0].set_title('Signs of mental illness (%)')
sns.barplot(x=count_2.index, y=count_2.values, palette="viridis", ax=axes[0,1])
axes[0,1].set_title('Threat level (%)')
sns.barplot(x=count_3.index, y=count_3.values, palette="nipy_spectral", ax=axes[1,0])
axes[1,0].set_title('Body camera (%)')
sns.barplot(x=count_4.index, y=count_4.values, palette="gist_heat", ax=axes[1,1])
axes[1,1].set_title('Manner of death (%)');

我们可以看到,只有20%的案例受害者有精神不稳定的迹象;

只有10%的警察有随身摄像头;

70%的情况被宣布为危险状况;

死亡方式似乎不是一个有趣的变量,因为大多数案件都是“枪毙”;

美国的警察是否具有种族主义倾向?

count = df.race.value_counts(normalize=True)
count.index = ['White', 'Black', 'Hispanic', 'Asian', 'Native American', 'Other']f, ax = plt.subplots(1,1, figsize=(8,6))
sns.barplot(y=count.index, x=count.values, palette='Reds_r')
ax.set_title('Total cases for each race (%)');

从上图我们知道,大部分致命的枪击事件中,涉及最多的是白人,其次是黑人和西班牙裔。

但这个图表并没有考虑人种比例。参考2019年美国的种族比例,我们可以看到,美国黑人受害者的比例更高:

数据来源:
https://data.census.gov/cedsci/table?q=Hispanic%20or%20Latino&tid=ACSDP1Y2019.DP05&hidePreview=false

share_race_usa_2019 = pd.Series([60.0, 12.4, 0.9, 5.6, 18.4, 2.7], index=['White','Black','Native American','Asian','Hispanic','Other'])count_races = count / share_race_usa_2019
count_races = count_races.sort_values(ascending=False)
f, ax = plt.subplots(1,1, figsize=(8,6))sns.barplot(y=count_races.index, x=count_races.values, palette='Greens_r')
ax.set_title('Total cases for each race on total USA race percentage rate');

受害者的年龄

接下来看看受害者年龄的分布密度图:

sns.set_style('whitegrid')
fig, axes = plt.subplots(1, 1, figsize=(10, 8))
axes.xaxis.set_ticks(np.arange(0,100,10))sns.kdeplot(df[df.race == 'N'].age, ax=axes, shade=True, color='#7FFFD4')
sns.kdeplot(df[df.race == 'O'].age, ax=axes, shade=True, color='#40E0D0')
sns.kdeplot(df[df.race == 'B'].age, ax=axes, shade=True, color='#00CED1')
sns.kdeplot(df[df.race == 'H'].age, ax=axes, shade=True, color='#6495ED')
sns.kdeplot(df[df.race == 'A'].age, ax=axes, shade=True, color='#4682B4')
sns.kdeplot(df[df.race == 'W'].age, ax=axes, shade=True, color='#008B8B')legend = axes.legend_
legend.set_title("Race")
for t, l in zip(legend.texts,("Native", "Other", 'Black', 'Hispanic', 'Asian', 'White')):t.set_text(l)

由这些叠加的密度图可以看出:

对于亚裔和白人来说,大多数案件的受害者年龄都在30岁左右。

对于其他和印第安人来说,在大多数案件中,受害者大约28岁。

对于西班牙裔和黑人来说,大多数案件的受害者年龄都在25岁左右。

所以我们可以说,西班牙裔和黑人的年轻人,是被警察开枪射击的高危群体。

受害者性别比例

按常理,这种暴力事件的受害者一般都为男性,看看是不是这样:

fig = px.pie(values = df.gender.value_counts(normalize=True).values, names=df.gender.value_counts(normalize=True).index, title='Total cases gender (%)')
fig.update(layout=dict(title=dict(x=0.5),autosize=False, width=400, height=400))
fig.show()

果然如此,超过95%的受害者都为男性。

简单的EDA分析就是这些,除此之外,作者还分享了许多深层次的分析,不过并没有将数据分享出来,这里就不展示了。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

点击下方阅读原文可获得更好的阅读体验

Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

女性更不容易受害? Python 美国警察枪击案探索性数据分析相关推荐

  1. Python数据分析:美国警察枪击案EDA分析

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Python实用宝典 ,作者:肯德 前言 2014年在密苏里州一名叫做弗格森(Fer ...

  2. 数据分析可视化利器:python pandas-profiling 一行代码EDA 探索性数据分析

    文章大纲 1. 探索性数据分析 2.代码样例 3.效果 4.解决pandas profile 中文显示的问题 1. 探索性数据分析 数据的筛选.重组.结构化.预处理等都属于探索性数据分析的范畴,探索性 ...

  3. 【原创佳作】用Python自制了一张网页,一键自动生成探索性数据分析报告

    今天小编带领大家用Python自制一个自动生成探索性数据分析报告这样的一个工具,大家只需要在浏览器中输入url便可以轻松的访问,如下所示 第一步 首先我们导入所要用到的模块,设置网页的标题.工具栏以及 ...

  4. 美国警察开特斯拉追疑犯,时速飙到193公里,然后发现没电了...

    全世界只有3.14 % 的人关注了 青少年数学之旅 晚上11点,时速一度高达193公里!美国警察在湾区的一条州际公路上,对嫌犯实施追捕. 与往常不同的是,这位警员驾驶的是一辆特斯拉Model S,0到 ...

  5. 【转载必读】如何应对美国警察——留学生一定要看

    博主原先就读过这篇文章,最近对美国警察有了更深的理解,觉得非常必需重温一遍.. Hi officer, how can I help you? I know you are doing your jo ...

  6. 【Python】2020年美国新冠肺炎疫情数据分析

    2020年美国新冠肺炎疫情数据分析 一. 需求描述 二. 环境介绍 三. 数据来源描述 四. 数据上传及上传结果查看 五.数据处理过程描述 1.数据集下载 2.格式转换 3.启动Hadoop集群 4. ...

  7. 怎么才能更好的掌握Python这门语言?该怎么学呢?

    人工智能时代的到来,很多文章都会说这么一句:"不会Python,就不要说自己是程序员",这说的有点夸张了.但确实觉得目前Python这个语言值得学习,而且会Python是薪资高的程 ...

  8. 几个大神程序猿更喜欢用的Python编辑器!

    作为开发者来说,肯定都有自己比较喜欢使用的编辑器,有的人喜欢这个,有的人喜欢那个,还有的大神就喜欢用记事本,今天小千就来给大家介绍几个大神程序猿更喜欢用的Python编辑器. 1.Sublime Te ...

  9. 《自然》重磅新论文:女性更易患阿尔兹海默症,竟然是因为它!

    记不得刚说过的话,想不起刚做过的事,认不出陪伴身边的人--阿尔兹海默症作为全球最难治愈的疾病之一,有着"脑海中的橡皮擦"之称. 目前,全球至少有5000万的阿尔兹海默症患者.流行病 ...

最新文章

  1. 5月22日云栖精选夜读:PHP学习路线图
  2. 25个你可能不知道的Linux真相
  3. HTTP 协议 Host 请求头的作用
  4. 秘密开发一年多,解密奥运史上首个数字云徽章
  5. 中国移动基于ARM/x86服务器的Ceph性能对比
  6. USACO Training Section 1.1黑色星期五Friday the Thirteenth
  7. OpenStack精华问答 | OpenStack和CloudStack对比
  8. 【Java】深入理解Java随机数
  9. 如何在opengl用代码绘制英文_如何用AIPS直接绘制服装款式图(线稿)
  10. 我在 1969 年写代码
  11. LeetCode 29. Divide Two Integers
  12. 深入理解Java虚拟机2——内存管理机制及工具
  13. PSCS6下载和安装教程
  14. maya导入abc动画_如此导出ABC缓存,扩展秘籍(二)!!!
  15. 【BUgStation】RStudio rsession.ese无法找到入口通过更新R解决
  16. 不同终端通信用c语言实现,采用蓝牙技术的北斗终端通信模块的设计
  17. linux在root安装软件,避免使用root安装软件
  18. C++核心准则边译边学-I.27 考虑使用指向实现的指针技术获得稳定的ABI
  19. 文字翻译软件-文字批量翻译转换器免费
  20. 【C语言】升级版猜数字小游戏(含简单、中等、困难模式并且支持战绩查询以及界面美化)

热门文章

  1. 多线程下载管理器:Neat Download Manager Mac
  2. Nowa Flutter开发教程之 07 Nowa 可视化编程
  3. CORS error错误 has been blocked by CORS policy前端请求浏览器出错
  4. 名悦集团:新手买新车有些注意事项
  5. 计算机组成位模式,Pentium的工作模式-计算机组成原理与汇编语言-电子发烧友网站...
  6. 三维GIS系统在城市发展中的应用
  7. PPT设计思维干货分享(二)
  8. 天池比赛-01-用随机森林进行信贷违约预测-Baseline
  9. 软件测试的前景怎么样?自学软件测试要怎么学?
  10. 二叉树的顺序存储与遍历