Skip to content

Data & Visualization II: Drawing Insights

Course overview

In this course, students learn the professional data analysis toolsto draw insights from real-world data. Students represent spatial data with map visualization, explore data with interactive graphs, and learn to handle real-world "Dirty Data." Ultimately, they develop the storytelling ability to turn data into a persuasive story.

Estimated time: 16-32 hours

The time required depends on the student's grade level, prior experience, and learning speed, and varies greatly. It also differs between just learning the basic concepts and moving on, versus additional practice problems or creative projects: taking those on makes a difference too. The times above are an average range, so please proceed flexibly at your child's pace.

What abilities will it build?

"the ability to discover and communicate insights from data". Beyond just drawing graphs, students develop exploratory analysis skills by asking data "questions" and finding answers . They also learn data storytelling skills to communicate the insights they find effectively to an audience.

What principles will you learn?

  • (Exploratory analysis) Freely explore data with interactive visualizations and discover hidden patterns. It's a way of listening to the story the data tells, without a hypothesis.
  • (Real-world data) Real-world data is full of missing values, outliers, and format inconsistencies. Students develop the practical skills to clean and analyze Dirty Data.
  • (Communication) Turn numbers and graphs into a persuasive story. Students learn to choose different visualization strategies depending on who the audience is.
AI-era thinking: computing (problem-solving) | data-driven | probabilistic thinking

Advanced data analysis thinking

Skill Description Example activity
๐Ÿ—บ๏ธ Spatial analysis Discover patterns in location data UFO sighting hotspot map
๐Ÿ” Exploratory analysis Explore data without a hypothesis Find patterns with interactive graphs
๐Ÿงน Data cleaning Handling Dirty Data Handle missing values, remove outliers
๐Ÿ“– Storytelling Tell a story with data Build a presentation dashboard

Mathematical connections

Math concept Programming application Learning benefit
Coordinate plane Marking a location on a map by latitude/longitude Extending the (x, y) coordinate concept
Statistics Mean, median, distribution analysis Basics of data summarization
ratios and percentages Compute proportions and rates of change Size of a part relative to the whole
Correlation Analyzing the relationship between two variables Understanding correlation โ‰  causation

Data storytelling process

flowchart LR
    A[1. Explore] --> B[2. Discover]
    B --> C[3. Analyze]
    C --> D[4. Visualize]
    D --> E[5. Communicate]

Media literacy

What to check when looking at a graph:
- Does the Y axis start at 0? (potential distortion)
- Is the sample size large enough?
- Correlation โ‰  causation
- Is the data source trustworthy?
๐Ÿ’ป Code examples & visualization

Example 1: Map visualization - Folium

import folium

# Create a map centered on Seoul
map = folium.Map(
    location=[37.5665, 126.9780],  # Seoul coordinates
    zoom_start=12
)

# Add a marker
locations = [
    [37.5796, 126.9770, "Gyeongbokgung"],
    [37.5512, 126.9882, "Namsan Tower"],
    [37.5662, 126.9785, "Gwanghwamun"]
]

for loc in locations:
    folium.Marker(
        location=[loc[0], loc[1]],
        popup=loc[2],
        icon=folium.Icon(color='red')
    ).add_to(map)

map.save("seoul_map.html")

Run result (map):

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     ๐Ÿ”ด Gyeongbokgung       โ”‚
โ”‚         โ•ฒ                  โ”‚
โ”‚          โ•ฒ   Seoul map     โ”‚
โ”‚    ๐Ÿ”ด Gwanghwamun          โ”‚
โ”‚              โ•ฒ             โ”‚
โ”‚               โ•ฒ            โ”‚
โ”‚                ๐Ÿ”ด Namsan Tower โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


Example 2: Interactive graph - Plotly

import plotly.express as px

# Data
df = px.data.gapminder()
df_2007 = df[df['year'] == 2007]

# Interactive scatter plot
fig = px.scatter(
    df_2007,
    x='gdpPercap',
    y='lifeExp',
    size='pop',
    color='continent',
    hover_name='country',
    title='GDP vs Life Expectancy (2007)'
)
fig.show()

