CDA数据分析师作者:振达,米卡资料:振达【攻略】今天教大家用Python分析《世界幸福指数报告》。《世界幸福指数报告》是一项具有里程碑意义的全球幸福状况调查。民意调查机构盖洛普自2012年起每年在联合国计划下发布《世界幸福指数报告》。该报告将在两年内综合150多个国家的国民,评估他们的社会、城市和自然环境等因素,然后各国对根据他们的幸福感排名。《世界幸福指数报告》主要依靠向150多个国家的1000多人询问一个简单的主观问题:“如果有一个从0到10的等级,前10代表你可能拥有的最好生活,后0代表最差你可能拥有的生活。你认为你现在在哪里?那么哪个国家的整体幸福指数排名最高呢?哪些因素对幸福指数影响最大?今天我们就带大家聊一聊Python。01.数据理解关键字段含义解释:rank:幸福指数排名地区:国民幸福:幸福指数得分gdp_per_capita:GDP(人均国内生产总值)healthy_life_expectancy:健康预期寿命freedom_to_life_choise:自由generosity:慷慨year:年份corruption_perceptions:腐败感知Indexsocial_support:社会支持(客观上是指物质上的帮助和直接服务;主观上是指个人在社会上受到尊重、支持和理解的情感体验和满足感。)02.数据导入和数据整理首先导入所需的包。数据整理importnumpyasnpimportpandasaspd可视觉化importmatplotlib.pyplotaspltimportseabornassnsimportplotlyaspyimportplotly.graph_objsasgoimportplotly.expressaspxfromplotly.offlineimportinit_notebook_mode,iplot,plotinit_notebook_mode(connected=True)plt.style。use('seaborn')读取数据df_2015=pd.read_csv('./deal_data/2015.csv')df_2016=pd.read_csv('./deal_data/2016.csv')df_2017=pd.read_csv('./deal_data/2017.csv')df_2018=pd.read_csv('./deal_data/2018.csv')df_2019=pd.read_csv('./deal_data/2019.csv')新增列表-年份df_2015["year"]=str(2015)df_2016["year"]=str(2016)df_2017["year"]=str(2017)df_2018["year"]=str(2018)df_2019["year"]=str(2019)合并数据df_all=df_2015.append([df_2016,df_2017,df_2018,df_2019],sort=False)df_all.drop('Unnamed:0',axis=1,inplace=True)df_all.head()print(df_2015.shape,df_2016.shape,df_2017.shape,df_2018.shape,df_2019.shape)(158,10)(157,10)(155,10)(156,11)(156,11)df_all.info()Int64Index:782entries,0to155Datacolumns(total10columns):region782non-nullobjectrank782non-nullint64happiness782non-nullfloat64gdp_per_capita782non-nullfloat64healthy_life_expectancy782non-nullfloat64freedom_to_life_choise782non-nullfloat64corruption_perceptions781non-nullfloat64generosity782non-nullfloat64year782non-nullobjectsocial_support312non-nullfloat64dtypes:float64(7),int64(1),object(2)内存使用:601,9+数据可视化世界幸福地图2KB看看北欧国家的幸福指数,比如冰岛、丹麦、挪威、芬兰,东西非国家的幸福指数相对较低,比如多哥、布隆迪、卢旺达、坦桑尼亚代码展示:data=dict(type='choropleth',locations=df_2019['region'],locationmode='countrynames',colorscale='RdYlGn',z=df_2019['happiness'],text=df_2019['region'],colorbar={'title':'幸福'})layout=dict(title='2019年幸福指数地理可视化',geo=dict(showframe=True,projection={'type':'方位等面积'}))choromap3=go.Figure(data=[data],layout=layout)plot(choromap3,filename='./html/WorldHappinessMap.html')2019Top10WorldHappinessCountriesReport2019,芬兰两个2008年连续多年被评为“世界上最幸福的国家”,丹麦、挪威、冰岛、荷兰进入前五。与2018年的报告相比,中国从86位下降到93位。代码展示:合并数据rank_top10=df_2019.head(10)[['rank','region','happiness']]last_top10=df_2019.tail(10)[['rank','region','happiness']]rank_concat=pd.concat([rank_top10,last_top10])bargraphfig=px.bar(rank_concat,x="region",y="happiness",color="region",title="世界上最幸福和最不幸福的国家in2019")plot(fig,filename='./html/2019Top10andLast10.html')幸福指数相关性我们可以得出以下结论:从影响因素相关性的热图可以看出,在影响幸福指数的因素中,GDP、社会支持和健康预期寿命高度相关,自由权利中等相关,国家廉政水平低相关,慷慨程度极低相关;GDP和健康预期寿命和社会支持之间存在高度相关性。说明GDP高的国家,医疗和社会福利水平比较完善,人民的预期寿命会更高;健康预期寿命与社会支持之间存在适度相关性。下面分别观察各因素的影响程度。GDP与幸福指数人均GDP与幸福指数呈高度线性正相关,GDP高的国家幸福指数相对较高。代码展示:散点图fig=px.scatter(df_all,x='gdp_per_capita',y='happiness',facet_row='year',color='year',trendline='ols')fig.update_layout(height=800,title_text='人均GDP和幸福得分')plot(fig,filename='./html/GDPandHappinessScore.html')健康预期寿命和幸福得分健康预期寿命较高的人幸福感水平相对较高。代码展示:散点图fig=px.scatter(df_all,x='healthy_life_expectancy',y='happiness',facet_row='year',color='year',trendline='ols')fig.update_layout(height=800,title_text='HealthyLifeExpecancyandHappinessScore')plot(fig,filename='./html/healthylifeexpecancyandhappinessscore.html')GDP和幸福水平动态图代码展示:fig=px.scatter(df_all,x='gdp_per_capita',y='happiness',animation_frame='year',animation_group='region',size='rank',color='region',hover_name='region',trendline='ols')图。update_layout(title_text='幸福等级vs人均GDP')plot(fig,filename='./html/GDP和幸福水平动态图展示.html')健康预期寿命和幸福水平动态图代码展示:fig=px.scatter(df_all,x='healthy_life_expectancy',y='happiness',animation_frame='year',animation_group='region',size='rank',color='region',hover_name='region',trendline='ols')fig.update_layout(title_text='幸福排名vshealthy_life_expectancy')plot(fig,filename='./html/健康预期寿命和幸福水平动态图形显示.html')04.我们使用线性回归进行数据建模建立基线模型,首先过滤建模变量并删除空记录.sel_cols=['happiness','gdp_per_capita','healthy_life_expectancy','freedom_to_life_choise','corruption_perceptions','generosity']重置索引df_model.index=range(df_model.shape[0])df_model=df_all[sel_cols]deleteNULLdf_model=df_model.dropna()df_model.head()fromstatsmodels.formula.apiimportols构建多元线性回归模型lm_m=ols(formula='happiness~gdp_per_capitahealthy_life_expectancyfreedom_to_life_choisecorruption_perceptionsmodsurygenerosity',data=df()模型的R平方为0.744,拟合效果尚可。根据模型参数,变量重要性排序为:gdp_per_capita,freedom_to_life_choise,healthy_life_expectancy,corruption_perceptions,generosity。一个单位增加幸福指数1.32个单位,每增加一个单位健康预期寿命指数的增加使幸福指数增加了1.21个单位。比较预测值和真实值的分布:df_pred=pd.concat([df_model['happiness'],y_pred],axis=1)df_pred.columns=['y_true','y_pred']散点图fig=px.scatter(df_pred,x='y_true',y='y_pred',trendline='ols')fig.update_layout(title='OLS回归残差')plot(fig,filename='./html/predictedandtrueValuedistributiondiagram.html')下面是模型残差分布图。fig=px.histogram(x=lm_m.resid)fig.update_layout(title='OLS回归残差')plot(fig,filename='./html/多元线性回归残差分布图.html')