단원 홈

Ⅱ. 데이터 준비와 분석9차시

무엇과 무엇을
나란히 놓을까

질문이 속성을 고르고, 속성 쌍이 도구를 고른다

따릉이 대여 기록은 열이 열일곱 개입니다. "출근길과 주말은 다르게 쓰일까"에 답하려면 그 가운데 무엇을 골라 둘씩 나란히 놓아야 할까요? 그리고 나란히 놓은 두 속성이 어떤 종류인지가, 그 관계를 읽을 도구까지 정해 줍니다.

  • [12데과02-03]
  • 50분네 정거장
  • 새 손놀림pd.cut · corr · crosstab
  • 자료따릉이 대여이력 한 주 표본 1,999건
Ⅱ 단원 지도9 / 14차시
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14

학습 목표

  1. 개념에서

    분석 목적에 맞게 속성을 결과 · 가르는 · 뺄 셋으로 가르고, 날짜·시각 한 칸에서 가르는 속성을 꺼낼 수 있다.

  2. 손으로

    속성 쌍의 종류에 맞는 도구(산점도 · 상자그림 · 교차표)를 골라 pandas와 matplotlib으로 그릴 수 있다.

  3. 확인에서

    교차표의 행 비율과 열 비율로 서로 다른 두 문장을 쓰고, 각각 어떤 질문의 답인지 말할 수 있다.

1
여는 장면 · 5분

계산은 맞다 — 그런데 이 숫자가 그 물음에 답하나

서울 따릉이 대여 기록 한 주치를 받았습니다. 열이 열일곱 개, 줄이 2,000개예요. 동아리에서 물음 하나가 나왔습니다 — "출근길 따릉이와 주말 따릉이는 다르게 쓰일까?"

다음 날 한 사람이 답이라며 숫자 하나를 들고 왔습니다. 이용시간과 이동거리의 상관계수 0.63. 계산은 맞습니다 — 3정거장의 코드 ②가 같은 값을 그대로 찍어요. 그런데 그 식 안에 '출근길'도 '주말'도 들어가 있지 않습니다.

동아리 발표 · 가상 기사

이용시간과 이동거리, 상관계수 0.63 — 출근길이든 주말이든 따릉이 쓰임은 비슷했다

표본 1,999건 분석 · 이 기사는 수업을 위해 지어낸 것입니다
표 1대여 기록 — 열일곱 개 가운데 여섯 개2024-06-10~16 표본에서 네 줄
자전거번호대여일시빌린 곳돌려준 곳이용시간(분)이용거리(M)
SPB-355382024-06-11 07:08:3300153042089536.88
SPB-655732024-06-11 07:14:280118402717112360.00
SPB-398222024-06-15 06:34:420273302733611939.95
SPB-647392024-06-15 01:24:2902417024175710303.89

이 표 어디에도 '출근길'이라는 열은 없습니다. '주말'도 없어요. 그런데 아래 두 줄은 빌린 곳과 돌려준 곳이 같습니다 — 그런 열도 없지요. 물음에 답할 속성 가운데 여럿은 기록에 없고, 만들어야 합니다. 자료: 서울시 따릉이 대여이력 2024-06-10~16 무작위 표본 2,000행에서 네 줄(Ⅱ-5와 같은 파일)

먼저 예측

열일곱 개 가운데 이 물음에 쓸 속성과 뺄 속성은 무엇일까요? 그리고 "0.63"처럼 숫자 하나로 답할 수 있는 물음일까요, 아니면 무리를 갈라 견주어야 답이 나올까요? 한 문장으로 적어 두세요 — 3정거장 미션 ①에서 여러분의 문장과 판이 내린 채점을 맞대어 봅니다.

체크포인트 1

계산이 맞는 숫자도 다른 물음의 답일 수 있다는 것을 보았고, 이 물음에 쓸 속성을 한 문장으로 적어 두었다.

다음 정거장 · 개념 15분 →
2
개념 · 15분

질문이 속성을 고르고, 속성 쌍이 도구를 고른다

2-1질문 하나가 열을 셋으로 가른다

열이 열일곱 개라고 해서 열일곱 개를 다 쓰는 것이 아닙니다. 질문이 먼저고, 질문이 열을 셋으로 갈라 줍니다.

결과 속성은 무엇이 다른가를 담은 열입니다. "다르게 쓰일까"의 '쓰임'에 해당하는 것 — 이용시간, 이용거리, 같은 곳에 돌려주었는지. 가르는 속성은 무엇으로 나누나를 담은 열이에요 — 때(새벽·출근길·낮·퇴근길·밤), 주말인지, 요일. 뺄 속성은 이 질문과 상관없거나, 값의 크기에 뜻이 없는 열입니다 — 자전거번호, 대여소 이름, 거치대 번호.

여는 장면의 0.63은 결과 속성 둘 사이의 관계입니다. 이용시간도 이동거리도 '쓰임'이고, 그 식 어디에도 가르는 속성이 없습니다. 계산은 맞지만 다른 질문에 답한 숫자예요 — "오래 탄 사람이 멀리 가는가"의 답이지 "출근길과 주말이 다른가"의 답이 아닙니다.

Ⅰ-5 에서 가져옴속성의 뜻(식별자 · 명목 · 순서 · 양)은 이미 가렸습니다. 대여소 번호의 평균이 왜 헛것인지도 거기서 보았지요. 오늘 가리는 것은 다릅니다 — 이 질문에 쓸까 말까입니다.

2-2기록에 없는 속성은 만들어 낸다

가르는 속성 가운데 '때'도 '주말'도 표에 없었습니다. 만들어야 해요. 재료는 이미 있습니다 — 대여일시 한 칸 안에 시각과 날짜가 함께 들어 있고, 빌린 곳과 돌려준 곳 두 칸을 견주면 '같은 곳에 돌려주었는가'가 나옵니다.

