分享

我分析了世界30年自杀数据,男人自杀是女人的4倍

 等你在雨中tbv9 2020-08-06

是的,在数据分析前,我的估计是女人更容易自杀,因为我觉得女人整体应该比男人更无助,她们选择轻生的概率可能会更高一点。

另外年轻人容易冲动想不开,被女朋友骂了一顿就上天台,所以自杀率也可能高点,毕竟老人大风大浪都过来了,不太会高龄自杀。但是分析结果却大出所料:

男人更容易自杀,老人容易自杀。

这次分享依然选择Python工具,不过可视化的方式做了一下变化,原因是我装的pyecharts不能画双坐标图,不知道为什么。所以这次的可视化用了三种方式,包括pyecharts,matplotlib,还有seaborn。

数据准备

1、数据说明

这份数据来源于世界卫生组织,有相当的权威性。记录了1985年至2016年101个国家(没有中国)的自杀数据,但是2016年的数据估计不全,感觉有异常,所以在分析的时候我选择了屏蔽。

2、数据概览

import numpy as npimport pandas as pdfrom pyecharts import Bar,WordCloud,Piedf=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')df.head()

可以看到,这份数据字段比较简单,主要包括国家,年份,年龄段,自杀人数,每10万人自杀人数,人均GDP等

import numpy as npimport pandas as pdfrom pyecharts import Bar,WordCloud,Piedf=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')df.describe()

然后我们用describe()函数对数据做了一下描述性分析,可以大致看到整体数据情况,对所要分析的数据做到心里有数。

对数据有了一定程度熟悉后,我们现在开始正式进行分析工作。

数据分析

1、男人更容易自杀

import numpy as npimport pandas as pdfrom pyecharts import Bar,WordCloud,Pie,Line
df=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')df=df[df['year']!=2016]
#男性自杀数据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 = 600,height = 400)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 =250000,is_xaxis_boundarygap = False, is_datazoom_show =True,line_width = 2,line_color = 'cyan')
line.render('自杀年度分布.html')line

看数据可以知道,在这101个国家中男性自杀数量,是女性的4倍左右。

每年大概有25万人自杀,那么全球估算每年有50万人左右自杀。

新世纪后,自杀人数出现缓慢下降。

所以各位还是要多关心一下男人的心理健康问题,虽然男人很多时候看起来坚强,但是实际上内心还是很脆弱的。

2、老人更容易自杀

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyecharts import Bar,WordCloud,Pie,Line
#1、导入数据df=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')
#2、选择数据并重命名df=df[['age','sex','suicides/100k pop']].rename(columns={'suicides/100k pop':'自杀'})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(lambda x:format(x,'.2f'))female_data=df[df['sex'] == 'female']['自杀'].apply(lambda x:format(x,'.2f'))
#7、数据可视化bar = Bar(title = "平均自杀人数年龄分布",width = 600,height = 400)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岁以上的老年人,自杀倾向更明显。

从性别方面看,男性在老年阶段,自杀率远高于女性。而且这种差距,随着年龄增大而越来越大。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyecharts import Bar,WordCloud,Pie,Lineimport seaborn as sns
df=pd.read_csv(r'C:\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、穷人更容易自杀

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyecharts import Bar,WordCloud,Pie,Lineimport seaborn as sns
df=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')
#1、数据筛选与columns重命名df=df[['year','country','gdp_per_capita ($)','suicides/100k pop']]df=df[df['year']!=2016]df=df.rename(columns={'suicides/100k pop':'自杀人数','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:'Rich' for country in Front50}Label_countries.update({country:'Poor' for country in Back50})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()

为了能够看出贫富情况对自杀率的影响,我特意把这101个国家按照GDP情况分为了两类,前50名打上了“rich”标签;后50个国家打上了“poor”标签。

结果很明显,贫困国家的自杀率普遍高于富裕国家。从这个可以看出,经济因素是影响自杀的重要因素。

下面的数据也是本结论的一个佐证。

4、人均GDP越高,自杀率越低

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyecharts import Bar,WordCloud,Pie,Line#1、导入数据,同时对数据进行筛选df=pd.read_csv(r'C:\Users\Administrator\Desktop\master.csv')df=df[['year','gdp_per_capita ($)','suicides/100k pop']]df=df[df['year']!=2016]df=df.rename(columns={'suicides/100k pop':'自杀人数','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='upper left')
#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='upper right')plt.xticks(size=15)plt.yticks(size=15)plt.title('自杀率与经济发展的关系',loc='left',size=18)plt.show()

从数据可以看出,整体上,随着人均GDP的提高,自杀人数出现显著下降。所以说,不仅是中国,对于整个世界来说,以经济建设为中心也应该是最基本的国家战略。

5、自杀人数最多的10个国家

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyecharts import Bar,WordCloud,Pie,Lineimport seaborn as snssns.set()
df=pd.read_csv(r'C:\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、越来越危险的国家

在这里,我特意对国家的危险程度做出定义。我把1986年到2016年的30年,分为3段,每段10年,如果这10年,每个阶段的自杀人数都在上升,就定义为危险国家,反之则为安全国家。

自杀人数持续上升的国家包括:苏里南、巴哈马群岛、卡塔尔、巴拉圭、智利、波兰、格鲁吉亚、韩国、厄瓜多尔、牙买加、南非。这些国家比较危险。

7、越来越安全的国家

代码就不写了,把上面那段代码的危险字段换成安全字段就行,很简单。

越来越安全的国家比较多,包括:奥地利、荷兰、巴巴多斯、法国、西班牙、新加坡、以色列、土库曼斯坦、阿根廷、卢森堡、芬兰、英国、美国、波多黎各、新西兰、毛里求斯、比利时、挪威、瑞典、保加利亚、特立尼达和多巴哥、意大利、希腊、澳大利亚、加拿大等。

写在后面

数据分析重在实践。

当然实践不仅是自己去实践,也包括借鉴别人的东西。如果仅仅是自己去闭门造车,你的提升会比较缓慢,但是你多看别人的东西,多学别人的分析思路和思维,你的进步就会更迅速,对工具的掌握也会更牢固。

比如我今天的分阶段分析,实际上就借鉴了别人的分析思路,甚至连有一部分代码都是依样画葫芦,只不过换成了自己能看得懂的东西。

好了,今天的数据分享就到这里,我们下周继续。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约