The Nobel Prize has been among the most prestigious international awards since 1901. Each year, awards are bestowed in chemistry, literature, physics, physiology or medicine, economics, and peace. In addition to the honor, prestige, and substantial prize money, the recipient also gets a gold medal with an image of Alfred Nobel (1833 - 1896), who established the prize.
The Nobel Foundation has made a dataset available of all prize winners from the outset of the awards from 1901 to 2023. The dataset used in this project is from the Nobel Prize API and is available in the nobel.csv file in the data folder.
In this project, you'll get a chance to explore and answer several questions related to this prizewinning data. And we encourage you then to explore further questions that you're interested in!
# Loading in required libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Start coding here!
# Ensure the correct path to the CSV file is provided
df_np = pd.read_csv("data/nobel.csv")
df_np.head()#Top Género y Top País de Nacimiento:
Es interesante saber que el género al cual se le han otorgado más premios en toda la historia de estos corresponde a personas del sexo masculino, lo que conduce a pensar en el enorme sesgo que existe respecto a las mujeres en materia de este galardón. Por otra parte, el lugar de nacimiento de quienes reciben estos premios es en su mayoría personas nacidas en los Estados Unidos. Entonces cabe hacerse la pregunta, ¿realmente hay un equilibrio a la hora de entrega de estos premios?
top_gender = df_np["sex"].value_counts().index[0]
top_country = df_np["birth_country"].value_counts().index[0]
print(f'El mayor número de ganadores de Premios Nobel son del Género: {top_gender}')
print(f'El mayor número de ganadores de Premios Nobel nacieron en: {top_country}')#Mayor Proporción de Premios Nobel de los Estados Unidos de Norteamérica
Puede observarse que la década donde se otorgaron más premios a personas nacidas en los Estados Unidos de Norteamérica fue en la década del milenio, es decir, la decada del 2000. Es interesante ver que a pesar de la pandemia, la cantidad de Premios Nobel entregados a Estadounidences incrementó con respecto a la década 2010, siendo que la década 2020 aun no ha culminado.
# Columna Ganadores Nacidos en Estados Unidos
df_np["Born_in_USA"] = df_np["birth_country"] == "United States of America"
# Columna década:
df_np["decade"] = df_np["year"] // 10 * 10
# Proporción de Ganadores en Estados Unidos respecto al total de Ganadores.
p_decade_usa = df_np.groupby('decade', as_index=False).mean()[['decade', 'Born_in_USA']]
# Década donde se registró la mayor proporción de ganadores de los Estados Unidos.
max_decade_usa = p_decade_usa[p_decade_usa['Born_in_USA'] == p_decade_usa['Born_in_USA'].max()]['decade'].values[0]
# Establecer el estilo del gráfico
sns.set_style('whitegrid')
# Gráfico de Evolución de la entrega de premios por década.
g1 = sns.relplot(
x='decade',
y='Born_in_USA',
data=p_decade_usa,
kind='line',
marker='o' # Agregar marcadores
)
g1.fig.suptitle('Proporción de Estadounidences Ganadores del Nobel Por Década', y=1.05)
g1.set(xlabel='Década', ylabel='Proporción de Ganadores Nacidos en USA')
# Ajustar la posición del título para evitar superposición
plt.subplots_adjust(top=0.95)
plt.show()
# Década con Mayor Número de Premios
decade_max_usa = max_decade_usa
decade_max_usa#Mujeres Galardonadas por Década y Categoría:
# Columna Ganadoras del Premio Nobel
df_np["female_winner"] = df_np["sex"] == "Female"
# Proporción de Ganadoras Femeninas respecto al total de Ganadores.
p_decade_fem = df_np.groupby(['decade','category'], as_index=False).mean()[['decade', 'category', 'female_winner']]
# Década y categoría donde se registró la mayor proporción de ganadoras femeninas.
max_decade_fem = p_decade_fem[p_decade_fem['female_winner'] == p_decade_fem['female_winner'].max()][['decade', 'category']]
# Crear un diccionario con el par de año y categoría con la mayor cantidad de ganadoras femeninas.
max_female_dict = {max_decade_fem['decade'].values[0]: max_decade_fem['category'].values[0]}
# Gráfico de Evolución de la entrega de premios por década con múltiples categorías.
g2 = sns.relplot(
x='decade',
y='female_winner',
data=p_decade_fem,
kind='line',
col='category',
col_wrap=3, # Configurar la grilla en 2 filas por 3 columnas
marker='o' # Agregar marcadores
)
g2.fig.suptitle('Proporción de Mujeres Ganadoras del Nobel Por Década y Categoría', y=1.05)
g2.set(xlabel='Década', ylabel='Proporción de Ganadoras Femeninas')
#Máxima Proporción de Mujeres
max_female_dict#Primera Mujer que Ganó un Premio Nobel:
# Filtrar el DataFrame para las filas con ganadoras femeninas
df_female_winners = df_np[df_np['female_winner']]
# Encontrar el año más antiguo y la categoría correspondiente en este subconjunto
oldest_year = df_female_winners['year'].min()
first_woman_name = df_female_winners[df_female_winners['year'] == oldest_year]['full_name'].values[0]
first_woman_category = df_female_winners[df_female_winners['year'] == oldest_year]['category'].values[0]
# Resultado
print(f'La primera mujer que ganó un Premio Nobel fue {first_woman_name} en el año 1903 en la categoría de {first_woman_category}')#Ganadores Repetidos
# Contar el número de veces que ganó cada ganador
winner_counts = df_np['full_name'].value_counts()
# Seleccionar aquellos con conteos de dos o más
repeat_list = winner_counts[winner_counts >= 2].index.tolist()
# Resultado
repeat_list