그림 1한 칸에서 꺼낸 속성, 그리고 이 질문에서의 몫표 1의 첫 줄 하나를 따라간 것
기록에 있는 열쪼개기 · 견주기만든 속성대여일시2024-06-1107:08:33시7요일화(1)때출근길주말아니오빌린곳 · 돌려준곳00153 · 04208같은곳아니오이용시간 · 이용거리9분 · 537m분 · 거리그대로구간으로 묶기5 이상인가같은가?그대로대여일시 한 칸 안에 네 가지가 들어 있다 — 꺼내야 보인다.빌린 곳과 돌려준 곳은 따로 보면 번호지만, 견주면 참·거짓 한 칸이 된다. 이 질문에서의 몫질문이 정한다가르는 속성무엇으로 나누나때주말요일시결과 속성무엇이 다른가분거리같은곳뺄 속성이 질문과 상관없거나 크기에 뜻이 없다자전거번호대여소명거치대빌린곳 번호같은 열이 쓸 것도 되고 뺄 것도 된다 — 빌린곳 번호 자체는 빼지만,돌려준 곳과 ‘같은가’ 만 물으면 결과 속성이 된다. 기록에 있는 열쪼개기 · 견주기만든 속성대여일시2024-06-1107:08:33시7요일화(1)때출근길주말아니오빌린곳 · 돌려준곳00153 · 04208같은곳아니오이용시간 · 이용거리9분 · 537m분 · 거리그대로구간으로 묶기5 이상인가같은가?그대로대여일시 한 칸 안에 네 가지가 들어 있다 — 꺼내야 보인다.빌린 곳과 돌려준 곳은 따로 보면 번호지만, 견주면 참·거짓 한 칸이 된다. 이 질문에서의 몫질문이 정한다가르는 속성무엇으로 나누나때주말요일시결과 속성무엇이 다른가분거리같은곳뺄 속성이 질문과 상관없거나 크기에 뜻이 없다자전거번호대여소명거치대빌린곳 번호같은 열이 쓸 것도 되고 뺄 것도 된다 — 빌린곳 번호 자체는 빼지만,돌려준 곳과 ‘같은가’ 만 물으면 결과 속성이 된다.

왼쪽은 한 줄에서 속성을 꺼내는 일, 오른쪽은 꺼낸 속성이 이 질문에서 맡는 몫입니다. 같은 열이 쓸 것도 되고 뺄 것도 돼요 — 빌린 곳 00153이라는 번호 자체는 크기에 뜻이 없어 빼지만, 돌려준 곳과 같은지만 물으면 훌륭한 결과 속성이 됩니다. 자료: 따릉이 표본의 첫 줄(2024-06-11 07:08:33 · 00153 → 04208 · 9분 · 537m)

시(0~23)는 스물네 가지 값을 가진 수치입니다. 이대로 쓰면 무리가 스물네 개라 견주기 어려우니 순서 있는 다섯 무리로 묶습니다 — 새벽 · 출근길 · 낮 · 퇴근길 · 밤. pandas에서는 pd.cut이 이 일을 합니다.

그런데 경계는 자료가 정해 주지 않습니다. 출근길을 7~9시로 잡을지 6~10시로 잡을지는 분석하는 사람의 선택이에요. 경계를 넓히면 무리가 커지고, 커진 무리에는 출근이 아닌 대여가 섞여 들어와 요약값도 함께 움직입니다.

출근길 무리같은 자료
7~9시321건6~10시429건
7~9시 → 중앙값 8분6~10시 → 중앙값 9분

자료: 따릉이 표본 1,999건 — 코드 ①의 탐구가 찍는 값

표 2경계를 옮기면 무리가 바뀐다같은 1,999건 · 다섯 무리로 묶은 두 가지
출근길 경계새벽출근길낮퇴근길밤출근길 중앙값
7~9시 (오늘 쓰는 것)1843215445633878분
6~10시 (넓게 잡으면)1374294835633879분

출근길 무리가 321건에서 429건으로 불어나고, 새벽은 184건에서 137건으로 줄었습니다. 중앙값도 8분에서 9분으로 움직여요. 퇴근길과 밤은 경계를 건드리지 않았으니 그대로입니다. 자료: 따릉이 표본 1,999건 — pd.cut의 경계만 바꿔 다시 센 값(원장 검산)

2-3쌍의 종류가 도구를 고른다

속성 둘을 나란히 놓았다고 그림이 저절로 서지는 않습니다. 둘이 수치인지 범주인지에 따라 관계를 읽는 도구가 달라져요. 셋뿐입니다 — 그리고 셋을 바꿔 쓰면 그림이 말없이 무너집니다.

그림 2세 가지 쌍, 세 가지 도구 — 그리고 바꿔 끼웠을 때같은 1,999건을 네 가지로 그렸다
수치 × 수치흩뿌리기 + r분 × 거리거리(km)0601201802400102030이용시간(분)서로 다른 자리 1,929곳 · r 0.63 — 점 하나가 대여 한 건 범주 × 수치무리마다 상자때 × 분이용시간(분)020406010새벽8출근길11낮13퇴근길16밤가운데 선이 중앙값 — 출근길 8분이 가장 짧다 범주 × 범주칸에 쌓기주말 × 같은곳가로: 같은 곳 반납 · 세로: 주말다른 곳같은 곳평일1,45498주말40839보이는 자리 4곳 · 칸마다 건수 · 합 1,999건 도구를 바꿔 끼우면쌍과 안 맞는다분 × 거리에 무리마다 상자거리(km)010203002468101214상자111개 더이용시간(분) — 값마다 상자 하나상자 127개 · 그 가운데 점 5개 미만이 65개 수치 × 수치흩뿌리기 + r분 × 거리거리(km)0601201802400102030이용시간(분)서로 다른 자리 1,929곳 · r 0.63 — 점 하나가 대여 한 건 범주 × 수치무리마다 상자때 × 분이용시간(분)020406010새벽8출근길11낮13퇴근길16밤가운데 선이 중앙값 — 출근길 8분이 가장 짧다 범주 × 범주칸에 쌓기주말 × 같은곳가로: 같은 곳 반납 · 세로: 주말다른 곳같은 곳평일1,45498주말40839보이는 자리 4곳 · 칸마다 건수 · 합 1,999건 도구를 바꿔 끼우면쌍과 안 맞는다분 × 거리에 무리마다 상자거리(km)01020300369상자116개 더이용시간(분) — 값마다 상자 하나상자 127개 · 그 가운데 점 5개 미만이 65개