Features: - Hover with the mouse for details - Zoom in/out to explore details - Click the legend to filter


Example 3: Choropleth map - data by region

import folium

# Population data by Seoul district
population = {
    "Gangnam-gu": 550000,
    "Seocho-gu": 440000,
    "์†กํŒŒ๊ตฌ": 680000,
    # ...
}

# Represent population with color
# The larger the population, the darker the color

Visualization result:

Population density by Seoul district
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ โ–‘โ–‘โ–‘ ์€ํ‰  โ–’โ–’ ๊ฐ•๋ถ   โ”‚
โ”‚ โ–‘โ–‘โ–‘ ์„œ๋Œ€๋ฌธ โ–’โ–’ ์„ฑ๋ถ  โ”‚  โ–‘ Low
โ”‚ โ–’โ–’โ–’ ๋งˆํฌ  โ–ˆโ–ˆโ–ˆ ๊ฐ•๋‚จ  โ”‚  โ–’ Medium
โ”‚ โ–’โ–’โ–’ ์˜๋“ฑํฌ โ–ˆโ–ˆโ–ˆ ์†กํŒŒ โ”‚  โ–ˆ High
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜


๐ŸŽฎ Hands-on exercises

Exercise 1: Make a map

Make a map of South Korea with Python!

Mission: Create a map and add a marker

from leaflet_python import Map, CITIES

# Create a map centered on South Korea
m = Map(center=[36.5, 127.5], zoom=7)

# Add a marker for Seoul
m.add_marker(
    CITIES["์„œ์šธ"],
    popup="์„œ์šธํŠน๋ณ„์‹œ",
    tooltip="์ˆ˜๋„"
)

# TODO: Try adding a marker for Busan too!
# m.add_marker(CITIES["๋ถ€์‚ฐ"], popup="๋ถ€์‚ฐ๊ด‘์—ญ์‹œ")

m.show()

Exercise 2: Show population with circle markers

Use circle size to represent each city's population!

Mission: Add circle markers proportional to population

from leaflet_python import Map, CITIES

m = Map(center=[36.5, 127.5], zoom=7)

# Population data by city (in tens of thousands)
cities = [
    {"name": "์„œ์šธ", "pop": 950},
    {"name": "๋ถ€์‚ฐ", "pop": 340},
    {"name": "๋Œ€๊ตฌ", "pop": 240},
    {"name": "์ธ์ฒœ", "pop": 295},
    {"name": "์ œ์ฃผ", "pop": 68},
]

# Population-proportional circle markers
for city in cities:
    if city["name"] in CITIES:
        m.add_circle(
            center=CITIES[city["name"]],
            radius=city["pop"] * 50,
            color='blue',
            fill=True,
            fill_opacity=0.5,
            popup=f"{city['name']}: {city['pop']}0,000 people"
        )

m.show()

Exercise 3: Filter data

Fill in the blanks to filter the data!


Exercise 4: Sort data and compute statistics

Fill in the blanks to sort the data and compute statistics!


Exercise 5: Scatter plot

Fill in the blanks to complete the scatter plot!


๐Ÿ“ Fill-in-the-Blank Practice

Map visualization:

  • Create a map: Map(center=[latitude, longitude], =7)
  • Add a marker: m.add_ (coordinates, popup='text')
  • Add a circle: m.add_ (center=coordinates, radius=radius)
  • Display the map: m. ()

Data analysis:

  • Filter a list: [x for x in data if ]
  • Sort: sorted(data, key=lambda x: x[ ])
  • Sum: (list)
  • Average: sum(list) / (list)

๐ŸŽฏ Quiz

Quiz 1: Map visualization
Which map is best for showing population density by region with color?
Quiz 2: Data storytelling
Which of these is NOT needed for effective data storytelling?
Quiz 3: Correlation
You have data showing "as ice cream sales rise, drowning incidents also rise." What is the correct interpretation?

๐Ÿงช Part 1: Data structure exercises

Exercise 1-1: Complete a dictionary

Fill in the blanks to complete the Busan info dictionary!


