콘텐츠로 이동

데이터와 시각화 I: 정보의 구조화

코스 개요

이 코스에서 학생들은 데이터의 기초를 배웁니다. 숫자와 텍스트를 체계적으로 정리하고 그래프로 변환하여 패턴과 의미를 발견하는 능력을 기릅니다. 거북이 그래픽으로 시각화의 원리를 이해한 후, Matplotlib으로 전문적인 그래프를 만들고, 실제 음악/패션 데이터를 분석합니다.

예상 소요 시간: 16~32시간

소요 시간은 학생의 학년, 사전 경험, 학습 속도에 따라 크게 달라집니다. 또한 기본 개념만 익히고 넘어가는 경우와 추가 실습 문제나 창의적 프로젝트를 더 진행하는 경우에 따라서도 차이가 납니다. 위 시간은 평균적인 범위이며, 자녀의 페이스에 맞추어 유연하게 진행하시기 바랍니다.

어떤 능력을 키우게 되나요?

"데이터를 구조화하고 시각적으로 표현하는 능력"을 훈련합니다. 21세기 가장 중요한 역량 중 하나인 데이터 리터러시(Data Literacy)의 기초를 다집니다. 단일 값에서 대규모 데이터셋으로 사고를 확장하고, "직감"을 "근거"로 대체하는 데이터 기반 사고방식을 체득합니다.

어떤 원리를 배우나요?

  • (데이터 조직화) 리스트와 딕셔너리로 여러 데이터를 체계적으로 관리합니다. 이것은 데이터베이스, JSON, API 등 현대 데이터 시스템의 기본 구조입니다.
  • (비교/추세 분석) 막대 그래프로 크기를 비교하고, 선 그래프로 시간에 따른 변화를 파악합니다. 숫자를 시각적 패턴으로 변환하는 핵심 기술입니다.
AI 시대 사고력: 컴퓨팅 (문제해결) | 데이터 기반 | 확률적 사고력

데이터 과학 사고력

스킬 설명 활동 예시
📊 데이터와 시각화 숫자를 그래프로 변환 막대 그래프로 판매량 비교
🔍 패턴 발견 데이터에서 규칙성 찾기 월별 UFO 목격 수 트렌드 분석
🧪 가설 검증 추측을 데이터로 확인 "여름에 UFO 목격이 더 많다" 검증
🔽 데이터 필터링 조건에 맞는 데이터만 추출 2020년 이후 데이터만 선택

수학적 연결고리

수학 개념 프로그래밍 적용 학습 효과
통계 평균, 최대, 최소 계산 sum(data)/len(data) → 평균
비율과 백분율 파이 차트 비율 계산 전체 대비 각 부분의 %
좌표 평면 위도/경도로 지도 위 위치 표시 (x, y) 좌표 개념 확장
상관관계 두 변수 간의 관계 분석 "음악 템포 ↔ 인기도" 관계

과학적 탐구 프로세스

flowchart LR
    A[1. 질문] --> B[2. 가설]
    B --> C[3. 수집]
    C --> D[4. 분석]
    D --> E[5. 결론]
    E -.->|새로운 질문| A
단계 예시
질문 "어떤 브랜드 스니커가 가장 비쌀까?"
가설 "Nike가 가장 비쌀 것이다"
수집 CSV 파일에서 가격 데이터 로드
분석 브랜드별 평균 가격 막대 그래프
결론 "실제로는 Yeezy가 가장 비쌌다"

미디어 리터러시

그래프를 볼 때 확인할 것:
- Y축이 0부터 시작하는가? (왜곡 가능성)
- 표본 크기는 충분한가?
- 상관관계 ≠ 인과관계
💻 코드 예시 & 시각화

예시 1: 막대 그래프 - Matplotlib

import matplotlib.pyplot as plt

# 데이터
fruits = ['사과', '바나나', '오렌지', '포도']
sales = [45, 30, 25, 40]

