「PythonとJavaScriptではじめるデータビジュアライゼーション」を読む

11.5 受賞者の年齢と没年齢

df['award_age'].hist(bins=20)
<matplotlib.axes._subplots.AxesSubplot at 0x7f1459757978>

[f:id:bitop:20171009090400p:plain]

sns.distplot(df['award_age'])
<matplotlib.axes._subplots.AxesSubplot at 0x7f1458f80fd0>

png

箱ひげ図
sns.boxplot(df.gender,df.award_age)
plt.show()
sns.violinplot(df.gender,df.award_age)
plt.show()

png

png

11.5.2 受賞者の没年齢
df['age_at_death'] = (df.date_of_death - df.date_of_birth).dt.days/365
age_at_death = df[df.age_at_death.notnull()].age_at_death
sns.distplot(age_at_death,bins=40)
<matplotlib.axes._subplots.AxesSubplot at 0x7f14596b5668>

png

100歳以上の受賞者
df[df.age_at_death > 100][['name','category','year']]
name category year
101 Ronald Coase Economics 1991
329 Rita Levi-Montalcini Physiology or Medicine 1986
男性と女性の寿命の差
df2 = df[df.age_at_death.notnull()]
sns.kdeplot(df2[df2.gender == 'male'].age_at_death,shade=True,label='male')
sns.kdeplot(df2[df2.gender == 'female'].age_at_death,shade=True,label='female')
<matplotlib.axes._subplots.AxesSubplot at 0x7f1457f58400>

png

sns.violinplot(df.gender,age_at_death)
<matplotlib.axes._subplots.AxesSubplot at 0x7f1457f40828>

png

11.5.3 時代に伴う寿命の延長
df_temp = df[df.age_at_death.notnull()]
data = pd.DataFrame({'age_at_death':df_temp.age_at_death,
                    'date_of_birth':df_temp.date_of_birth.dt.year})
sns.lmplot('date_of_birth','age_at_death',data,size=6,aspect=1.5)
<seaborn.axisgrid.FacetGrid at 0x7f1457da0d30>

png

11.6 受賞者の移住

#birth_inフィールド付のjsonファイルを読み込み、今までのdfにはbirth_in列はないので11.6章は実行できなかった
df = pd.read_json('nobel_winners_plus_bornin.json', orient='records')
by_bornin_nat = df[df.born_in.notnull()].groupby(['born_in','country']).size().unstack()
by_bornin_nat.index.name = 'Born_in'
by_bornin_nat.columns.name = 'Move_to'
plt.figure(figsize= (8,8))
ax=sns.heatmap(by_bornin_nat,vmin=0,vmax=8)
ax.set_title('The Nobel Diaspora')
<matplotlib.text.Text at 0x7f1417def080>

png