TidyTuesday (2026) Week 6: Winter Olympics 2026

This week we’re exploring the event schedule for the 2026 Winter Olympics in Milan-Cortina, Italy. The dataset contains detailed information about all 1,866 Olympic events, including both competition and training sessions across various winter sport disciplines.

TidyTuesday
Data Visualization
Python Programming
2026
Author

Peter Gray

Published

February 10, 2026

Chart A

Chart B

Timeline of Mens and Womens Medal Events

1. Python code

Show code
import pandas as pd
import numpy as np
import plotly.express as px
from datetime import datetime


schedule = pd.read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2026/2026-02-10/schedule.csv')


medal_events = schedule[schedule["is_medal_event"] != False]
medal_events = medal_events[["event_description", "venue_name", "start_datetime_local", "end_datetime_local"]]

def categorize_gender(description):
    if pd.isna(description):
        return "Other"
    description_lower = description.lower()
    if "men" in description_lower and "women" not in description_lower:
        return "Male"
    elif "women" in description_lower:
        return "Female"
    elif any(word in description_lower for word in ["team", "mixed", "relay", "2-man", "2-woman", "4-man", "pair"]):
        return "Team/Mixed"
    else:
        return "Other"

medal_events['event_gender'] = medal_events['event_description'].apply(categorize_gender)


medal_events['start_datetime_local'] = pd.to_datetime(medal_events['start_datetime_local'])
medal_events['end_datetime_local'] = pd.to_datetime(medal_events['end_datetime_local'])


medal_events_men = medal_events[medal_events["event_gender"] == "Male"]
fig_men = px.timeline(
    medal_events_men,
    x_start="start_datetime_local",
    x_end="end_datetime_local",
    y="event_description",
    color="venue_name",
    title="Olympic Medal Events Timeline: Male",
    labels={
        "event_description": "Event",
        "venue_name": "Venue"
    }
)

fig_men.update_xaxes(
    dtick="D1",  # Every day
    tickformat="%d.%m.%Y",  # Day.Month.Year format
    tickangle=45,
    title="Date"
)

# fig_men.show()

### Frauen-Events
medal_events_women = medal_events[medal_events["event_gender"] == "Female"] 
fig_women = px.timeline(
    medal_events_women, 
    x_start="start_datetime_local",
    x_end="end_datetime_local",
    y="event_description",
    color="venue_name",
    title="Olympic Medal Events Timeline: Female",
    labels={
        "event_description": "Event",
        "venue_name": "Venue"
    }
)

# fig_women.show()
Back to top