• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞java代码 3年前 (2022-05-21) 100次浏览 已收录 0个评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于Python实用宝典 ,作者:肯德

 

前言

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

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

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

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

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip。

此外,推荐大家用VSCode编辑器,因为它可以在编辑器下面的终端运行命令安装依赖模块

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

 

Windows环境下打开Cmd(开始-运行-CMD),苹果系统环境下请打开Terminal(command +空格输入Terminal),输入命令安装依赖:

所需依赖:

<span>pip install numpy
pip install pandas
pip install plotly
pip install seaborn</span>
www#gaodaima.com来源gaodai.ma#com搞##代!^码@网搞代码

 

 

本文译自:https://www.kaggle.com/edoardo10/fatal-police-shooting-eda-plotly-seaborn/data

2.代码与分析

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

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

 

 

需要分析的数据集:

df = pd.read_csv(<span>"</span><span>./PoliceKillingsUS.csv</span><span>"</span>, encoding=<span>"</span><span>cp1252</span><span>"</span><span>)
df.head()</span>

 

 

 

时间特征

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

df[<span>"</span><span>date</span><span>"</span>] = df[<span>"</span><span>date</span><span>"</span>].apply(<span>lambda</span><span> x: pd.to_datetime(x))
df[</span><span>"</span><span>date</span><span>"</span>].groupby(df.date.dt.to_period(<span>"</span><span>M</span><span>"</span>)).count().plot(kind=<span>"</span><span>line</span><span>"</span>)

 

 

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

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

 

 

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

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

count = df[<span>"</span><span>date</span><span>"</span>].apply(<span>lambda</span> x: x.dayofweek).value_counts(normalize=<span>True).sort_index()
count.index </span>= [<span>"</span><span>Mon</span><span>"</span>,<span>"</span><span>Tue</span><span>"</span>,<span>"</span><span>Wed</span><span>"</span>,<span>"</span><span>Thu</span><span>"</span>,<span>"</span><span>Fri</span><span>"</span>,<span>"</span><span>Sat</span><span>"</span>,<span>"</span><span>Sun</span><span>"</span><span>]

f, ax </span>= plt.subplots(1,1<span>)
sns.barplot(x</span>=count.index, y=count.values, ax=ax, palette=<span>"</span><span>twilight</span><span>"</span><span>)
ax.set_title(</span><span>"</span><span>Cases (%) for each day of the week</span><span>"</span>);

 

 

 

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

精神疾病的征兆:是否精神障碍

威胁等级:威胁等级

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

way_of_death:死亡方式

 

count_1 = df[<span>"</span><span>signs_of_mental_illness</span><span>"</span>].value_counts(normalize=<span>True)
count_2 </span>= df[<span>"</span><span>threat_level</span><span>"</span>].value_counts(normalize=<span>True)
count_3 </span>= df[<span>"</span><span>body_camera</span><span>"</span>].value_counts(normalize=<span>True)
count_4 </span>= df[<span>"</span><span>manner_of_death</span><span>"</span>].value_counts(normalize=<span>True)

fig, axes </span>= plt.subplots(2, 2, figsize=(8, 8), sharey=<span>True)

sns.barplot(x</span>=count_1.index, y=count_1.values, palette=<span>"</span><span>rocket</span><span>"</span>, ax=<span>axes[0,0])
axes[0,0].set_title(</span><span>"</span><span>Signs of mental illness (%)</span><span>"</span><span>)
sns.barplot(x</span>=count_2.index, y=count_2.values, palette=<span>"</span><span>viridis</span><span>"</span>, ax=axes[0,1<span>])
axes[0,</span>1].set_title(<span>"</span><span>Threat level (%)</span><span>"</span><span>)
sns.barplot(x</span>=count_3.index, y=count_3.values, palette=<span>"</span><span>nipy_spectral</span><span>"</span>, ax=axes[1<span>,0])
axes[</span>1,0].set_title(<span>"</span><span>Body camera (%)</span><span>"</span><span>)
sns.barplot(x</span>=count_4.index, y=count_4.values, palette=<span>"</span><span>gist_heat</span><span>"</span>, ax=axes[1,1<span>])
axes[</span>1,1].set_title(<span>"</span><span>Manner of death (%)</span><span>"</span>);

 

 

 

我们可以看到,只有20%的案例受害者有精神残疾的限额;

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

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

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

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

count = df.race.value_counts(normalize=<span>True)
count.index </span>= [<span>"</span><span>White</span><span>"</span>, <span>"</span><span>Black</span><span>"</span>, <span>"</span><span>Hispanic</span><span>"</span>, <span>"</span><span>Asian</span><span>"</span>, <span>"</span><span>Native American</span><span>"</span>, <span>"</span><span>Other</span><span>"</span><span>]

f, ax </span>= plt.subplots(1,1, figsize=(8,6<span>))
sns.barplot(y</span>=count.index, x=count.values, palette=<span>"</span><span>Reds_r</span><span>"</span><span>)
ax.set_title(</span><span>"</span><span>Total cases for each race (%)</span><span>"</span>);

 

 

 

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

但这个图表并没有考虑人种比例。参考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=[<span>"</span><span>White</span><span>"</span>,<span>"</span><span>Black</span><span>"</span>,<span>"</span><span>Native American</span><span>"</span>,<span>"</span><span>Asian</span><span>"</span>,<span>"</span><span>Hispanic</span><span>"</span>,<span>"</span><span>Other</span><span>"</span><span>])

count_races </span>= count /<span> share_race_usa_2019
count_races </span>= count_races.sort_values(ascending=<span>False)
f, ax </span>= plt.subplots(1,1, figsize=(8,6<span>))

sns.barplot(y</span>=count_races.index, x=count_races.values, palette=<span>"</span><span>Greens_r</span><span>"</span><span>)
ax.set_title(</span><span>"</span><span>Total cases for each race on total USA race percentage rate</span><span>"</span>);

 

 

受害者的年龄

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

sns.set_style(<span>"</span><span>whitegrid</span><span>"</span><span>)
fig, axes </span>= plt.subplots(1, 1, figsize=(10, 8<span>))
axes.xaxis.set_ticks(np.arange(0,</span>100,10<span>))

sns.kdeplot(df[df.race </span>== <span>"</span><span>N</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#7FFFD4</span><span>"</span><span>)
sns.kdeplot(df[df.race </span>== <span>"</span><span>O</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#40E0D0</span><span>"</span><span>)
sns.kdeplot(df[df.race </span>== <span>"</span><span>B</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#00CED1</span><span>"</span><span>)
sns.kdeplot(df[df.race </span>== <span>"</span><span>H</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#6495ED</span><span>"</span><span>)
sns.kdeplot(df[df.race </span>== <span>"</span><span>A</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#4682B4</span><span>"</span><span>)
sns.kdeplot(df[df.race </span>== <span>"</span><span>W</span><span>"</span>].age, ax=axes, shade=True, color=<span>"</span><span>#008B8B</span><span>"</span>)

 

<code><span class="hljs-string"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-string">

legend = axes.legend_
legend.set_title(<span class="hljs-string">"Race")
<span class="hljs-keyword">for t, l in zip(legend.texts,(<span class="hljs-string">"Native", <span class="hljs-string">"Other", <span class="hljs-string">"Black", <span class="hljs-string">"Hispanic", <span class="hljs-string">"Asian", <span class="hljs-string">"White")):
    t.set_text(l)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

 

 

由这些叠加的密度图可以抛光:

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

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

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

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

受害者性别比例

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

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

 

 

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python数据分析:美国警察枪击案EDA分析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址