
ノーベル賞はおそらく世界で最もよく知られた科学賞です。
名誉、名声、多額の賞金を除けば、受賞者にはこの賞を創設したアルフレッド・ノーベル(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
最初の数人の受賞者、またはノーベル賞受賞者とも呼ばれる人物を見ただけでも、すでに有名人がいることがわかります。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()
それほど驚くべきことではないかもしれません。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 |
表は問題ありませんが、いつ米国がノーベル賞グラフを独占し始めたかを_確認_するには、プロットが必要です。
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))
そのため、米国は 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))
上のプロットは、線が過剰にプロットされているため、少し乱雑になっています。
しかし、いくつかの興味深い傾向とパターンが示されています。全体的に不均衡はかなり大きく、物理学、経済学、化学の不均衡が最も大きい。
医学賞はやや良い傾向にあり、文学賞も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
ほとんどの科学者、作家、活動家にとって、ノーベル賞は長いキャリアの最高の成果となるでしょう。しかし、人によっては 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()
リピート受賞者のリストには著名な名前が含まれています。
放射線の発見で物理学賞、ラジウムとポロニウムの単離で化学賞を受賞したマリー・キュリーは再び受賞しました。
ジョン・バーディーンはトランジスタと超伝導の物理学で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>
上のプロットは多くのことを示しています。価格を受け取った当時の人々の年齢はかつては 55 歳程度でしたが、現在では平均が 65 歳に近づいています。
しかし、受賞者の年齢には大きな幅があり、ほとんどが 50 歳以上ですが、中には非常に若い人もいます。
また、現在では 1900 年代初頭よりもポイントの密度がはるかに高くなっていることがわかります。現在では、より多くの賞品が共有されるため、より多くの受賞者がいます。また、第二次世界大戦 (1939 ~ 1945 年) 前後に賞の授与に混乱があったこともわかります。
さまざまな賞カテゴリーにおける年齢の傾向を見てみましょう。
上記と同じプロットですが、ノーベル賞の種類ごとに別のプロット
sns.lmplot(x='year',y='age',data=nobel,row='category', height=4, aspect=1.61)
plt.show()
たくさんのエキサイティングな出来事が起こるさらなるプロット!化学、医学、物理学賞の受賞者はいずれも、時間の経過とともに高齢化していることがわかります。この傾向は物理学で最も強く、かつては平均年齢が 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
賞を受賞したとき、レオニード・ハーヴィッツは 90 歳でした。ですから、私達もまだ手遅れではないかもしれません。
最後に2014 年に「子どもと若者の抑圧に対する闘い、すべての子どもの教育を受ける権利を求める闘い」で賞を受賞した史上最年少の受賞者の名前は何?
2014年での最年少ノーベル賞受賞者の名前
youngest_winner = str(youngest.full_name.values[0])
youngest_winner
'Malala Yousafzai'