A Visual History of Nobel Prize Winners¶

1. 最も多くのノーベル賞を受賞¶

ノーベル賞はおそらく世界で最もよく知られた科学賞です。
名誉、名声、多額の賞金を除けば、受賞者にはこの賞を創設したアルフレッド・ノーベル(1833~1896年)を示す金メダルも与えられる。
毎年、化学、文学、物理学、生理学または医学、経済学、平和のカテゴリーの科学者や学者に授与されます。
最初のノーベル賞は 1901 年に授与され、当時の賞は非常にヨーロッパ中心で男性に焦点を当てていましたが、今日ではいかなる形でも偏見はありません。きっと。

ノーベル財団は、賞が開始された 1901 年から 2016 年までのすべての受賞者のデータセットをしようしてさ調べてみましょう。まずはロードして見てみましょう。

from zipfile import ZipFile
from io import BytesIO
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

# zf = ZipFile('archive.zip')
zf = ZipFile('datasets.zip')
zf.namelist()
['datasets/', 'datasets/nobel.csv']
nobel = pd.read_csv(BytesIO(zf.read(zf.namelist()[1])))

nobel.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 911 entries, 0 to 910
Data columns (total 18 columns):
 #   Column                Non-Null Count  Dtype 
---  ------                --------------  ----- 
 0   year                  911 non-null    int64 
 1   category              911 non-null    object
 2   prize                 911 non-null    object
 3   motivation            823 non-null    object
 4   prize_share           911 non-null    object
 5   laureate_id           911 non-null    int64 
 6   laureate_type         911 non-null    object
 7   full_name             911 non-null    object
 8   birth_date            883 non-null    object
 9   birth_city            883 non-null    object
 10  birth_country         885 non-null    object
 11  sex                   885 non-null    object
 12  organization_name     665 non-null    object
 13  organization_city     667 non-null    object
 14  organization_country  667 non-null    object
 15  death_date            593 non-null    object
 16  death_city            576 non-null    object
 17  death_country         582 non-null    object
dtypes: int64(2), object(16)
memory usage: 128.2+ KB

2. では、ノーベル賞は誰が受賞するのでしょうか?¶

最初の数人の受賞者、またはノーベル賞受賞者とも呼ばれる人物を見ただけでも、すでに有名人がいることがわかります。X 線を発見したヴィルヘルム・コンラート・レントゲンです。
そして実際、1901 年の優勝者は全員ヨーロッパ出身者だったことがわかります。
しかし、それは 1901 年に遡り、1901 年から 2016 年までのデータセット内のすべての勝者を調べたところ、最も一般的に代表されているのはどの性別で、どの国でしょうか?

(国については、受賞者のbirth_countryを使用します。これは、共有されるすべてのノーベル賞のorganization_countryがNaNであるためです。)

1901 年から 2016 年までに授与された (おそらく共通の) ノーベル賞の数を表示

男性および女性の受賞者の当選数を表示

位 10 か国が獲得した賞品の数を表示

display(len(nobel['prize']))

display(nobel['sex'].value_counts())

nobel['birth_country'].value_counts().head(10)
911
Male      836
Female     49
Name: sex, dtype: int64
United States of America    259
United Kingdom               85
Germany                      61
France                       51
Sweden                       29
Japan                        24
Canada                       18
Netherlands                  18
Italy                        17
Russia                       17
Name: birth_country, dtype: int64
data = nobel['sex'].value_counts()
plt.figure(figsize=(10, 5))

colors = sns.color_palette('dark')[0:5]

ax = data.plot(kind = "pie", 
               autopct = '%1.1f%%', 
               shadow = True, 
               colors = colors,
               explode = [0.1, 0.1], 
               legend = True, 
               title = 'Nobel Prize Male and Female', 
               ylabel = '',
               labeldistance = None,
              textprops={'color':"w",'size': 20},
              )

ax.title.set_size(20)
ax.legend(bbox_to_anchor=(1, 1), loc='upper left')
plt.show()

上位 10 か国が獲得したノーベル賞の数を表示

import matplotlib.cm as cm
from matplotlib.colors import Normalize
plt.style.use('ggplot')

plt.figure(figsize=(10, 4))
my_cmap = cm.get_cmap('plasma')
my_norm = Normalize(vmin = 0, vmax = 200)
 
top_ = nobel['birth_country'].value_counts().sort_values(ascending=True).tail(10)
top_

ax = top_.plot(kind = 'barh',
                color = my_cmap(my_norm(top_.values)),
                title = 'Number of Prizes Won Top 10 Countries',
                xlabel = 'Number of Prize',
                ylabel = 'Country',
               alpha = .9
               )

ax.bar_label(ax.containers[0], fontsize=14)
ax.title.set_size(20)
plt.show()

3. アメリカの優位性¶

それほど驚くべきことではないかもしれません。1901 年から 2016 年までの最も多くのノーベル賞受賞者は、アメリカ合衆国生まれの男性でした。しかし、1901 年の優勝者はすべてヨーロッパ人でした。アメリカはいつからノーベル賞ランキングを独占し始めましたか?