Exercise 1-2: Add data to a list

Fill in the blanks to add data!


Exercise 1-3: Access a nested dictionary

Fill in the blanks to get a value from the nested dictionary!


๐Ÿงช Part 2: Data analysis exercises

Exercise 2-1: Filter with a list comprehension

Fill in the blanks to filter the movies!


Exercise 2-2: Sort data

Fill in the blanks to sort the data!


Exercise 2-3: Find the max and min values

Fill in the blanks to find the max/min values!


Exercise 2-4: Calculate the average

Fill in the blanks to compute the average power per type!


๐Ÿงช Part 3: Visualization exercises

Exercise 3-1: Complete a bar chart

Fill in the blanks to complete the bar graph!


Exercise 3-2: Complete a line chart

Fill in the blanks to complete the line chart!


Exercise 3-3: Complete a pie chart

Fill in the blanks to complete the pie chart!


Exercise 3-4: Complete a scatter plot

Fill in the blanks to complete the scatter plot!


๐Ÿงช Part 4: Map visualization exercises

Exercise 4-1: Add multiple markers

Use a loop to add multiple markers to the map!

Mission: Add markers for multiple cities

from leaflet_python import Map, CITIES

m = Map(center=[36.5, 127.5], zoom=7)

# List of cities to visit
cities_to_visit = ['์„œ์šธ', '๋ถ€์‚ฐ', '๋Œ€๊ตฌ', '๊ด‘์ฃผ', '๋Œ€์ „']

# Add markers with a loop
for city in cities_to_visit:
    if city in CITIES:
        m.add_marker(
            CITIES[city],
            popup=f"{city}",
            tooltip="Click me"
        )

m.show()

Exercise 4-2: Change color based on a condition

Show circles in different colors based on population!

Mission: Vary the color based on population

from leaflet_python import Map, CITIES

m = Map(center=[36.5, 127.5], zoom=7)

# Population data by city
cities = [
    {"name": "์„œ์šธ", "pop": 950},
    {"name": "๋ถ€์‚ฐ", "pop": 340},
    {"name": "๋Œ€๊ตฌ", "pop": 240},
    {"name": "์ธ์ฒœ", "pop": 295},
    {"name": "๊ด‘์ฃผ", "pop": 145},
]

# Decide color based on population
for city in cities:
    if city["name"] in CITIES:
        # 5M+: red, 3M+: orange, otherwise: blue
        if city["pop"] >= 500:
            color = 'red'
        elif city["pop"] >= 300:
            color = 'orange'
        else:
            color = 'blue'

        m.add_circle(
            center=CITIES[city["name"]],
            radius=city["pop"] * 30,
            color=color,
            fill=True,
            fill_opacity=0.5,
            popup=f"{city['name']}: {city['pop']}0,000 people"
        )

m.show()

Exercise 4-3: Connect a route with lines

Connect the cities with lines!

Mission: Connect the cities with lines

from leaflet_python import Map, CITIES

m = Map(center=[36.5, 127.5], zoom=7)

# Travel route
route = ['์„œ์šธ', '๋Œ€์ „', '๋Œ€๊ตฌ', '๋ถ€์‚ฐ']

# Convert the route to a list of coordinates
route_coords = [CITIES[city] for city in route if city in CITIES]

# Connect with a line
m.add_line(route_coords, color='red', weight=3)

# Add a marker for each city
for i, city in enumerate(route):
    if city in CITIES:
        m.add_marker(
            CITIES[city],
            popup=f"{i+1}. {city}"
        )

m.show()

๐Ÿ› Part 5: Debugging exercises

Debugging 1: Dictionary key error

_____Fix the error by replacing it with the correct key name!


Debugging 2: List index error

_____Replace it with the correct index to fix the error!


Debugging 3: Mismatched graph data length

_____Fill it in to make the data counts match!


Debugging 4: Lambda function key error

_____Replace it with the correct key name!


๐Ÿ“ Extra fill-in-the-blank exercises

Using a dictionary:

  • Creating a dictionary: data =
  • Access a value: data[ ]
  • Check if a key exists: if 'ํ‚ค' data:
  • All keys: data. ()