위 세 판은 점 하나가 대여 한 건(흩뿌리기), 상자 하나가 무리 하나(무리마다 상자), 칸 하나가 조합 하나(칸에 쌓기)입니다. 같은 자료인데 보이는 것이 다릅니다 — 첫째는 '오래 타면 멀리 간다'를, 둘째는 '출근길이 가장 짧다'를, 셋째는 '주말 되돌림이 조금 잦다'를 말해요. 넷째는 도구를 바꿔 끼운 판입니다 — 수치 × 수치에 무리마다 상자를 놓으면 상자가 127개 서고, 그 가운데 65개는 점이 다섯도 안 되는 부스러기가 됩니다. 오류는 나지 않고, 그림만 아무 말도 하지 않아요. 자료: 따릉이 표본 1,999건(원장 계산, 3정거장 코드 ② · ③과 같은 값)

표 3도구를 바꿔 끼우면 — 오류 한 줄 없이 무너진다
쌍의 종류맞는 도구엉뚱한 도구를 놓으면
수치 × 수치
분 × 거리
흩뿌리기(산점도) + 상관계수 무리마다 상자 → 분의 값이 127가지라 상자가 127개, 그 가운데 65개는 점이 다섯도 안 되는 부스러기.
칸에 쌓기 → 칸이 220,726개인데 99.1%가 빈칸.
범주 × 수치
때 × 분
무리마다 상자(상자그림) + 무리별 요약 흩뿌리기 → 점 1,999개가 세로 다섯 줄로 포개져 서로 다른 자리가 384곳뿐. 어느 줄이 두꺼운지 눈으로 못 센다.
범주 × 범주
주말 × 같은곳
칸에 쌓기(교차표) + 비율 흩뿌리기 → 값이 두 가지씩이라 보이는 점이 4개. 1,999건이 네 점 뒤에 전부 숨는다.

어느 경우에도 파이썬은 오류를 내지 않습니다. 그림은 그려지고, 숫자도 나오고, 다만 아무것도 말해 주지 않을 뿐이에요. 3정거장의 판에서 셋을 직접 무너뜨려 봅니다. 자료: 따릉이 표본 1,999건(원장 검산 ⓓ · ⓔ)

2-4같은 표, 다른 분모 — 행 비율과 열 비율

교차표는 칸마다 건수를 적은 표입니다. 그런데 건수만으로는 견줄 수가 없어요 — 평일이 5일, 주말이 2일이니 평일 칸이 크게 나오는 건 당연하니까요. 그래서 비율로 바꿉니다. 여기서 갈림길이 나옵니다. 무엇으로 나누느냐, 곧 분모를 어느 쪽으로 잡느냐입니다.

행 비율은 가로 줄마다 100%로 만듭니다 — "주말에 빌린 447건 가운데 같은 곳 반납은 몇 %인가". 답은 8.7%. 열 비율은 세로 줄마다 100%로 만듭니다 — "같은 곳 반납 137건 가운데 주말에 빌린 것은 몇 %인가". 답은 28.5%.

두 숫자는 같은 칸(39건)에서 나왔습니다. 분모만 447과 137로 다를 뿐이에요. 그런데 답하는 질문이 다릅니다. 주말 이용자의 행동이 궁금한 사람에게 필요한 것은 8.7%이고, 되돌림 대여가 언제 몰리는지 알고 싶은 운영자에게 필요한 것은 28.5%입니다.

그래서 "○○의 28.5%"라고만 적힌 문장은 읽을 수 없습니다. 무엇의 28.5%인지 — 분모가 무엇인지 — 를 말해야 문장이 됩니다.

규칙비율을 보고할 때는 분모를, 무리를 보고할 때는 경계를 함께 적는다.

같은 39건다른 분모
주말8.7%되돌림28.5%
39 ÷ 447 = 8.7%39 ÷ 137 = 28.5%

자료: 따릉이 표본 1,999건 — 코드 ③이 찍는 값

표 4주말 × 같은 곳 반납 — 한 표를 세 번 읽는다건수 · 행 비율 · 열 비율
읽는 법줄다른 곳 반납같은 곳 반납합
건수평일1,454981,552
주말40839447
행 비율 분모 = 그 줄의 대여평일93.7%6.3%100%
주말91.3%8.7%100%
열 비율 분모 = 그 칸의 반납 방식평일78.1%71.5%—
주말21.9%28.5%—

청록으로 칠한 39건 하나가 주황 두 칸(8.7%와 28.5%)을 모두 낳았습니다. 열 비율의 합계 칸이 비어 있는 것은, 열 비율은 세로로 100%가 되기 때문이에요(78.1 + 21.9 = 100). 자료: 따릉이 표본 1,999건 — 코드 ③의 pd.crosstab 출력과 같은 값

분모를 바꾸면 순위까지 갈립니다. 때로 나눠 보면, 행 비율에서는 낮과 밤이 8.3%로 거의 같아 어느 쪽이 1등이라 말하기 어렵습니다. 그런데 열 비율에서는 낮이 32.8%, 밤이 23.4%로 낮이 뚜렷한 1등이에요. 두 문장 모두 참입니다 — 묻는 것이 다를 뿐입니다.

