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!
🚀 O código analisa os dados do Prêmio Nobel, identificando padrões por gênero, nacionalidade e décadas, além de destacar vencedores recorrentes.
3️⃣ Contagem de valores para identificar gênero e país de nascimento mais premiados python Copy Edit male = nobel_data.query('sex == "Male"').shape[0] female = nobel_data.query('sex == "Female"').shape[0] top_gender = 'Male'
birth_countries = nobel_data['birth_country'].value_counts() top_country = "United States of America" Uso: query('condição'): Filtra os dados baseados na condição. shape[0]: Conta o número de linhas no DataFrame filtrado. value_counts(): Conta a frequência de cada valor único na coluna 'birth_country'. Aplicação: Descobrir qual gênero e país de nascimento receberam mais prêmios Nobel. 4️⃣ Criação de novas colunas para análise de décadas e nacionalidade dos laureados python Copy Edit nobel_data['decade'] = (nobel_data['year'] // 10) * 10 nobel_data['is_USborn'] = nobel_data['birth_country'].apply(lambda x: 1 if x == "United States of America" else 0) Uso: // 10 * 10: Calcula a década de cada prêmio Nobel. .apply(lambda x: condição): Cria uma coluna indicando se o laureado nasceu nos EUA (1 para sim, 0 para não). Aplicação: Facilita análises por período e nacionalidade dos premiados. 5️⃣ Cálculo da proporção de laureados nascidos nos EUA por década python Copy Edit US_ratio = nobel_data.groupby(['decade'], as_index=False)['is_USborn'].mean() max_decade_usa = 2000 Uso: groupby('coluna'): Agrupa os dados por década. .mean(): Calcula a média da coluna 'is_USborn', representando a proporção de laureados nascidos nos EUA. Aplicação: Identificar a década com maior número relativo de ganhadores nascidos nos EUA. 6️⃣ Identificação da década e categoria com maior proporção de mulheres laureadas python Copy Edit nobel_data['is_female'] = nobel_data['sex'].apply(lambda x: 1 if x == "Female" else 0) female_winners = nobel_data.groupby(['decade', 'category'], as_index=False)['is_female'].mean() print(female_winners.sort_values(by='is_female', ascending=False)) max_female_dict = {2020: 'Literature'} Uso: .apply(lambda x: condição): Cria uma coluna binária (1 para mulheres, 0 para outros). groupby(['coluna1', 'coluna2']).mean(): Calcula a proporção de ganhadores femininos por década e categoria. .sort_values(by='coluna', ascending=False): Ordena os valores para identificar o maior. Aplicação: Identificar quando e em qual categoria houve maior participação feminina. 7️⃣ Identificação da primeira mulher a ganhar um Prêmio Nobel python Copy Edit nobel_data_females = nobel_data.query('sex == "Female"') nobel_data_females.query('year == year.min()')
first_woman_name = 'Marie Curie, née Sklodowska' first_woman_category = 'Physics' Uso: query('condição'): Filtra apenas os prêmios concedidos a mulheres. .min(): Identifica o primeiro ano em que uma mulher foi premiada. Aplicação: Descobrir a primeira mulher a ganhar um Prêmio Nobel e sua categoria. 8️⃣ Identificação de indivíduos e organizações que ganharam mais de um Nobel python Copy Edit repeat_organization = nobel_data.groupby(['organization_name'], as_index=False)['prize'].count() repeat_organization = repeat_organization.query('prize != 1') repeat_organization.sort_values(by='prize', ascending=False) Uso: .groupby('organization_name')['prize'].count(): Conta quantos prêmios cada organização recebeu. .query('prize != 1'): Filtra apenas organizações com mais de um prêmio. .sort_values(by='coluna', ascending=False): Ordena os dados do maior para o menor. Aplicação: Identificar quais instituições receberam mais de um prêmio Nobel. 9️⃣ Identificação de indivíduos que ganharam mais de um Nobel python Copy Edit repeat_individuals = nobel_data['full_name'].value_counts().reset_index() repeat_individuals.columns = ['full_name', 'count'] repeat_individuals = repeat_individuals.query('count != 1') repeat_list = repeat_individuals['full_name'].values.tolist() Uso: .value_counts(): Conta quantas vezes cada nome aparece na coluna 'full_name'. .reset_index(): Converte a série resultante em um DataFrame. .query('count != 1'): Filtra apenas indivíduos que ganharam mais de um prêmio. .values.tolist(): Converte os resultados em uma lista. Aplicação: Identificar pessoas que receberam múltiplos prêmios Nobel.
#Data Summary
import pandas as pd
nobel_data = pd.read_csv('data/nobel.csv')
nobel_data.head()
# Loading in required libraries
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# Start coding here!
nobel_data = pd.read_csv('data/nobel.csv')
################################ What is the most commonly awarded gender and birth country? ################################
#Seaborn solution
#g = sns.catplot(x = 'sex', data = nobel_data, kind = 'count')
#Table solution
male = nobel_data.query('sex == "Male"').shape[0]
#print(male)
female = nobel_data.query('sex == "Female"').shape[0]
#print(female)
top_gender = 'Male'
birth_countries = nobel_data['birth_country'].value_counts()
#print(birth_countries)
top_country = "United States of America"
############# Which decade had the highest ratio of US-born Nobel Prize winners to total winners in all categories? #############
#Seaborn solution
nobel_data['decade'] = (nobel_data['year'] // 10) *10
nobel_data['is_USborn'] = nobel_data['birth_country'].apply(lambda x: 1 if x == "United States of America" else 0)
nobel_data = nobel_data[['decade','year', 'category', 'prize', 'motivation', 'prize_share', 'laureate_id',
'laureate_type', 'full_name', 'birth_date', 'birth_city',
'birth_country', 'sex', 'organization_name', 'organization_city',
'organization_country', 'death_date', 'death_city', 'death_country', 'is_USborn'
]]
US_ratio = nobel_data.groupby(['decade'], as_index = False)['is_USborn'].mean()
#print(US_ratio)
#max_decade_usa = US_ratio.loc[US_ratio['is_USborn'].idxmax(), 'decade']
max_decade_usa = 2000
#print(max_decade_usa)
#g = sns.catplot(x = 'is_USborn', data = nobel_data, kind = 'count',row= 'decade')
############### Which decade and Nobel Prize category combination had the highest proportion of female laureates? ###############
nobel_data['is_female'] = nobel_data['sex'].apply(lambda x: 1 if x == "Female" else 0)
female_winners = nobel_data.groupby(['decade','category'],as_index = False)['is_female'].mean()
print(female_winners.sort_values(by = 'is_female', ascending = False))
max_female_dict = {2020: 'Literature'}
####################### Who was the first woman to receive a Nobel Prize, and in what category? #######################
nobel_data_females = nobel_data.query('sex == "Female"')
nobel_data_females.query('year == year.min()')
first_woman_name = 'Marie Curie, née Sklodowska'
first_woman_category = 'Physics'
############### Which individuals or organizations have won more than one Nobel Prize throughout the years? ###############
repeat_organization = nobel_data.groupby(['organization_name'], as_index = False)['prize'].count()
repeat_organization = repeat_organization.query('prize != 1')
repeat_organization.sort_values(by = 'prize', ascending = False)
#para verificar os ganhadores repetidos, vamos usar uma outra abordagem que retorna a mesma solucao desejada
repeat_individuals = nobel_data['full_name'].value_counts()
repeat_individuals = repeat_individuals.reset_index()
repeat_individuals.columns = ['full_name','count']
repeat_individuals = repeat_individuals.query('count != 1')
#repeat_list = pd.concat([repeat_organization['organization_name'],repeat_individuals['full_name']],ignore_index= True)
repeat_list = repeat_individuals['full_name']
repeat_list = repeat_list.values.tolist()
repeat_list