Processing data:

  • Filtering: [x for x in data if ]
  • Sort: sorted(data, =lambda x: x['๊ฐ’'])
  • Max value: (data, key=lambda x: x['๊ฐ’'])
  • Sum: ([d['๊ฐ’'] for d in data])

matplotlib graph:

  • Bar chart: plt. (x, y)
  • Line: plt. (x, y)
  • Pie chart: plt. (values, labels=labels)
  • Scatter plot: plt. (x, y)

๐ŸŽฏ Extra quiz

Quiz 4: Dictionary
What is the correct code to get the value of the key '๋‚˜์ด' from a dictionary?
Quiz 5: List comprehension
Which code selects only the even numbers from numbers = [1, 2, 3, 4, 5]?
Quiz 6: Sorting
How do you sort a list in descending order (largest first)?
Quiz 7: Map coordinates
What is the correct coordinate format to represent Seoul (latitude 37.5, longitude 127.0) on a map?
Quiz 8: Choosing a graph
Which graph is best for showing a trend of change over time?

1. Map Visualization (Python)

Item Content
What will you learn? Representing geographic data on a map
Core Concepts Coordinate systems, GeoJSON, choropleth maps

Map visualization is a powerful way to visually represent geographic data. Students learn how latitude and longitude indicate a location. Using markers, popups, polygons, and more, they display information on a map. They express region boundaries in GeoJSON format and represent data with color using choropleth maps. These skills are widely used in real applications, such as processing user names and analyzing messages.


2. UFO Sighting Data Lab

Item Content
What will you learn? Analyzing real UFO sighting data
Core Concepts Map visualization, time-series analysis, pattern discovery

real UFO sighting report data. Students plot UFO sighting locations on a map, analyze hourly/seasonal trends, and visualize the distribution by UFO shape. Through an intriguing topic, they experience the entire data analysis process of having built their own 3D world.

Mission Analysis topics
UFO Sighting Map Location-based visualization
Trends Over Time Time-series analysis
UFO Shape Analysis Category analysis
Seasonal Patterns Discovering periodicity
Regional Hotspots Density analysis

3. Pokรฉmon Data Lab

Item Content
What will you learn? Analyzing game data and forming a strategy
Core Concepts Multivariate analysis, comparative analysis, optimization

Pokรฉmon stats data. They answer questions like "Which type is strongest?", "Offensive vs. defensive Pokรฉmon?", and "Are legendary Pokรฉmon really strong?" with data. Students understand the principles of game balancing and learn to form a data-driven strategy.

Mission Analysis topics
Stats by type Group comparison analysis
Change across generations Time-series trends
Legendary vs. regular Statistical comparison
Optimal team composition Multivariate optimization

4. Hollywood Brand Wars

Item Content
What will you learn? Analyzing film industry data
Core Concepts Business analysis, ROI, trend forecasting

movie box-office data. They explore business questions like "Which genre is most profitable?", "Sequels vs. originals?", and "How much box-office influence do actors have?" Students experience real cases of data-driven decision-making.

Mission Analysis topics
Profitability by genre ROI analysis
Studio competition Market share
Releases by season Timing strategy
Budget vs. box office Investment efficiency

What is data storytelling?

Numbers into a story

Data storytellingis not just about showing a graph; it's about crafting a story that gets the audience to take action.

Bad example Good example
"Sales increased by 15%." "Our team's new strategy paid off. Sales rose 15%, and at this rate we can exceed our year-end target."
Just shows a graph Highlights the key point + provides context + suggests the next action

The 3 elements of effective data storytelling:

  1. Context - Why does this data matter?
  2. Insight - What is the key point the data is telling us?
  3. Action - What should the audience do?

When you finish this course...

Learning outcomes

Students will be able to:

  • visualize data on a map(Folium)
  • interactive graphsto explore data (Plotly)
  • real-world Dirty Dataand analyze it
  • identify a discover insights
  • the insights you discover persuasively
  • graphs criticallymedia literacy
  • data-driven decision-makingand understand its principles