같은 곳 반납 · 한 번 탈 때
11다른 곳(분)
vs
45같은 곳(분)
다른 곳11분같은 곳45분

잘못 빌려 금방 돌려준 것이 아니다 — 한 바퀴 나들이.

이용시간 중앙값 · 때로 갈랐을 때
8출근길(분)
vs
16밤(분)
출근길8분밤16분

가르는 속성을 넣자 두 배가 벌어진다.

낮 대여의 되돌림 · 두 분모
8.3%행 비율 — 낮 544건 중
인데
32.8%열 비율 — 되돌림 137건 중
행 비율8.3%열 비율32.8%

행 비율로는 밤(8.3%)과 공동 1등, 열 비율로는 홀로 1등.

분 × 거리에 상자를 놓으면
127생긴 상자(개)
가운데
65점 5개 미만(개)
상자127개부스러기65개

도구가 쌍과 안 맞으면 부스러기가 된다.

자료: 따릉이 표본 1,999건 — 위 네 쌍의 숫자는 모두 3정거장 코드 ① · ② · ③이 찍는 값이다.

짝 고르기 나침반 — 네 걸음을 차례로

  1. 물음무엇을 알고 싶은가 — 한 문장으로 적는다. 여기서 나머지 셋이 나온다
  2. 결과무엇이 다른가 — 견줄 값을 담은 속성(이용시간 · 같은 곳 반납)
  3. 가름무엇으로 나누나 — 무리를 만드는 속성(때 · 주말). 없으면 답이 안 나온다
  4. 도구두 속성이 수치인가 범주인가 — 흩뿌리기 · 무리마다 상자 · 칸에 쌓기

이 차례를 거꾸로 밟으면 여는 장면의 0.63이 됩니다 — 도구를 먼저 잡고 물음을 나중에 붙인 숫자예요. 10차시에서 두 파일을 이어 붙일 때도, 11차시에서 자치구 표를 만들 때도 이 네 걸음으로 시작합니다.

체크포인트 2

질문이 속성을 셋으로 가르고, 속성 쌍의 종류가 도구를 고르며, 같은 표도 분모에 따라 다른 문장이 된다는 것을 안다. 이제 직접 조립한다.

다음 정거장 · 손으로 20분 →
3
손으로 · 20분

자석을 꽂고, 같은 짝을 코드로 다시 세운다

오늘의 장비

pandas — 속성을 만들고, 관계를 재는 함수 넷

그림 도구는 Ⅱ-6부터 쓰던 matplotlib 그대로입니다. 오늘 새로 잡는 것은 그림이 아니라 속성을 만들고 관계를 숫자로 재는 손이에요. 넷 다 pandas 안에 있습니다.

부르는 모양

import pandas as pd

# 수치 → 순서 있는 무리, 새 열이 생긴다
t["때"] = pd.cut(t["시"],
                bins=[-1, 6, 9, 16, 19, 23],
                labels=["새벽", …])
r = t["분"].corr(t["거리m"])
pd.crosstab(t["주말"], t["같은곳"])

오늘 쓰는 함수 넷

pd.cut
수치 → 순서 있는 무리 — bins로 경계, labels로 이름
corr
수치 × 수치 — 함께 움직인 정도 하나(−1~1)
groupby.agg
무리마다 요약 — count·median·mean을 한 번에
pd.crosstab
범주 × 범주 — 칸마다 건수, normalize로 비율

지난 손놀림과 다른 셋

  1. 그림이 아니라 열을 만든다pd.cut은 화면에 아무것도 그리지 않는다 — 표에 새 칸이 생긴다
  2. 한 줄이 아니라 무리마다groupby("때") 뒤에는 요약이 다섯 줄로 나온다
  3. 표를 두 축으로 접는다crosstab은 줄을 세는 것이 아니라 조합을 센다

대가 — 무리를 만드는 순간 경계가 내 선택이 되고, 비율을 내는 순간 분모가 내 선택이 됩니다. 둘 다 적어야 해요.

1

쌍 조립대에서 짝을 짓고, 같은 열을 코드로 만든다

10분

여는 장면에 적어 둔 내 예측입니다. 판의 채점은 세 항목으로 합니다 — 가르는 속성이 있나 · 결과 속성이 물음과 맞나 · 도구가 쌍과 맞나. 내 문장은 몇 항목을 짚고 있나요?

실험실 · 8분 「쌍 조립대」는 대여 1,999건을 판 위에 올려 두고, 여러분이 꽂는 자석 둘로 그 점들이 설 자리를 정하는 판입니다. 자석은 속성 하나를 가리키는 딱지이고, 소켓은 자석을 꽂는 자리 — 가로에 하나, 세로에 하나예요. 기록에 있는 열은 이미 서랍에 있고, 때 · 주말 · 같은곳처럼 없는 것은 만들기 틀로 만들어야 꽂힙니다. 펼치기 도구 셋(흩뿌리기 · 무리마다 상자 · 칸에 쌓기)을 놓으면 그 점들 위에 그림이 서고, 엉뚱한 도구도 막지 않고 실제로 그려서 무너진 모양을 셉니다. 의뢰서는 판이 내주는 물음 한 장입니다 — 넷을 차례로 풀어 보세요. ① ~ ③은 예측을 잠가야 답이 열리고, ④는 도전이에요.

시뮬레이터

쌍 조립대

점 1,999개를 어느 두 자리에 세울까 — 자석 둘이 자리를 정하고, 쌍의 종류가 도구를 정한다

  1. 1의뢰서를 고르고, 만들기 틀로 자석을 만든다
  2. 2가로·세로 소켓에 자석을 꽂고 펼치기 도구를 놓는다
  3. 3예측을 잠그고 제출하면 세 항목으로 채점한다
