2015〜2019年の世界幸福度ランキング推移をPlotlyでアニメーション

Plotlyを使ってworld happiness ranking(世界幸福度ランキング)2015年〜2019年の推移をプロットします。Plotly_expressを使えば、5年間の幸福度推移を簡単にアニメーションできます。Plotlyのchoroplethマップを使用し、アニメーションの中で色の変化を見ることでランキングの推移を見て取れます。

import pandas as pd

df = pd.read_csv('2015.csv')
df1 = pd.read_csv('2016.csv')
df2 = pd.read_csv('2017.csv')
df3 = pd.read_csv('2018.csv')
df4 = pd.read_csv('2019.csv')

2018年の幸福度ランキングのトップ5をチラ見する。

df3.head()
Rank Country Score GDP_Per_Capita Social_Support Healthy_Life_Expectancy Freedom_To_Make_Life_Choices Generosity Perceptions_Of_Corruption Residual
0 1 Finland 7.632 1.305 1.592 0.874 0.681 0.192 0.393 2.988
1 2 Norway 7.594 1.456 1.582 0.861 0.686 0.286 0.340 2.723
2 3 Denmark 7.555 1.351 1.590 0.868 0.683 0.284 0.408 2.779
3 4 Iceland 7.495 1.343 1.644 0.914 0.677 0.353 0.138 2.564
4 5 Switzerland 7.487 1.420 1.549 0.927 0.660 0.256 0.357 2.675

次に、2019年の幸福度ランキングをチラ見します。

df4.head()
Country (region) Ladder SD of Ladder Positive affect Negative affect Social support Freedom Corruption Generosity Log of GDP\nper capita Healthy life\nexpectancy
0 Finland 1 4 41.0 10.0 2.0 5.0 4.0 47.0 22.0 27.0
1 Denmark 2 13 24.0 26.0 4.0 6.0 3.0 22.0 14.0 23.0
2 Norway 3 8 16.0 29.0 3.0 3.0 8.0 11.0 7.0 12.0
3 Iceland 4 9 3.0 3.0 1.0 7.0 45.0 3.0 15.0 13.0
4 Netherlands 5 1 12.0 25.0 15.0 19.0 12.0 7.0 12.0 18.0
心理:人間の幸福度は周囲の幸福度に反比例、人は他人の不幸を願う
人間は自分が幸せを実感している時は、周りの人間にも幸せになってもらいたいと願う一方で、自分が不幸な境遇に置かれている時は、他人に対して自分以上のさらなる不幸を望む傾向があるようです。ネットの書き込みを見ていると、それを如実に物語っている書き込みが圧倒的に多いことに気付かされます。メシウマなんていう単語まで存在するほどで...

国名とランクの列名が違うので、2018年度版データに合わせます。

df4.rename(columns={'Country (region)': 'Country', 'Ladder': 'Rank'},inplace=True)
df.rename(columns={ 'Happiness Rank': 'Rank'},inplace=True)
df1.rename(columns={ 'Happiness Rank': 'Rank'},inplace=True)
df2.rename(columns={ 'Happiness.Rank': 'Rank'},inplace=True)

幸福度ランキングの発表された年をデーターフレームに追加します。

df['Year'] = 2015
df1['Year'] = 2016
df2['Year'] = 2017
df3['Year'] = 2018
df4['Year'] = 2019

必要な列(国、順位、年度)だけを抽出する。

df5 = df[['Country','Rank','Year']]
df6 = df1[['Country','Rank','Year']]
df7 = df2[['Country','Rank','Year']]
df8 = df3[['Country','Rank','Year']]
df9 = df4[['Country','Rank','Year']]

データフレームを1つにまとめます。

df10 = pd.concat([df5, df6, df7, df8, df9], ignore_index=True)

国と年でまとめたデータをソートします。

df11 = df10.sort_values(by=["Country",'Year'])
import plotly_express as px
import plotly.graph_objs as go
from plotly.offline import plot,iplot
fig = px.choropleth(df11,locations="Country",color="Rank",hover_name="Country",
      animation_frame="Year",range_color=[0,200],color_continuous_scale=px.colors.cmocean.matter,
      locationmode = 'country names',scope = "world")
fig.update_layout(title_text="世界幸福度ランキング2015年〜2019年",title_font=dict(size=22),
     autosize=False,width=835,height=800,margin=dict(l=50,r=50,b=50,t=50,pad=0,autoexpand=True),
     hoverlabel=dict(font=dict(size=24)),geo=dict(showcountries=True,showocean=True,showrivers=True,
     landcolor='lightgray',resolution=110,showframe=False,showlakes=True,showland=True,
     countrywidth=2,countrycolor='white',lakecolor='rgb(0,0,200)',
     projection=dict(type='orthographic')))
plot(fig,show_link=False,filename="1.html",include_plotlyjs=False)

データが5年分しかないので、アニメーションさせてもそれ程変化の差を感じることができません。せめて10年分以上のデータが必要だろうと思われます。

世界一幸福なフィンランド人:sisuが意味するものとは?
sisuはフィンランドの言葉でガッツを意味するそうです。No guts, no glory (頑張れない人間は何をやってもダメ)と古から言い伝えられているように、ガッツの有る無しで人生が決まると言っても決して過言ではありません。少なくとも、最後の踏ん張りが出来るかできないかで、その後の人生が大きく変わってくることだけは...
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました