소프트웨어와 생활웹 교과서
이 페이지의 목차
3단원 · 5차시

데이터 분석하기

기술 통계비교상관

코드 예제: Python · 예상 50분

학습 목표

  • 데이터를 요약·비교·관계 분석으로 살펴볼 수 있다.

관련 성취기준

  • [12소생03-03]

    데이터를 분석하고 시각화하여 다양한 사회 현상의 의미를 해석한다.

생각 열기 — 1년 동안 새솔시 사람들은 자전거를 어떻게 탔을까

bike.csv 새솔시 공유 자전거 2025년 일별 기록 (정제를 마친 데이터)

365줄 · 8열 · 14.3KB · 열: 날짜, 월, 요일, 계절, 평균기온, 강수량, 미세먼지, 대여건수

⬇ 내려받기

365줄을 한 줄씩 읽어서는 아무것도 보이지 않는다. 분석은 많은 값을 몇 개의 숫자나 하나의 그림으로 줄여 모습이 드러나게 하는 일이다.

분석의 세 가지 물음

  • 요약

    보통 얼마인가

    많은 값을 대표하는 숫자로 줄인다. 평균, 가운데 값(중앙값), 가장 작은·큰 값, 얼마나 흩어졌나(표준편차).

  • 비교

    무엇이 다른가

    묶음(요일·계절·지역)으로 나누어 요약값을 견준다. 「주말 평균 대여가 평일보다 많다」.

  • 관계

    함께 움직이나

    두 값을 짝지어 한쪽이 클 때 다른 쪽도 큰지 본다. 그 정도를 상관 계수(−1 ~ +1)로 나타낸다.

요약 — 평균과 중앙값

평균(mean) — 모든 값을 더해 개수로 나눈 값과 중앙값(median) — 값을 크기 차례로 늘어놓았을 때 한가운데 오는 값은 둘 다 «보통의 값»을 말하지만, 언제나 같지는 않다.

예상해 보기

새솔시에는 1년 365일 가운데 79일 비가 왔다. 하루 강수량의 평균과 중앙값 가운데 어느 쪽이 더 클까?

결과 바로 보기
평균
Python강수량의 평균과 중앙값
import pandas as pd

df = pd.read_csv('bike.csv')
print('평균:', round(df['강수량'].mean(), 2))
print('중앙값:', df['강수량'].median())
print('비 온 날:', (df['강수량'] > 0).sum(), '일')
확인된 실행 결과
평균: 2.46
중앙값: 0.0
비 온 날: 79 일

한가운데(183번째) 날은 비가 오지 않은 날이라 중앙값은 0이다. 그런데 하루 30mm 넘게 온 7일 — 대부분 장마철이고, 가장 많이 온 날은 84.1mm 다 — 이 평균을 끌어올렸다. 값이 한쪽으로 치우쳐 있으면 평균은 그쪽으로 끌려간다. 그래서 «보통의 날»을 말할 때는 중앙값이 더 알맞을 수 있다.

직접 분석해 보기

아래 실험실에서 세 가지 물음을 차례로 해 보자. 고를 때마다 같은 일을 하는 판다스 코드가 맨 아래에 나온다.

분석 실험실bike.csv

파이썬(판다스)으로는
실습

세 물음에 답하기

약 20분

실험실로 아래 물음에 답하고 활동지에 적는다.

  1. 요약 — 하루 대여 건수의 평균과 중앙값은 각각 얼마인가? 둘이 얼마나 다른가?
  2. 비교 — 요일별 평균 대여 건수에서 가장 많은 요일 둘은? 계절로 묶으면 어느 계절이 가장 적은가?
  3. 관계 — 평균기온·강수량·미세먼지 가운데 대여 건수와 상관 계수의 크기(부호를 뺀 값)가 가장 큰 것은?
활동지

분석의 세 물음

스스로 점검
  • 평균과 중앙값을 숫자로 적었다
  • 요일과 계절을 견주었다
  • 상관 계수를 적었다
  • 담당자에게 전할 말을 적었다

글자 규칙으로 살펴보는 점검표다. 다 켜졌다고 좋은 답이 되는 것은 아니다 — 마지막 판단은 내가 한다.

적은 내용은 이 브라우저에만 저장된다. 다른 컴퓨터로 옮기거나 제출하려면 내려받는다.

파이썬으로 분석하기

Python요약 · 비교 · 관계를 한 번에
import pandas as pd

df = pd.read_csv('bike.csv')
print('평균:', round(df['대여건수'].mean(), 1))
print('중앙값:', df['대여건수'].median())
print()
계절평균 = df.groupby('계절')['대여건수'].mean().round(1)
print(계절평균)
print()
print('기온과 대여의 상관 계수:', round(df['평균기온'].corr(df['대여건수']), 2))
확인된 실행 결과
평균: 1822.4
중앙값: 1762.0

계절
가을    2214.0
겨울     753.2
봄     1962.3
여름    2341.0
Name: 대여건수, dtype: float64

기온과 대여의 상관 계수: 0.71

groupby('계절') 은 «계절이 같은 줄끼리 묶어라», 그 뒤의 ['대여건수'].mean() 은 «묶음마다 대여 건수의 평균을 내라»는 뜻이다. 결과의 차례가 가을·겨울·봄·여름인 것은 판다스가 묶음 이름을 가나다 차례로 늘어놓기 때문이다. 계절 차례로 보고 싶으면 .reindex(['봄', '여름', '가을', '겨울']) 을 붙인다.

상관 계수 읽기

상관 계수(correlation coefficient) — 두 값이 직선 모양으로 함께 움직이는 정도를 −1 ~ +1 로 나타낸 수. 흔히 r 로 쓴다는 두 값이 얼마나 «함께» 움직이는지를 나타낸다.

상관 계수를 읽는 어림 기준
r 의 값뜻새솔시의 예
+0.7 ~ +1강한 양의 상관 — 한쪽이 크면 다른 쪽도 크다평균기온 ↔ 대여 건수 (0.71)
−0.2 ~ −0.4약한 음의 상관 — 한쪽이 크면 다른 쪽이 조금 작은 편강수량 ↔ 대여 건수 (−0.26), 미세먼지 ↔ 대여 건수 (−0.34)
0 근처직선 관계가 거의 없다—

확인 문제

개념 확인 문제

보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.

새솔시 하루 강수량의 평균은 2.46mm, 중앙값은 0mm 다. 이렇게 차이가 나는 까닭은?12소생03-03

「주말과 평일 가운데 어느 쪽이 자전거를 더 많이 빌리나?」는 분석의 세 물음 가운데 무엇인가?12소생03-03

판다스에서 요일마다 대여 건수의 평균을 구하는 코드는?12소생03-03

평균기온과 대여 건수의 상관 계수가 0.71 이다. 바르게 읽은 것은?12소생03-03

이 차시는 C 예제를 제공하지 않는다. 상단에서 다른 언어로 바꾸면 예제를 볼 수 있다.

교과서에서 찾기

이 차시에 대응하는 교과서 위치가 아직 정리되지 않았다. [확인필요]