Olympics
This is a historical dataset on the modern Olympic Games, from Athens 1896 to Rio 2016. Each row consists of an individual athlete competing in an Olympic event and which medal was won (if any).
Not sure where to begin? Scroll to the bottom to find challenges!
import pandas as pd
olympic_data = pd.read_csv("data/athlete_events.csv.gz")
olympic_data.head()
Data Dictionary
Column | Explanation |
---|---|
id | Unique number for each athlete |
name | Athlete's name |
sex | M or F |
age | Age of the athlete |
height | In centimeters |
weight | In kilograms |
team | Team name |
noc | National Olympic Committee 3 |
games | Year and season |
year | Integer |
season | Summer or Winter |
city | Host city |
sport | Sport |
event | Event |
medal | Gold, Silver, Bronze, or NA |
Source and license of the dataset. The dataset is a consolidated version of data from www.sports-reference.com.
Don't know where to start?
Challenges are brief tasks designed to help you practice specific skills:
- πΊοΈ Explore: In which year and city did the Netherlands win the highest number of medals in their history?
- π Visualize: Create a plot visualizing the relationship between the number of athletes countries send to an event and the number of medals they receive.
- π Analyze: In which sports does the height of an athlete increase their chances of earning a medal?
Scenarios are broader questions to help you develop an end-to-end project for your portfolio:
You are working as a data analyst for an international judo club. The owner of the club is looking for new ways to leverage data for competition. One idea they have had is to use past competition data to estimate the threat of future opponents. They have provided you with a dataset of past Olympic data and want to know whether you can use information such as the height, weight, age, and national origin of a judo competitor to estimate the probability that they will earn a medal.
You will need to prepare a report that is accessible to a broad audience. It should outline your steps, findings, and conclusions.
βοΈ If you have an idea for an interesting Scenario or Challenge, or have feedback on our existing ones, let us know! You can submit feedback by pressing the question mark in the top right corner of the screen and selecting "Give Feedback". Include the phrase "Content Feedback" to help us flag it in our system.
Histogram with Plotly Express
olympic_data.shape
import plotly.express as px
# Create a histogram
fig = px.histogram(olympic_data.age, x="age",
title="Distribution of Athletes age")
fig.show()
Histogram with Plotly GO
import plotly.graph_objects as go
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
fig.update_layout(title=dict(text="Distribution of Athletes age"))
fig.show()
Changing the title font
# Create histogram
fig = go.Figure(data=[go.Histogram(x=olympic_data.age)])
fig.update_layout(
# Set the global font
font = {
"family":"Times new Roman",
"size":16
},
# Update title font
title = {
"text": "Distribution of Athletes age",
"y": 0.9, # Sets the y position with respect to `yref`
"x": 0.5, # Sets the x position of title with respect to `xref`
"xanchor":"center", # Sets the title's horizontal alignment with respect to its x position
"yanchor": "top", # Sets the title's vertical alignment with respect to its y position. "
"font": { # Only configures font for title
"family":"Arial",
"size":20,
"color": "red"
}
}
)
# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")
# Display plot
fig.show()
Changing the bin size of bars
# Create histogram
fig = go.Figure(data = [
go.Histogram(
x = olympic_data.age,
xbins=go.histogram.XBins(size=5) # Change the bin size
)
]
)
fig.update_layout(
# Set the global font
font = {
"family":"Times new Roman",
"size":16
},
# Update title font
title = {
"text": "Distribution of Athletes age",
"y": 0.9, # Sets the y position with respect to `yref`
"x": 0.5, # Sets the x position of title with respect to `xref`
"xanchor":"center", # Sets the title's horizontal alignment with respect to its x position
"yanchor": "top", # Sets the title's vertical alignment with respect to its y position. "
"font": { # Only configures font for title
"family":"Arial",
"size":20,
"color": "red"
}
}
)
# Add X and Y labels
fig.update_xaxes(title_text="Age")
fig.update_yaxes(title_text="Number of Athletes")
# Display plot
fig.show()
Changing the color of the bins
β
β