当前位置: 首页 > 后端技术 > Python

Python 美国警察枪击案EDA分析

时间:2023-03-26 14:16:01 Python

UnitedStatesMatter(BlackLivesMatter,简称BLM)警察枪击事件的PythonEDA分析。2020年,继乔治·弗洛伊德被明尼阿波利斯警官德里克·肖文杀害后,BLM运动再次登上头条,进一步引起国际关注。自2015年1月1日起,《华盛顿邮报》一直在编制一个数据库,记录美国值班警官发生的每一起致命枪击事件。该数据库包括死者的种族、年龄和性别、死者是否携带武器以及受害者是否患有精神健康危机。让我们使用这个数据集进行数据分析。1.在开始之前,您需要确保您的计算机上已经成功安装了Python和pip。如果没有,请访问这篇文章:超详细的Python安装指南进行安装。如果使用Python进行数据分析,可以直接安装Anaconda:Python数据分析挖掘的好帮手——Anaconda,内置Python和pip。另外,推荐大家使用VSCode编辑器,因为可以在编辑器下方的终端中运行命令安装依赖模块:Python编程最佳搭档——VSCode详解指南。这篇文章是面向过程的。推荐使用VSCode的JupiterNotebook扩展,新建文件test.ipynb,按照教程一步步操作。Windows环境打开Cmd(开始-运行-CMD),苹果系统环境打开Terminal(command+空格输入Terminal),输入命令安装依赖:所需依赖:`pipinstallnumpy``pipinstallpandas``pipinstallplotly``pipinstallseaborn`本文翻译自:https://www.kaggle.com/edoard...,如需资料请在公众号后台回复:PoliceshotEDA。2、代码与分析首先导入我们分析需要的模块:`importpandasaspd``importmatplotlib.pyplotasplt``importseabornassns``importnumpyasnp``fromdatetimeimportdatetime``importplotly.expressaspx``importplotly.graph_objectsasgo``importwarnings``importplotly.offlineaspyo``pyo.init_notebook_mode()``warnings.filterwarnings('ignore')``pd.set_option('display.max_columns',500)``sns.set_style('white')``%matplotlibinline`打开待分析的数据集:`df=pd.read_csv('./PoliceKillingsUS.csv',encoding='cp1252')``df.head()`**时间特征**从这6年的月度数据可以看出,在2015年上半年、2018年初、2020年第一季度,我们达到了超过一个峰值100起致命事故。从月度来看,这种现象不具有明显的季节性。`df['date']=df['date'].apply(lambdax:pd.to_datetime(x))``df['date'].groupby(df.date.dt.to_period('M')).count().plot(kind='line')`查看警察枪击事件是否具有周末特征:`count=df['date'].apply(lambdax:'Weekday'ifx.dayofweek<5else'Weekend').value_counts(normalize=True)``f,ax=plt.subplots(1,1)``sns.barplot(x=count.index,y=count.values,ax=ax,palette='暮光之城')`显然,我们没有证据表明周末会有更多病例。但是如果细化到一周中的每一天,我们会发现case发生在周中的概率更高:`count=df['date'].apply(lambdax: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(%)foreachdayoftheweek');`接下来看以下4个特征的分布:signs\_of\_mental\_illness:是否精神不稳定\_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('精神疾病的迹象(%)')``sns。barplot(x=count_2.index,y=count_2.values,palette="viridis",ax=axes[0,1])``axes[0,1].set_title('威胁等级(%)')``sns.barplot(x=count_3.index,y=count_3.values,palette="nipy_spectral",ax=axes[1,0])``axes[1,0].set_title('随身相机(%)')``sns.barplot(x=count_4.index,y=count_4.values,palette="gist_heat",ax=axes[1,1])``axes[1,1].set_title('死亡方式(%)');`我们可以看到,只有20%的案例受害者有精神不稳定的迹象;只有10%的警察拥有随身摄像头;70%的情况被宣布为危险;死亡方式似乎不是一个有趣的变量,因为大多数病例都是“枪杀”的;美国警察是种族主义者吗?`count=df.race.value_counts(normalize=True)``count.index=['White','Black','Hispanic','Asian','NativeAmerican','Other']``f,ax=plt.subplots(1,1,figsize=(8,6))``sns.barplot(y=count.index,x=count.values,palette='Reds_r')``ax.set_title('Totalcases每场比赛(%)');`从上图我们知道,大多数致命枪击事件涉及白人,其次是黑人和西班牙裔,但这张图没有考虑种族比例。参考美国2019年的种族比例,我们可以看到,美国的黑人受害者比例更高:数据来源:https://data.census.gov/cedsc...`share_race_usa_2019=pd.系列([60.0,12.4,0.9,5.6,18.4,2.7],index=['White','Black','NativeAmerican','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('TotalcasesforeachraceontotalUSAracepercentagerate');`受害人年龄接下来看受害人年龄分布密度图受害者:`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")``fort,linzip(legend.texts,("Native","Other",'Black','Hispanic','Asian','White'))):``t.set_text(l)`从这些叠加的密度图中可以看出:对于亚洲人和白人来说,Victimsinmost病例年龄在30岁左右。对于其他人和印度人来说,大多数情况下受害者的年龄在28岁左右。对于西班牙裔和黑人,大多数情况下的受害者都是25多岁。所以我们可以说西班牙裔和黑人年轻人被警察枪杀的风险很高。受害者的性别比例是常识。这种暴力的受害者通常是男性。看看是不是这样:`fig=px.pie(values=df.gender.value_counts(normalize=True).values,names=df.gender.value_counts(normalize=True).index,title='Totalcasesgender(%)')``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实战宝典