의뢰서
자석 만들기 틀
가로 소켓
세로 소켓
펼치기 도구
예측 잠금 — 고르면 답이 열린다
여는 판 · 분 × 거리누군가 답이라며 가져온 그림

채점 세 항목 — ① 가르는 속성이 있나(의뢰서가 묻는 무리를 만드는 자석) · ② 결과 속성이 물음과 맞나 · ③ 도구가 쌍과 맞나(수치 × 수치 → 흩뿌리기 / 범주 × 수치 → 무리마다 상자 / 범주 × 범주 → 칸에 쌓기)

포개짐 계기 — 점 1,999개가 서로 다른 자리 몇 곳에 서 있는지를 센다(같은 자리에 겹친 점은 한 곳으로). 이 수가 작을수록 흩뿌리기가 감추는 것이 많다 · 칸에 쌓기에서는 행·열 머리를 눌러 분모를 칠하면 문장이 조립된다

채점 통과—/ 3항목
쌍의 종류수치 × 수치
서로 다른 자리—
이 그림의 숫자—
무너진 정도—
통과한 의뢰서0
도전 1

무너뜨려 보기 — 분 × 거리에 무리마다 상자를 놓아라. 상자가 몇 개 서고, 그 가운데 점이 다섯도 안 되는 부스러기는 몇 개인가?

도전 2

분모 뒤집기 — 주말 × 같은곳을 칸에 쌓고, 행 머리와 열 머리를 둘 다 눌러 8.7%와 28.5% 두 문장을 모두 조립하라.

도전 3

두 칸 한 장 — 세 항목을 모두 통과한 짝을 결과 속성이 서로 다르게 둘 만들어라. 그 둘이 곧 코드 ②의 subplots(1, 2)다.

자료: 서울시 따릉이 대여이력 2024-06-10~16 무작위 표본 2,000행에서 Ⅱ-5 판정표의 '오류' 1행(시속 30 초과)을 뺀 1,999건 — 이용시간 · 이용거리 · 대여 시각 · 요일 · 빌린 곳 번호 여섯 줄기를 쪽 안에 실었다. 아래 코드 ① ~ ③이 읽는 ../data/bike_trips_sample.csv와 같은 값이다(원장 run/l09에서 브라우저로 확인).

기본 · 2분 판에서 만든 자석 넷(시 · 주말 · 때 · 같은곳)이 곧 이 칸의 네 열입니다. 빈칸 ①에 수치를 순서 있는 무리로 묶는 함수 이름을 채우고 ▶ 실행하세요.

도전 bins의 -1을 0으로 바꿔 보세요. 오류는 나지 않습니다. 그런데 합이 1,999가 아니게 됩니다 — 몇 건이 사라졌나요? 구간은 오른쪽 끝을 포함하고 왼쪽 끝을 뺍니다((0, 6]). 그래서 0시에 빌린 대여가 '때 없음'이 되어 조용히 빠져요.

탐구 출근길을 7~9시가 아니라 6~10시로 잡으면(bins=[-1, 5, 10, 16, 19, 23]) 무리가 어떻게 바뀌나요? 판의 구간 틀에도 같은 단추가 있습니다. 여러분이라면 어디서 자르고, 보고서에 무엇을 적겠습니까?

이 물음에 쓸 속성은 이고, 뺄 속성은 이다. 뺀 까닭은 이기 때문이다.

확인 문제 2의 표에 적어 제출 →
2

한 장에 두 칸 — 수치 × 수치와 범주 × 수치를 나란히

3.5분

출근길에 한 번 탈 때 이용시간의 중앙값은 몇 분일까요? 다섯 때 가운데 가장 길까요, 가장 짧을까요? 판의 의뢰서 ①에서 잠갔던 그 물음입니다 — 한 번 더 짐작해 두세요.

기본 빈칸 ②에 두 수치가 함께 움직인 정도를 재는 함수 이름을 채우고 ▶ 실행합니다. 한 장에 두 칸이 섭니다 — 왼쪽은 가르는 속성 없이 그린 흩뿌리기, 오른쪽은 때로 가른 상자그림이에요. 처음 실행은 몇 초 멈춥니다(matplotlib과 한글 글꼴을 받는 중 · 쪽마다 한 번).

도전 상자그림의 "때"를 "주말"로 바꿔 보세요 (groupby와 set_xticks 두 곳). 상자가 둘로 줄고 평일 11분 · 주말 14분이 나옵니다 — 두 상자만으로 '출근길 대 주말'의 절반에 답한 셈이에요.

탐구 왼쪽 흩뿌리기의 오른쪽 아래(오래 탔는데 거의 안 간) 점들은 어떤 대여일까요? 같은곳 열을 만들어 확인할 방법을 적어 보세요. 60분 넘게 타고 1km도 못 간 대여가 12건 있습니다.

여는 장면의 질문에 답하는 것은 칸이다. 그 칸에는 가 있고, 다른 칸에는 가 없기 때문이다.

확인 문제 1에 적어 제출 →
3

교차표를 세 번 읽고, 문장 두 개를 쓴다

6.5분

'같은 곳 반납'은 주말에 빌린 것 가운데 몇 %일까요? 거꾸로 같은 곳 반납 가운데 주말 대여는 몇 %일까요? 두 숫자는 같을까요, 다를까요? 다르다면 어느 쪽이 클까요 — 짐작해 두세요.

기본 · 2.5분 빈칸 ③에 가로 줄마다 100%로 만드는 값을 채우고 ▶ 실행합니다. 같은 표가 건수 · 행 비율 · 열 비율 세 번 찍힙니다.

도전 "주말"을 "때"로 바꿔 보세요(pd.cut으로 때 열을 만드는 줄도 함께). 행 비율 1등은 낮과 밤이 8.3%로 거의 같은데(45/544 · 32/387), 열 비율 1등은 낮 32.8% · 밤 23.4%로 갈립니다 — 분모가 바뀌면 순위도 바뀝니다.