# 막대 그래프 생성
plt.bar(fruits, sales, color=['red', 'yellow', 'orange', 'purple'])
plt.title('과일 판매량')
plt.xlabel('과일')
plt.ylabel('판매량')
plt.show()

실행 결과:

과일 판매량
50┤     ██
40┤ ██  ██          ██
30┤ ██  ██  ██      ██
20┤ ██  ██  ██      ██
10┤ ██  ██  ██      ██
 0┼─────────────────────
   사과 바나나 오렌지 포도


예시 2: 파이 차트 - 비율 시각화

import matplotlib.pyplot as plt

# 데이터
labels = ['게임', '유튜브', '공부', '운동']
times = [3, 2, 4, 1]  # 시간 (단위: 시간)

# 파이 차트
plt.pie(times, labels=labels, autopct='%1.1f%%')
plt.title('하루 활동 시간 분배')
plt.show()

실행 결과:

      하루 활동 시간 분배

          공부
         (40%)
       ╱────────╲
     ╱            ╲
   게임            운동
  (30%)          (10%)
     ╲            ╱
       ╲────────╱
        유튜브
        (20%)


예시 3: 선 그래프 - 트렌드 분석

import matplotlib.pyplot as plt

# 데이터
months = ['1월', '2월', '3월', '4월', '5월', '6월']
temperature = [2, 5, 12, 18, 23, 27]

# 선 그래프
plt.plot(months, temperature, marker='o', color='red')
plt.title('월별 평균 기온')
plt.xlabel('월')
plt.ylabel('기온 (°C)')
plt.grid(True)
plt.show()

실행 결과:

월별 평균 기온
30┤                    ●
25┤                ●
20┤            ●
15┤        ●
10┤
 5┤    ●
 0┤●
  ┼─────────────────────
   1월 2월 3월 4월 5월 6월


예시 4: 지도 시각화 - Folium

import folium

# 서울 중심 지도 생성
map = folium.Map(
    location=[37.5665, 126.9780],  # 서울 좌표
    zoom_start=12
)

# 마커 추가
locations = [
    [37.5796, 126.9770, "경복궁"],
    [37.5512, 126.9882, "남산타워"],
    [37.5662, 126.9785, "광화문"]
]

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")

실행 결과 (지도):

┌─────────────────────────────┐
│     🔴 경복궁              │
│         ╲                  │
│          ╲   서울 지도     │
│    🔴 광화문               │
│              ╲             │
│               ╲            │
│                🔴 남산타워 │
└─────────────────────────────┘


예시 5: 딕셔너리 - 데이터 구조화

# UFO 목격 데이터 (딕셔너리)
ufo_sighting = {
    "날짜": "2024-03-15",
    "위치": "서울",
    "위도": 37.5665,
    "경도": 126.9780,
    "모양": "원반형",
    "지속시간": "5분"
}

# 데이터 접근
print(f"UFO 목격 위치: {ufo_sighting['위치']}")
print(f"UFO 모양: {ufo_sighting['모양']}")

# 여러 목격 데이터 (리스트 + 딕셔너리)
ufo_data = [
    {"도시": "서울", "건수": 15},
    {"도시": "부산", "건수": 8},
    {"도시": "대구", "건수": 5}
]

데이터 구조:

ufo_data = [
  ┌─────────────────────┐
  │ {"도시":"서울",     │ ← ufo_data[0]
  │  "건수": 15}        │
  ├─────────────────────┤
  │ {"도시":"부산",     │ ← ufo_data[1]
  │  "건수": 8}         │
  ├─────────────────────┤
  │ {"도시":"대구",     │ ← ufo_data[2]
  │  "건수": 5}         │
  └─────────────────────┘


🎮 실습 연습 - 파트 1: 데이터 구조

연습 1.1: 리스트 만들기

빈칸을 채워서 리스트를 완성하세요!


연습 1.2: 리스트 조작하기

빈칸을 채워서 리스트를 수정하세요!


연습 1.3: 딕셔너리 완성하기

빈칸을 채워서 게임 캐릭터 딕셔너리를 완성하세요!


연습 1.4: 딕셔너리에 데이터 추가하기

빈칸을 채워서 딕셔너리에 새 항목을 추가하세요!


연습 1.5: 평균 계산하기

빈칸을 채워서 평균 점수를 계산하세요!


🎮 실습 연습 - 파트 2: 그래프 그리기

연습 2.1: 막대 그래프 완성하기

빈칸을 채워서 막대 그래프를 완성하세요!


연습 2.2: 막대 그래프 색상 추가

막대 그래프에 색상을 적용하세요!


연습 2.3: 선 그래프 완성하기

빈칸을 채워서 선 그래프를 완성하세요!


연습 2.4: 두 개의 선 비교하기

빈칸을 채워서 두 학생의 점수를 비교하세요!


연습 2.5: 파이 차트 완성하기

빈칸을 채워서 파이 차트를 완성하세요!


연습 2.6: 파이 차트 강조하기

빈칸을 채워서 특정 항목을 강조하세요!


🎮 실습 연습 - 파트 3: 데이터 분석

연습 3.1: 최대/최소값 찾기

빈칸을 채워서 최대값과 최소값을 찾으세요!


연습 3.2: 조건으로 데이터 필터링

빈칸을 채워서 조건에 맞는 데이터를 필터링하세요!


연습 3.3: 데이터 정렬하기

빈칸을 채워서 데이터를 정렬하세요!


연습 3.4: 최대값 데이터 찾기

빈칸을 채워서 가장 큰 값의 항목을 찾으세요!


🎮 실습 연습 - 파트 4: 디버깅 연습

연습 4.1: 인덱스 오류 수정

_____를 올바른 인덱스로 바꿔서 오류를 수정하세요!


연습 4.2: 딕셔너리 키 오류 수정

올바른 키 이름을 입력해서 오류를 수정하세요!


연습 4.3: 데이터 개수 오류 수정

데이터 개수를 맞춰서 그래프 오류를 수정하세요!


📝 빈칸 채우기 연습

리스트 기초:

  • 리스트 생성: my_list =
  • 항목 추가: my_list. (4)
  • 항목 제거: my_list. (2)
  • 리스트 길이: (my_list)
  • 첫 번째 항목: my_list[ ]

딕셔너리 기초:

  • 딕셔너리 생성: my_dict = { }
  • 값 가져오기: my_dict[ ]
  • 값 추가/수정: my_dict['새키'] =
  • 모든 키: my_dict. ()
  • 모든 값: my_dict. ()

Matplotlib 기초:

  • 막대 그래프: plt. (x, y)
  • 선 그래프: plt. (x, y)
  • 파이 차트: plt. (sizes)
  • 그래프 표시: plt. ()
  • 제목 추가: plt. ('제목')
  • x축 이름: plt. ('이름')
  • 범례 표시: plt. ()
  • 그리드 추가: plt. (True)

데이터 분석:

  • 최대값: (리스트)
  • 최소값: (리스트)
  • 합계: (리스트)
  • 평균: sum(리스트) / (리스트)
  • 정렬: (리스트)

🎯 퀴즈

퀴즈 1: 그래프 선택
학급 학생들의 좋아하는 과목 비율을 보여주려면 어떤 그래프가 좋을까요?
퀴즈 2: 데이터 구조
학생의 이름, 나이, 점수를 함께 저장하려면 어떤 자료형이 좋을까요?
퀴즈 3: 트렌드 분석
주식 가격의 시간에 따른 변화를 보여주려면 어떤 그래프가 좋을까요?
퀴즈 4: 리스트 인덱스
`fruits = ['사과', '바나나', '오렌지']`에서 '바나나'를 가져오려면?
퀴즈 5: Matplotlib 함수
그래프를 화면에 표시하는 함수는?

왜 데이터와 시각화를 배우나요?

21세기 핵심 역량

데이터와 시각화 능력 실생활 활용
그래프 읽기 뉴스의 통계 이해
트렌드 분석 시장 동향 파악
패턴 발견 과학적 발견
지도 시각화 위치 기반 분석
정보 전달 발표, 보고서 작성

데이터 리터러시는 민주 시민으로서 정보를 비판적으로 평가하는 데 필수입니다.


1. 거북이로 그래프 그리기

항목 내용
무엇을 배우나요? 데이터와 시각화의 기본 개념
핵심 개념 데이터 정의, 막대 그래프, 원형 그래프

데이터는 수집된 정보입니다. 학생들은 거북이 그래픽으로 직접 그래프를 그리며 막대 그래프와 원형 그래프의 구조를 이해합니다. 막대 그래프는 카테고리 간 비교에, 원형 차트는 전체에서 각 부분의 비율을 보여주는 데 적합합니다. 라이브러리를 사용하기 전에 원리를 파악하는 중요한 단계입니다.


2. 리스트와 데이터

항목 내용
무엇을 배우나요? 데이터 구조와 딕셔너리
핵심 개념 리스트, 딕셔너리, 데이터 관리

딕셔너리{"이름": 값} 형태로 데이터를 저장합니다. 학생들은 실제 데이터를 효율적으로 저장하고 접근하는 방법을 배웁니다. 이 자료구조는 데이터 분석에서 가장 많이 사용되는 핵심 도구입니다.


3. Matplotlib (브라우저)

항목 내용
무엇을 배우나요? Python 데이터와 시각화 표준 라이브러리
핵심 개념 Matplotlib API, 다양한 차트 유형

Matplotlib은 Python에서 가장 널리 사용되는 시각화 라이브러리입니다. 막대 그래프, 선 그래프, 산점도, 히스토그램, 파이 차트 등 거의 모든 유형의 그래프를 만들 수 있습니다. 학생들은 데이터 과학자, 연구자들이 실제로 사용하는 도구를 배웁니다.


4. 음악 데이터 연구소

항목 내용
무엇을 배우나요? 실제 음악 산업 데이터 분석
핵심 개념 트렌드 분석, 상관관계, 가설 검증

실제 Spotify 데이터로 음악 트렌드를 분석합니다. "음악이 점점 더 시끄러워지고 있을까?", "슬픈 노래가 더 인기 있을까?" 같은 흥미로운 질문에 답합니다. 학생들은 데이터로 가설을 세우고 검증하는 과학적 방법을 경험합니다.

미션 분석 주제
Loudness Wars 시간에 따른 변화 분석
Sad Banger 상관관계 분석
Seasonal 계절별 트렌드
Major/Minor 그룹별 비교

5. 스니커봇 스트리트웨어 연구소

항목 내용
무엇을 배우나요? 패션/소비 데이터 분석
핵심 개념 시장 분석, 소비자 행동

스니커/스트리트웨어 판매 데이터를 분석합니다. "Nike vs Adidas 누가 이길까?", "리미티드 에디션은 정말 더 비쌀까?" 같은 질문을 탐구합니다. 학생들은 실제 비즈니스 데이터를 다루며 마케팅, 경영의 기초를 접합니다.

미션 분석 주제
Hype Tax 가격 프리미엄
Brand Wars 브랜드 경쟁
Global 지역별 분석
Inflation 가격 변화

이 코스를 마치면...

학습 성과

학생들은 다음 능력을 갖추게 됩니다:

  • 리스트와 딕셔너리로 데이터를 구조화할 수 있음
  • 다양한 그래프 유형(막대, 선, 파이)을 상황에 맞게 선택할 수 있음
  • Matplotlib으로 전문적인 그래프를 만들 수 있음
  • 실제 데이터셋을 로드하고 분석할 수 있음
  • 데이터에서 트렌드와 패턴을 발견할 수 있음
  • 가설을 세우고 검증하는 데이터 과학적 사고

다음 단계

데이터와 시각화 I을 마친 학생은 데이터와 시각화 II로 진행하여 지도 시각화, 실전 데이터 분석, 데이터 스토리텔링을 배울 수 있습니다.