10年ごとに米国生まれの勝者の割合を計算する

アメリカ生まれの勝者の10年ごとの割合を表示します

nobel['usa_born_winner'] = nobel['birth_country']=='United States of America'
nobel['decade'] = (np.floor(nobel['year'] /10 )*10).astype(int)
prop_usa_winners = nobel.groupby('decade', as_index= False)['usa_born_winner'].mean()

prop_usa_winners
decade usa_born_winner
0 1900 0.017544
1 1910 0.075000
2 1920 0.074074
3 1930 0.250000
4 1940 0.302326
5 1950 0.291667
6 1960 0.265823
7 1970 0.317308
8 1980 0.319588
9 1990 0.403846
10 2000 0.422764
11 2010 0.292683

4. アメリカの優位性を視覚化¶

表は問題ありませんが、いつ米国がノーベル賞グラフを独占し始めたかを_確認_するには、プロットが必要です。

plt.figure(figsize=(10, 4))

cmap = sns.color_palette("PuBu", as_cmap=True)
ax = sns.lineplot(x = 'decade',
                  y = 'usa_born_winner',
                  data = prop_usa_winners,
                  linewidth = 5, 
                  color = 'gold'
                 )

plt.fill_between(prop_usa_winners.decade.values, 
                 prop_usa_winners.usa_born_winner.values, 
                 alpha = .4,
                 color = 'navy',
                )

plt.title("Percentage of winner born in USA per Decade", fontsize=20)
plt.xlabel('Year', fontsize=14)
plt.ylabel("Winner born in USA", fontsize=14)

from matplotlib.ticker import PercentFormatter
ax.yaxis.set_major_formatter(PercentFormatter(1.0))

5. 典型的なノーベル賞受賞者の性別は何ですか?¶

そのため、米国は 1930 年代に初めてノーベル賞の圧倒的な受賞者となり、それ以来、主導的な地位を維持し続けました。
しかし、最初からリードを保っていて、決して手放す気配のないグループの 1 つは 男性 です。男性と女性の受賞者の数に多少の不均衡があることは驚くべきことではないかもしれませんが、この不均衡はどれほど重大なのでしょうか?
そして、物理学、医学、文学などの特定の賞カテゴリー内で良いのか悪いのか?

10年ごとの女性受賞者の割合の計算

米国生まれの勝者を % 勝者とともに Y 軸にプロット

plt.figure(figsize=(10, 4))

nobel['female_winner'] = nobel['sex'] == 'Female'
prop_female_winners = nobel.groupby(['decade','category'], as_index=False)['female_winner'].mean()

ax = sns.lineplot(x='decade',
                  y='female_winner',
                  data=prop_female_winners, 
                  hue='category',
                  linewidth = 5,
                  alpha = .6
                 )

from matplotlib.ticker import PercentFormatter
ax.yaxis.set_major_formatter(PercentFormatter(1.0))

6. 女性初のノーベル賞受賞者¶

上のプロットは、線が過剰にプロットされているため、少し乱雑になっています。
しかし、いくつかの興味深い傾向とパターンが示されています。全体的に不均衡はかなり大きく、物理学、経済学、化学の不均衡が最も大きい。
医学賞はやや良い傾向にあり、文学賞も1990年代以降、よりバランスのとれたものになっています。
大きな外れ値は 2010 年代の平和賞ですが、これは 2010 年から 2016 年までをカバーしているだけであることに留意してください。

この不均衡を考えると、ノーベル賞を受賞した最初の女性は誰で、どのカテゴリーか?

nobel[nobel.sex=="Female"].nsmallest(1,'year')
year category prize motivation prize_share laureate_id laureate_type full_name birth_date birth_city ... sex organization_name organization_city organization_country death_date death_city death_country usa_born_winner decade female_winner
19 1903 Physics The Nobel Prize in Physics 1903 "in recognition of the extraordinary services ... 1/4 6 Individual Marie Curie, née Sklodowska 1867-11-07 Warsaw ... Female NaN NaN NaN 1934-07-04 Sallanches France False 1900 True

1 rows × 21 columns

7. 繰り返し受賞者¶

ほとんどの科学者、作家、活動家にとって、ノーベル賞は長いキャリアの最高の成果となるでしょう。しかし、人によっては 1 回では不十分であり、複数回摂取している人はほとんどいません。この幸運な少数の人たちは誰ですか? (私自身はノーベル賞を受賞していないので、それは単なる運の問題だと思います。)

2つ以上の賞を受賞した受賞者を選出します

two_ = nobel.full_name.value_counts() > 1
nobel.full_name.value_counts()[two_]
Comité international de la Croix Rouge (International Committee of the Red Cross)    3
Office of the United Nations High Commissioner for Refugees (UNHCR)                  2
John Bardeen                                                                         2
Linus Carl Pauling                                                                   2
Frederick Sanger                                                                     2
Marie Curie, née Sklodowska                                                          2
Name: full_name, dtype: int64
more2 = nobel.full_name.value_counts()[two_].sort_values(ascending=True)

