千家信息网

Python分析美国警察枪击案EDA

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,本篇内容主要讲解"Python分析美国警察枪击案EDA",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python分析美国警察枪击案EDA"吧!1.准备开始
千家信息网最后更新 2024年09月21日Python分析美国警察枪击案EDA

本篇内容主要讲解"Python分析美国警察枪击案EDA",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python分析美国警察枪击案EDA"吧!

1.准备

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

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

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


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

所需依赖:

pip install numpypip install pandaspip install plotlypip install seaborn

2.代码与分析

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

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport numpy as npfrom datetime import datetimeimport plotly.express as pximport plotly.graph_objects as goimport warningsimport plotly.offline as pyopyo.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个特征的分布:

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

威胁等级:威胁等级

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

way_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 (%)');
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_2019count_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)

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

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

对于而言和白人而言,大多数案件的受害者年龄都在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()

到此,相信大家对"Python分析美国警察枪击案EDA"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0