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
๐ป 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
๐งช 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
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:
- Context - Why does this data matter?
- Insight - What is the key point the data is telling us?
- 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