my_cmap = cm.get_cmap('plasma')
my_norm = Normalize(vmin = 1, vmax = 3)

ax = more2.plot(kind = 'barh',
                color = my_cmap(my_norm(more2.values)),
                title = 'Who prized more than one?',
                xlabel = 'Number of Prize',
                ylabel = 'Full Name',
               )

ax.bar_label(ax.containers[0], fontsize=18)
ax.title.set_size(20)
plt.show()

8. 賞品をするのは何歳ですか?¶

リピート受賞者のリストには著名な名前が含まれています。
放射線の発見で物理学賞、ラジウムとポロニウムの単離で化学賞を受賞したマリー・キュリーは再び受賞しました。
ジョン・バーディーンはトランジスタと超伝導の物理学で2回、フレデリック・サンガーは化学で2回取得し、ライナス・カール・ポーリングは最初に化学で、その後核軍縮推進の功績により平和でこの資格を取得しました。
また、赤十字とUNHCRが二度この賞を受賞していることから、組織もこの賞を受賞していることも分かりました。

しかし、賞品を受け取るのは一般的に何歳ですか?

Birth_date を文字列から datetime に変換する

ノーベル賞受賞者の年齢を計算する

ノーベル賞受賞者の年齢をプロットしてみる

nobel['birth_date'] = pd.to_datetime(nobel['birth_date'])

nobel['age'] = nobel['year']-nobel['birth_date'].dt.year

sns.lmplot(x='year',y='age',data=nobel, height=6, aspect=1.61)
<seaborn.axisgrid.FacetGrid at 0x7fcb7f514910>

9. 賞品カテゴリー間の年齢差¶

上のプロットは多くのことを示しています。価格を受け取った当時の人々の年齢はかつては 55 歳程度でしたが、現在では平均が 65 歳に近づいています。
しかし、受賞者の年齢には大きな幅があり、ほとんどが 50 歳以上ですが、中には非常に若い人もいます。

また、現在では 1900 年代初頭よりもポイントの密度がはるかに高くなっていることがわかります。現在では、より多くの賞品が共有されるため、より多くの受賞者がいます。また、第二次世界大戦 (1939 ~ 1945 年) 前後に賞の授与に混乱があったこともわかります。

さまざまな賞カテゴリーにおける年齢の傾向を見てみましょう。

上記と同じプロットですが、ノーベル賞の種類ごとに別のプロット

sns.lmplot(x='year',y='age',data=nobel,row='category', height=4, aspect=1.61)
plt.show()

10. 最年長と最年少の優勝者¶

たくさんのエキサイティングな出来事が起こるさらなるプロット!化学、医学、物理学賞の受賞者はいずれも、時間の経過とともに高齢化していることがわかります。この傾向は物理学で最も強く、かつては平均年齢が 50 歳未満でしたが、現在は 70 歳近くになっています。文学と経済学はより安定しています。また、経済学は新しいカテゴリーであることもわかります。しかし、平和では逆の傾向が見られ、勝者の若年化が見られます。

平和部門でも2010年頃に優勝したのですが、非常に若く見えます。ここで疑問が生じます。これまでにノーベル賞を受賞した最年長と最年少は誰でしょうか?

2016年までの最高齢のノーベル賞受賞者

oldest = nobel.nlargest(1,'age')

oldest
year category prize motivation prize_share laureate_id laureate_type full_name birth_date birth_city ... organization_name organization_city organization_country death_date death_city death_country usa_born_winner decade female_winner age
793 2007 Economics The Sveriges Riksbank Prize in Economic Scienc... "for having laid the foundations of mechanism ... 1/3 820 Individual Leonid Hurwicz 1917-08-21 Moscow ... University of Minnesota Minneapolis, MN United States of America 2008-06-24 Minneapolis, MN United States of America False 2000 False 90.0

1 rows × 22 columns

2016年時点で最年少のノーベル賞受賞者

youngest = nobel.nsmallest(1,'age')

youngest
year category prize motivation prize_share laureate_id laureate_type full_name birth_date birth_city ... organization_name organization_city organization_country death_date death_city death_country usa_born_winner decade female_winner age
885 2014 Peace The Nobel Peace Prize 2014 "for their struggle against the suppression of... 1/2 914 Individual Malala Yousafzai 1997-07-12 Mingora ... NaN NaN NaN NaN NaN NaN False 2010 True 17.0

1 rows × 22 columns

11. Conclusion¶

賞を受賞したとき、レオニード・ハーヴィッツは 90 歳でした。ですから、私達もまだ手遅れではないかもしれません。

最後に2014 年に「子どもと若者の抑圧に対する闘い、すべての子どもの教育を受ける権利を求める闘い」で賞を受賞した史上最年少の受賞者の名前は何?

2014年での最年少ノーベル賞受賞者の名前

youngest_winner = str(youngest.full_name.values[0])

youngest_winner
'Malala Yousafzai'