탐구 주말은 행 비율이 더 높은데(8.7% 대 6.3%), 하루 평균 같은 곳 반납 건수는 평일 19.6건 · 주말 19.5건으로 거의 같습니다(표본 기준 · 평일 5일, 주말 2일). "주말에 되돌림이 많다"는 문장은 참인가요? 분모를 대여 수로 잡느냐 날 수로 잡느냐에 달렸습니다.

마무리 · 4분 이제 문장 두 개를 자기 말로 씁니다 — 행 비율로 한 문장, 열 비율로 한 문장. 각각 누구에게 필요한 정보인지도 함께 적으세요(확인 문제 3). 그리고 여는 장면의 질문에 두 줄로 답합니다 — 쓴 속성 · 쓴 도구 · 숫자(확인 문제 6).

행 비율 문장은 에게 필요하고, 열 비율 문장은 에게 필요하다. 두 문장이 모두 참인 까닭은 이기 때문이다.

확인 문제 3에 적어 제출 →
체크포인트 3

자석 둘로 짝을 짓고, 쌍의 종류에 맞는 도구를 골라 세 가지 그림을 직접 세웠고, 같은 표를 두 분모로 읽어 문장 두 개를 썼다.

다음 정거장 · 정리·확인 10분 →
4
정리·확인 · 10분

오늘의 탐험 일지

  1. 찾은 것

    계산이 맞는 숫자도 다른 물음의 답일 수 있다 — 가르는 속성이 없는 r 0.63은 '출근길과 주말'을 묻는 질문에 답하지 않는다. 가르자마자 출근길 8분 · 주말 14분으로 갈렸다.

  2. 도구의 한계

    쌍의 종류와 안 맞는 도구는 오류 한 줄 없이 무너진다 — 부스러기 상자 65개 · 빈칸 99.1% · 보이는 점 4개. 그림이 그려졌다는 것은 맞았다는 뜻이 아니다.

  3. 보고의 규칙

    비율에는 분모를, 무리에는 경계를 함께 적는다. 같은 39건이 8.7%도 되고 28.5%도 되며, 같은 시각이 출근길 321건도 되고 429건도 된다.

✍️ 문제마다 답을 쓰고 제출하기를 누르세요. 제출하면 모범 답안이 열리고, 제출한 답은 선생님께 전달됩니다.

1. 여는 장면의 "이용시간 × 이동거리 상관계수 0.63"이 "출근길과 주말은 다르게 쓰일까"에 답하지 못하는 까닭을 쓰고, 대신 무엇을 보아야 하는지 도구 이름과 함께 쓰시오.
📖 모범 답안

0.63은 결과 속성 둘 사이의 관계다. 이용시간도 이동거리도 '어떻게 쓰였나'를 담은 열이고, 그 식 어디에도 가르는 속성(때 · 주말 · 요일)이 들어가 있지 않다. 그래서 이 숫자는 "오래 탄 사람이 멀리 가는가"에는 답하지만 "출근길과 주말이 다른가"에는 답하지 않는다.

대신 가르는 속성을 넣어 봐야 한다. ① 때(또는 주말)로 가른 뒤 이용시간을 나란한 상자그림과 무리별 중앙값으로 견주거나(범주 × 수치 — 출근길 8분 · 밤 16분 · 평일 11분 · 주말 14분), ② 때(또는 주말) × 같은 곳 반납의 교차표를 만들어 비율로 읽는다(범주 × 범주).

2. "출근길 따릉이와 주말 따릉이는 다르게 쓰일까?"에 쓸 속성과 뺄 속성을 아래 표에 채우시오. 뺄 속성에는 뺀 까닭을 반드시 적으시오.
몫고른 속성(둘 이상)그렇게 본 까닭
결과 속성
가르는 속성
뺄 속성
📖 모범 답안

결과 속성 — 이용시간(분), 이용거리(M), 같은 곳 반납 여부. 까닭: '쓰임이 어떻게 다른가'를 담은 값이다. 무리를 가른 뒤 견줄 대상이 된다.

가르는 속성 — 대여일시에서 꺼낸 시 · 요일 · 주말 여부 · 때(새벽~밤). 까닭: 무리를 만드는 열이다. 질문이 "출근길과 주말"이라고 했으므로 이 둘을 만들 수 있어야 답이 나온다.

뺄 속성 — 자전거번호, 대여소 이름, 거치대 번호, 그리고 대여소 번호 그 자체. 까닭: 자전거번호와 대여소 번호는 이름표(식별자)라서 값의 크기에 뜻이 없다(Ⅰ-5). 대여소 번호의 평균 2,221번 같은 값은 아무 뜻이 없다. 다만 빌린 곳과 돌려준 곳을 '같은가'로만 견주면 훌륭한 결과 속성이 된다 — 같은 열이라도 어떻게 쓰느냐에 따라 달라진다. 생년·성별·이용자종류는 이 질문이 '누가'를 묻지 않으므로 뺀다(다른 질문이라면 쓸 수 있다).

3. 주말 × 같은 곳 반납 교차표의 행 비율과 열 비율로 문장을 하나씩 쓰고, 각각 누구에게 필요한 정보인지 쓰시오. 두 문장의 분모가 각각 무엇인지도 밝히시오.
📖 모범 답안

행 비율 문장 — "주말에 빌린 447건 가운데 8.7%가 빌린 곳에 그대로 돌려주었다(평일은 6.3%)." 분모는 그 줄의 대여 건수(447건)다. 주말 이용자가 어떻게 타는지 알고 싶은 사람 — 예를 들어 주말 프로그램을 짜는 기획자 — 에게 필요하다.

열 비율 문장 — "같은 곳에 돌려준 137건 가운데 28.5%가 주말 대여였다(평일 71.5%)." 분모는 같은 곳 반납 전체(137건)다. 되돌림 대여가 언제 몰리는지 알고 싶은 운영자 — 예를 들어 재배치 계획을 세우는 사람 — 에게 필요하다.

