当前位置: 苏里南 >> 国家象征 >> 我分析了世界30年自杀数据,男人自杀是女
是的,在数据分析前,我的估计是女人更容易自杀,因为我觉得女人整体应该比男人更无助,她们选择轻生的概率可能会更高一点。
另外年轻人容易冲动想不开,被女朋友骂了一顿就上天台,所以自杀率也可能高点,毕竟老人大风大浪都过来了,不太会高龄自杀。但是分析结果却大出所料:
男人更容易自杀,老人容易自杀。
这次分享依然选择Python工具,不过可视化的方式做了一下变化,原因是我装的pyecharts不能画双坐标图,不知道为什么。所以这次的可视化用了三种方式,包括pyecharts,matplotlib,还有seaborn。
数据准备
1、数据说明
这份数据来源于世界卫生组织,有相当的权威性。记录了年至年个国家(没有中国)的自杀数据,但是年的数据估计不全,感觉有异常,所以在分析的时候我选择了屏蔽。
2、数据概览
importnumpyasnpimportpandasaspdfrompyechartsimportBar,WordCloud,Piedf=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df.head()
可以看到,这份数据字段比较简单,主要包括国家,年份,年龄段,自杀人数,每10万人自杀人数,人均GDP等
importnumpyasnpimportpandasaspdfrompyechartsimportBar,WordCloud,Piedf=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df.describe()
然后我们用describe()函数对数据做了一下描述性分析,可以大致看到整体数据情况,对所要分析的数据做到心里有数。
对数据有了一定程度熟悉后,我们现在开始正式进行分析工作。
数据分析
1、男人更容易自杀
importnumpyasnpimportpandasaspdfrompyechartsimportBar,WordCloud,Pie,Linedf=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df=df[df[year]!=]#男性自杀数据df1=df[df[sex]==male][[year,sex,suicides_no]]df1=df1.pivot_table(suicides_no,index=year,aggfunc=sum).reset_index()df1=df1.rename(columns={suicides_no:男性自杀})#女性自杀数据df2=df[df[sex]==female][[year,sex,suicides_no]]df2=df2.pivot_table(suicides_no,index=year,aggfunc=sum).reset_index()df2=df2.rename(columns={suicides_no:女性自杀})df=pd.merge(df1,df2,on=year)line=Line(title="自杀年度分布",width=,height=)line.add(name="男性",x_axis=df[year],y_axis=df[男性自杀],line_width=3,line_color=red)line.add(name="女性",x_axis=df[year],y_axis=df[女性自杀],yaxis_min=0,yaxis_max=,is_xaxis_boundarygap=False,is_datazoom_show=True,line_width=2,line_color=cyan)line.render(自杀年度分布.html)line
看数据可以知道,在这个国家中男性自杀数量,是女性的4倍左右。
每年大概有25万人自杀,那么全球估算每年有50万人左右自杀。
新世纪后,自杀人数出现缓慢下降。
所以各位还是要多关心一下男人的心理健康问题,虽然男人很多时候看起来坚强,但是实际上内心还是很脆弱的。
2、老人更容易自杀
importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompyechartsimportBar,WordCloud,Pie,Line#1、导入数据df=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)#2、选择数据并重命名df=df[[age,sex,suicides/kpop]].rename(columns={suicides/kpop:自杀})df=df.groupby([sex,age]).mean().reset_index()#3、将年龄分段后的years去掉df[age]=df[age].str.replace(years,)#4、对年龄段进行赋值排序values={5-14:0,15-24:1,25-34:2,35-54:3,55-74:4,75+:5}df[sort]=df[age].map(values)#5、把年龄段按从小到大的顺序排好df.sort_values(by=sort,inplace=True)df.drop(sort,axis=1,inplace=True)#删除列,axis必须等于1#6、筛选出男性女性的自杀数据male_data=df[df[sex]==male][自杀].apply(lambdax:format(x,.2f))female_data=df[df[sex]==female][自杀].apply(lambdax:format(x,.2f))#7、数据可视化bar=Bar(title="平均自杀人数年龄分布",width=,height=)bar.add(name="男性",x_axis=df[age].unique(),y_axis=male_data,line_width=3,line_color=red,is_label_show=True)bar.add(name="女性",x_axis=df[age].unique(),y_axis=female_data,yaxis_min=0,yaxis_max=40,is_xaxis_boundarygap=False,is_datazoom_show=True,line_width=2,line_color=cyan,is_label_show=True)bar.render(平均自杀人数年龄段分布.html)bar
从数据可以看出,年龄越大,人就越容易自杀,尤其是75岁以上的老年人,自杀倾向更明显。
从性别方面看,男性在老年阶段,自杀率远高于女性。而且这种差距,随着年龄增大而越来越大。
importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompyechartsimportBar,WordCloud,Pie,Lineimportseabornassnsdf=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df=df[suicides_no].groupby([df[generation]]).sum().reset_index()df=df.sort_values(by=suicides_no,ascending=False)sns.set(style="white",palette="muted",color_codes=True)plt.rcParams[font.sans-serif]=[SimHei]plt.figure(figsize=(10,6))sns.barplot(x="generation",y="suicides_no",data=df).set_title("不同年代出生人口的自杀情况",loc=left,size=18)plt.xticks(rotation=60,size=15)plt.yticks(size=15)plt.xlabel(年代情况,size=15)plt.ylabel(自杀人数,size=15)sns.despine()plt.show()
从这个图也可以看出年纪越大,自杀的人越多,你看最多的那个是婴儿潮时期出生的人,现在都已经六七十岁了;而Z一代是指90后,自杀的人非常少。
3、穷人更容易自杀
importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompyechartsimportBar,WordCloud,Pie,Lineimportseabornassnsdf=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)#1、数据筛选与columns重命名df=df[[year,country,gdp_per_capita(),suicides/kpop]]df=df[df[year]!=]df=df.rename(columns={suicides/kpop:自杀人数,gdp_per_capita():人均GDP})#2、算出每个国家GDP排名df1=df.groupby(country).mean().sort_values(by=人均GDP,ascending=False).reset_index()#3、筛选数据前50和后50的国家Front50=list(df1[:50][country])Back50=list(df1[-50:][country])#4、做出贫富国家的集合,用列表形式group_countries=Front50+Back50df=df.loc[df[country].isin(group_countries)]#5、对贫富国家进行标签设置Label_countries={country:RichforcountryinFront50}Label_countries.update({country:PoorforcountryinBack50})df[country]=df[country].map(Label_countries)#6、数据可视化sns.set()sns.set(style="white",palette="muted",color_codes=True)plt.rcParams[font.sans-serif]=[SimHei]line_plot=sns.lineplot(x=year,y=自杀人数,data=df,hue=country,ci=None)plt.legend(labels=[Rich,Poor])#图例plt.rcParams["figure.figsize"]=(10,6)#调整画布大小plt.title(发达国家与发展中国家的自杀率比较,loc=left,size=18)plt.xlabel(年份,size=15)plt.ylabel(每10万人自杀人数,size=15)plt.xticks(size=15)plt.yticks(size=15)sns.despine()plt.show()
为了能够看出贫富情况对自杀率的影响,我特意把这个国家按照GDP情况分为了两类,前50名打上了“rich”标签;后50个国家打上了“poor”标签。
结果很明显,贫困国家的自杀率普遍高于富裕国家。从这个可以看出,经济因素是影响自杀的重要因素。
下面的数据也是本结论的一个佐证。
4、人均GDP越高,自杀率越低
importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompyechartsimportBar,WordCloud,Pie,Line#1、导入数据,同时对数据进行筛选df=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df=df[[year,gdp_per_capita(),suicides/kpop]]df=df[df[year]!=]df=df.rename(columns={suicides/kpop:自杀人数,gdp_per_capita():人均GDP})#2、用分组方法算出每个年度的自杀人数与GDP情况df=df.groupby([year]).mean().reset_index()#3、可视化过程plt.rcParams[font.sans-serif]=[SimHei]plt.subplot(1,1,1)x=df[year]y1=df[自杀人数]#第一个纵坐标y2=df[人均GDP]#第二个纵坐标#4、画出自杀人数折线plt.plot(x,y1,linestyle=solid,linewidth=1,markersize=3,label=自杀人数,c=red)plt.xlabel(年份,size=15)plt.ylabel(自杀人数,size=15)plt.xticks(size=15)plt.yticks(size=15)plt.legend(loc=upperleft)#5、画出第二条折线,并将两个坐标图结合在一起plt.twinx()plt.plot(x,y2,linestyle=dashdot,linewidth=1,markersize=3,label=人均GDP)plt.xlabel(年份,size=15)plt.ylabel(人均GDP,size=15)plt.legend(loc=upperright)plt.xticks(size=15)plt.yticks(size=15)plt.title(自杀率与经济发展的关系,loc=left,size=18)plt.show()
从数据可以看出,整体上,随着人均GDP的提高,自杀人数出现显著下降。所以说,不仅是中国,对于整个世界来说,以经济建设为中心也应该是最基本的国家战略。
5、自杀人数最多的10个国家
importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfrompyechartsimportBar,WordCloud,Pie,Lineimportseabornassnssns.set()df=pd.read_csv(rC:\Users\Administrator\Desktop\master.csv)df=df[[country,year,suicides_no]]df=df.pivot_table(suicides_no,index=[country],aggfunc=sum).reset_index()df=df.sort_values(suicides_no,ascending=False).head(10).reset_index()sns.set(style="white",palette="muted",color_codes=True)plt.rcParams[font.sans-serif]=[SimHei]plt.figure(figsize=(10,6))sns.barplot(x="country",y="suicides_no",data=df).set_title("自杀人数最高的10个国家",loc=left,size=18)plt.xticks(rotation=60,size=15)plt.yticks(size=15)plt.xlabel(国家,size=15)plt.ylabel(自杀人数,size=15)sns.despine()plt.show()
自杀人数最多的10个国家分别是:俄罗斯、美国、日本、法国、乌克兰、德国、韩国、巴西、波兰、英国。
当然从历年自杀的总体人数,我们看不出一个国家关于自杀问题的改善或者恶化情况。下面两个图将对此进行对比分析。
6、越来越危险的国家
在这里,我特意对国家的危险程度做出定义。我把年到年的30年,分为3段,每段10年,如果这10年,每个阶段的自杀人数都在上升,就定义为危险国家,反之则为安全国家。
自杀人数持续上升的国家包括:苏里南、巴哈马群岛、卡塔尔、巴拉圭、智利、波兰、格鲁吉亚、韩国、厄瓜多尔、牙买加、南非。这些国家比较危险。
7、越来越安全的国家
代码就不写了,把上面那段代码的危险字段换成安全字段就行,很简单。
越来越安全的国家比较多,包括:奥地利、荷兰、巴巴多斯、法国、西班牙、新加坡、以色列、土库曼斯坦、阿根廷、卢森堡、芬兰、英国、美国、波多黎各、新西兰、毛里求斯、比利时、挪威、瑞典、保加利亚、特立尼达和多巴哥、意大利、希腊、澳大利亚、加拿大等。
写在后面
数据分析重在实践。
当然实践不仅是自己去实践,也包括借鉴别人的东西。如果仅仅是自己去闭门造车,你的提升会比较缓慢,但是你多看别人的东西,多学别人的分析思路和思维,你的进步就会更迅速,对工具的掌握也会更牢固。
比如我今天的分阶段分析,实际上就借鉴了别人的分析思路,甚至连有一部分代码都是依样画葫芦,只不过换成了自己能看得懂的东西。
好了,今天的数据分享就到这里,我们下周继续。
预览时标签不可点收录于话题#个上一篇下一篇