두 문장 모두 같은 칸 39건에서 나왔고 둘 다 참이다. 분모만 447과 137로 다를 뿐이다. 그래서 비율을 적을 때는 "무엇의 몇 %"인지를 반드시 함께 적어야 한다 — 숫자만 옮기면 읽는 사람이 다른 분모를 상상한다.

4. 코드 ②는 때마다 이용시간을 평균이 아니라 중앙값으로 견주고, 그림도 상자그림으로 그렸다. 왜 그렇게 했는지 표의 숫자를 근거로 들어 쓰시오.
📖 모범 답안

이용시간은 오른쪽으로 꼬리가 긴 분포다(Ⅱ-5 · Ⅱ-6). 코드 ②의 표가 그것을 바로 보여 준다 — 출근길은 중앙값 8.0분인데 평균은 16.0분, 낮은 중앙값 11.0분인데 평균 22.7분이다. 평균이 중앙값의 두 배쯤 되는 것은 아주 오래 탄 몇 건이 평균을 끌어올리기 때문이다(가장 긴 대여는 238분).

그래서 평균으로 견주면 "출근길이 가장 짧다"는 결론이 흐려진다. 중앙값은 가운데 사람의 값이라 그런 몇 건에 덜 끌린다. 상자그림은 중앙값만이 아니라 Q1 · Q3 · 수염까지 한 장에 보여 주어, 무리마다 가운데와 퍼짐을 함께 견줄 수 있다 — 출근길은 상자도 가장 짧고(5~15분), 밤은 가장 길다(7~31분).

5. 분 × 거리의 상관계수가 0.63으로 꽤 높게 나왔다. 이것만으로 "오래 탈수록 멀리 간다"고 해도 되는지, 조심할 점을 함께 쓰시오.
📖 모범 답안

대체로 맞지만 그대로 두면 위험하다. 조심할 점 셋.

① 섞인 집단 — 흩뿌리기를 보면 오른쪽 아래에 '오래 탔는데 거의 안 간' 점들이 있다. 60분 넘게 타고 1km도 못 간 대여가 12건이고, 그 가운데 4건은 같은 곳 반납이다. 한 바퀴 돌아온 나들이 대여는 시간이 늘어도 거리가 늘지 않으므로 다른 규칙으로 움직인다. r 하나는 이런 무리를 섞어 버린다 — 반드시 산점도로 함께 확인한다.

② 거른 규칙에 따라 값이 바뀐다 — 여기서는 Ⅱ-5 판정표대로 시속 30 초과 한 줄만 뺐다. 더 많이 걸러 내거나 덜 걸러 내면 r도 움직인다. 그러니 어떤 규칙으로 걸렀는지를 함께 적는다.

③ r은 '함께 움직인 정도'일 뿐 '왜'가 아니다 — 오래 타서 멀리 간 것인지, 멀리 가려고 오래 탄 것인지 r은 가르지 못한다. 그리고 이 숫자는 이 질문의 답이 아니다 — 가르는 속성이 없기 때문이다.

6. 여는 장면의 질문 "출근길 따릉이와 주말 따릉이는 다르게 쓰일까?"에 두 줄로 답하시오. 한 줄에 쓴 속성 · 쓴 도구 · 숫자가 모두 들어가야 한다.
📖 모범 답안

첫 줄(예) "대여일시에서 만든 때와 이용시간을 나란한 상자그림으로 견주니, 한 번 탈 때 중앙값이 출근길 8분으로 다섯 때 가운데 가장 짧고 밤이 16분으로 가장 길었다. 주말은 평일 11분보다 긴 14분이다 — 출근길은 짧게 끊어 타고 주말은 길게 탄다."

둘째 줄(예) "주말과 같은 곳 반납을 교차표로 읽으니, 주말에 빌린 447건 가운데 8.7%가 빌린 곳에 그대로 돌아왔다(평일 6.3%). 같은 곳 반납은 중앙값 45분으로 다른 곳 반납 11분보다 훨씬 길다 — 잘못 빌려 금방 돌려준 것이 아니라 한 바퀴 도는 나들이다."

덧붙여 적을 것 — 쓴 표본(2024-06-10~16 · 1,999건), 거른 규칙(시속 30 초과 1건 제외), 무리의 경계(출근길 7~9시), 비율의 분모(주말 대여 447건). 이 넷을 적어야 남이 같은 그림을 다시 그릴 수 있다.

+
더 알아보기

조립대 밖의 이야기 셋

① 그냥 찍으면03060048② 반투명으로03060048겹친 자리일수록 진하다③ 육각 격자로03060048가장 붐비는 칸 210건자료: 이용시간 60분 · 거리 8km 안의 1,797건(전체 1,999건 가운데) · 가로 분 · 세로 km
방법 더 깊이

점이 점을 가릴 때 — 과대 표시와 그 처방 셋

흩뿌리기는 한 건에 점 하나입니다. 그런데 점이 많아지면 같은 자리에 여러 점이 포개져 진한 곳과 옅은 곳의 차이가 사라집니다. 이것을 과대 표시(overplotting)라고 해요. 오늘 판의 '포개짐 계기'가 세던 것이 바로 이 포갬입니다 — 분 × 거리는 점 1,999개가 서로 다른 1,929곳에 서지만, 화면에서는 점 하나가 1~2px쯤 되니 훨씬 더 많이 겹칩니다.

처방은 셋입니다. ① 반투명하게 찍기 — 오늘 코드 ②의 alpha=0.3이 그것이고, 겹칠수록 진해지니 눈으로 밀도를 읽을 수 있습니다. ② 육각 격자(hexbin) — 화면을 육각형 칸으로 나누고 칸마다 몇 건인지 세어 색의 진하기로 칠합니다. 점을 포기하는 대신 몇 건인지를 정확히 얻지요. 정육각형을 쓰는 까닭은 네모 격자보다 칸 중심에서 가장자리까지의 거리가 고른 데다 세로줄이 눈에 덜 띄기 때문입니다(Carr 등, 1987). matplotlib에서는 ax.hexbin(x, y) 한 줄이에요. ③ 일부만 찍기 — 가장 단순하지만 드문 값이 사라지므로 튀는 값을 볼 때는 쓰지 않습니다.

도해: 따릉이 표본 가운데 이용시간 60분 · 거리 8km 안에 드는 1,797건을 같은 자리에 세 가지로 그렸다. ①은 불투명한 점, ②는 겹친 수에 따라 세 단계로 진하게, ③은 육각 칸마다 건수를 진하기로 칠한 것이다. · 육각 격자: D. B. Carr et al., "Scatterplot Matrix Techniques for Large N", JASA 82(398), 1987

관측 — 실제로 센 건수합 1,999건다른 곳같은 곳평일1,45498주말40839기대 — 두 속성이 무관하다면행 합 × 열 합 ÷ 전체다른 곳같은 곳평일1,445.6106.4주말416.430.6주말이면서 같은 곳 반납인 칸만 기대보다 1.27배 —이 차이를 칸마다 더한 것이 카이제곱 검정의 출발점이다.
방법 더 깊이

교차표 안의 '기대 칸' — 어느 칸이 이야기인가

교차표를 만들면 칸마다 건수가 나옵니다. 그런데 그 숫자가 큰지 작은지는 무엇과 견주어야 알까요? 기준이 하나 있습니다 — 두 속성이 서로 아무 상관이 없다면 각 칸은 얼마여야 하는가. 그 값을 기대 칸이라고 하고, (그 행의 합 × 그 열의 합) ÷ 전체로 구합니다.

오늘의 표로 해 보죠. 주말 대여는 447건, 같은 곳 반납은 137건, 전체는 1,999건입니다. 주말이면서 같은 곳 반납인 칸의 기대값은 447 × 137 ÷ 1,999 = 30.6건이에요. 실제로 센 값은 39건이니 기대보다 1.27배 많습니다. 나머지 세 칸은 기대와 거의 같아요 (1,454 대 1,445.6 · 98 대 106.4 · 408 대 416.4). 그러니까 이 표에서 이야기가 있는 칸은 하나입니다.

칸마다 (관측 − 기대)²을 기대로 나누어 모두 더하면 카이제곱 통계량이 됩니다. 이 값이 크면 "두 속성이 무관하다"는 가정이 데이터와 잘 맞지 않는다는 뜻이고, 그것을 판정하는 절차가 카이제곱 검정이에요. 기대 칸을 눈으로 보는 것만으로도 벌써 반은 한 셈입니다 — 어느 칸을 들여다봐야 하는지를 표가 알려 주니까요.

도해: 오늘의 주말 × 같은 곳 반납 교차표를 관측과 기대로 나란히 그렸다. 기대 칸은 행 합 × 열 합 ÷ 전체로 계산한 값이고, 주황으로 칠한 칸만 기대보다 1.27배 많다. · 자료: 따릉이 표본 1,999건(원장 계산)

시간대 × 대여소 — 오늘 배운 그 교차표칸 = 자전거가 빠져나간 때 · 들어온 때새벽출근길낮퇴근길밤대여소 ㄱ대여소 ㄴ대여소 ㄷ대여소 ㄹ대여소 ㅁ빠져나감들어옴비슷도해: 흐름의 짜임을 보인 그림이 표본 1,999건의 때마다 대여 건수184새벽321출근길544낮563퇴근길387밤재배치 트럭은 두 봉우리 앞에서 움직인다 — 출근길 전과 퇴근길 전.어느 대여소에 몇 대를 옮길지는 이 표의 칸이 정한다.
진로

교통 데이터 분석가 — 표의 칸이 트럭을 움직인다

따릉이에는 하루에도 여러 번 재배치 트럭이 다닙니다. 자전거가 한쪽으로 쏠려 어떤 대여소는 텅 비고 어떤 대여소는 꽉 차기 때문이에요. 언제 어느 대여소에 몇 대를 옮길지 — 그 결정이 오늘 배운 교차표에서 나옵니다. 다만 쌍이 바뀔 뿐이지요. 오늘은 '주말 × 같은곳'을 놓았지만, 운영에서는 시간대 × 대여소를 놓습니다.

칸에는 건수 대신 빌린 수 − 돌려준 수를 넣습니다. 값이 음수면 그 시간대에 자전거가 빠져나간 곳, 양수면 쌓인 곳이에요. 출근길에는 주택가 대여소가 비고 역 앞 대여소가 넘치며, 퇴근길에는 정확히 뒤집힙니다. 그래서 트럭은 두 봉우리 앞에서 움직여요 — 오늘 표본에서도 대여가 몰리는 때는 퇴근길 563건과 낮 544건이고, 출근길은 321건으로 짧고 가파릅니다.

교통 데이터 분석가는 이 표에 날씨(Ⅱ-10에서 이어 붙입니다)와 행사 일정을 더해 "내일 아침 7시에 어느 대여소에 몇 대"까지 내놓습니다. 버스 배차, 지하철 증편, 택시 수요 예측도 같은 짜임이에요 — 무엇과 무엇을 나란히 놓을지를 정하는 일이 먼저고, 모델은 그다음입니다.

도해: 시간대 × 대여소 교차표를 읽는 방식을 보인 그림이다 — 칸의 화살표는 흐름의 짜임을 나타낸 것이고 특정 대여소의 실제 값이 아니다. 아래 막대는 이 표본 1,999건의 때마다 대여 건수(실측)다. · 자료: 따릉이 표본 1,999건