단원 홈

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

기온이 오르면
따릉이를 더 탈까

두 파일을 날짜로 잇고, 관계를 세 번 읽는다

날씨 파일과 따릉이 파일은 따로 만들어진 남남입니다. 둘을 이어 주는 것은 날짜 하나뿐이에요. 그런데 그 열쇠를 잘못 맞추면 파이썬은 오류 한 줄 없이 빈 표를 내놓습니다. 오늘은 두 파일을 제대로 잇고, 이은 표에서 같은 관계를 세 번 읽습니다 — 한 숫자로, 구간으로, 셋째 속성으로.

  • [12데과02-03]
  • 50분네 정거장
  • 새 도구날짜 열쇠(pd.to_datetime)
  • 자료ASOS 서울 2024 366일 × 따릉이 대여 366일 · 대여 기록 표본 2,000건
Ⅱ 단원 지도10 / 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 로 두 공공데이터를 날짜로 잇고, 같은 관계를 상관계수 · 구간 중앙값 · 층화 세 가지로 읽을 수 있다.

  3. 확인에서

    "기온이 1°C 오르면 ○건 는다"는 한 줄 요약이 위험한 까닭을 두 가지로 적을 수 있다.

1
여는 장면 · 5분

두 파일의 첫 줄을 나란히 놓으면

서울시가 내놓은 따릉이 대여 기록과 기상청이 잰 서울 날씨는 서로 아무 약속 없이 만들어진 파일입니다. 한쪽은 자전거 한 대가 언제 어디서 빌려졌는지를 한 줄씩 적고, 다른 쪽은 하루치 기온과 비를 한 줄씩 적습니다. 두 파일을 한 표로 묶어 주는 것은 날짜 하나뿐이에요.

그런데 날짜는 파일마다 다르게 적혀 있습니다. 대여 기록의 대여일시에는 시각까지 붙어 있고, 날짜별 대여와 날씨 파일의 날짜 열에는 날짜만 있습니다. 셋 다 파이썬이 보기에는 그냥 글자예요. 이 셋으로 표를 이으면 무슨 일이 생길까요?

표 1오늘 쓰는 세 파일의 첫 줄날짜를 담은 열과 그 첫 값
파일행날짜를 담은 열첫 값모양
대여 기록 표본2,000대여일시2024-06-10 00:04:14날짜 + 시각
날짜별 대여366대여일자2024-01-01날짜만
날씨(ASOS 서울)366일시2024-01-01날짜만

셋 다 글자입니다. 파이썬은 글자끼리 이을 때 한 글자라도 다르면 다른 열쇠로 봅니다 — "2024-06-10 00:04:14"와 "2024-06-10"은 같은 날을 가리키지만 같은 글자가 아니에요. 자료: 서울특별시 공공자전거 대여이력 정보(2024, OA-15182) · 기상청 종관기상관측(ASOS) 일자료(2024, 서울)

먼저 예측

대여 기록 2,000행을 날짜별 대여 366행과 대여일시 = 대여일자로 이으면 몇 행이 나올까요? 그리고 오류가 날까요? 아래 세 갈래 가운데 하나를 고르고, 그렇게 생각한 까닭을 한 문장으로 적어 두세요. 3정거장 미션 ①에서 실제로 돌려 봅니다.

㉮ 0행
0행짝이 하나도 없다
㉯ 2,000행
2,000행모두 짝을 찾는다
㉰ 오류
!TypeError빨간 오류로 멈춘다
체크포인트 1

두 파일을 잇는 열쇠가 날짜 하나뿐이고, 그 날짜가 파일마다 다른 모양의 글자로 적혀 있다는 것을 보았다.

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

잇는 법 하나, 읽는 법 셋

2-1열쇠의 모양을 맞춘다 — 그리고 행 수로 검산한다

두 표를 한 표로 묶을 때 기준이 되는 열을 열쇠라고 부릅니다. 오늘의 열쇠는 날짜 하나예요. 파이썬은 왼쪽 표의 열쇠 값과 오른쪽 표의 열쇠 값이 글자로 똑같을 때만 두 줄을 한 줄로 묶습니다.

그래서 "2024-06-10 00:04:14"과 "2024-06-10"은 맞지 않는 열쇠입니다. 사람 눈에는 같은 날이지만 글자로는 아홉 자가 더 붙어 있으니까요. 짝이 하나도 없으면 결과는 0행이 됩니다 — 그런데 파이썬은 오류를 내지 않습니다. 짝이 없는 것은 문법을 어긴 일이 아니라 그냥 그런 결과이기 때문이에요.

이렇게 오류 메시지 없이 틀린 결과가 나오는 일을 조용한 실패라고 부릅니다. 빨간 오류는 고칠 자리를 알려 주지만, 조용한 실패는 아무 말도 해 주지 않은 채 빈 표를 다음 단계로 넘깁니다. 빈 표로 평균을 내고 그림을 그리면 보고서까지 그대로 갑니다.

막는 방법은 단순합니다. 잇기 전후의 행 수를 늘 함께 찍어 보는 것이에요. 날씨 366행 · 대여 366행 → 이은 표 366행이면 빠진 날도 겹친 날도 없습니다. 0행이거나 모자라면 두 열쇠의 첫 값을 나란히 찍어 모양(시각이 붙었나)과 단위(하루인가 한 시간인가)를 봅니다.

규칙두 표를 이었으면 왼쪽 행 수 · 오른쪽 행 수 · 이은 표의 행 수 셋을 함께 찍어 대조한다.

Ⅰ-7 에서 가져옴두 표를 잇는 pd.merge 한 줄은 Ⅰ-7 에서 한 그대로입니다. 오늘 새로 배우는 것은 잇기 전에 열쇠의 모양을 맞추는 일과 이은 뒤 행 수로 검산하는 일, 둘뿐이에요. how 의 네 가지와 indicator·validate 는 Ⅱ-11 이 맡습니다.

2-2첫 번째 읽기와 두 번째 읽기 — 한 숫자, 그리고 구간

이은 표는 하루가 한 줄인 366줄짜리 표입니다. 이 표에 "기온이 오르면 대여가 느는가"를 물어보는 방법은 하나가 아니에요. 아래 그림 1은 같은 366일을 두 가지로 읽은 것입니다. 왼쪽은 5°C 칸마다 중앙값을 세운 막대, 오른쪽은 하루를 점 하나로 찍은 산점도와 상관계수 r 한 숫자예요.

그림 1같은 366일, 두 가지 읽기왼쪽 구간 중앙값 · 오른쪽 산점도와 r
구간으로 읽기 — 5°C 칸마다 중앙값구간에 든 365일 · 세로는 대여 중앙값(만 건) · 막대 위는 날 수0612183일−525일065일535일1039일1562일2053일2577일306일35평균기온 구간의 오른쪽 끝(°C)꼭대기 20~25°C 17.0만 (53일)가장 더운 칸은 6일뿐 한 숫자로 읽기 — r 0.596하루 한 점 · 세로는 대여(만 건) · 주황은 비 온 날(1mm 이상)05101520−100102030평균기온(°C)비 안 온 날 284 · 비 온 날 8225°C 위에서 점이 내려온다 구간으로 읽기 — 5°C 칸마다 중앙값구간에 든 365일 · 세로는 대여 중앙값(만 건) · 막대 위는 날 수0612183일−525일065일535일1039일1562일2053일2577일306일35평균기온 구간의 오른쪽 끝(°C)꼭대기 20~25°C 17.0만 (53일)가장 더운 칸은 6일뿐 한 숫자로 읽기 — r 0.596하루 한 점 · 세로는 대여(만 건) · 주황은 비 온 날(1mm 이상)05101520−100102030평균기온(°C)비 안 온 날 284 · 비 온 날 8225°C 위에서 점이 내려온다

r 은 0.596으로 꽤 큰 양수입니다 — "기온이 오르면 대여가 는다"는 말에 어울리는 숫자예요. 그런데 구간 막대는 20~25°C 에서 꼭대기(53일 · 17.0만 건)를 찍고 그 뒤로 내려옵니다. r 은 직선의 세기를 재는 숫자라서 이 꺾임을 한 숫자로 뭉갭니다. 왼쪽 막대의 날 수를 다 더하면 365일입니다 — range(-10, 40, 5) 의 구간이 −10°C 부터라 가장 추웠던 하루(1월 23일 −11.7°C)가 어느 칸에도 들어가지 못했거든요. 구간을 정하면 밖으로 나가는 값이 생깁니다. 자료: 기상청 종관기상관측(ASOS) 일자료(2024, 서울) × 서울특별시 공공자전거 대여이력 정보(2024, OA-15182) — 날짜로 이은 366일(원장 계산, 코드 ③ · ④가 찍는 값과 같다)

표 25°C 구간마다 날 수와 대여 중앙값막대 하나하나의 값 — 코드 ④의 출력
평균기온 구간날 수대여 중앙값읽는 법
(−10, −5]350,773사흘뿐 — 중앙값이 흔들린다
(−5, 0]2564,498
(0, 5]6576,141
(5, 10]35105,498오르는 구간
(10, 15]39143,678
(15, 20]62165,642
(20, 25]53170,045꼭대기
(25, 30]77138,818내려온다
(30, 35]6119,647.5엿새뿐 — 중앙값이 흔들린다

가장 더운 칸과 가장 추운 칸은 엿새 · 사흘뿐입니다. 막대 하나가 낮다고 곧바로 "더우면 안 탄다"고 읽으면 안 되고, 그 칸에 며칠이 들어 있는지를 함께 봐야 합니다. 그래서 코드 ④는 막대 위에 날 수를 찍습니다. 날 수를 다 더하면 365입니다 — 1월 23일(−11.7°C) 하루가 구간 밖으로 빠졌어요. 자료: 같은 366일(원장 계산) · 구간은 pd.cut(기온, bins=range(-10, 40, 5)) — 오른쪽 끝을 포함하는 칸

2-3세 번째 읽기 — 셋째 속성으로 가른다

산점도를 다시 보면 같은 기온인데도 아래쪽에 처진 점이 여럿 있습니다. 주황으로 칠한 비 온 날이에요. 한 무리 안에 성격이 다른 두 무리가 섞여 있으면 점구름이 넓어지고, 기온만으로 설명되는 몫이 줄어듭니다.

그래서 세 번째 읽기를 합니다 — 층화, 곧 셋째 속성으로 자료를 무리로 갈라 무리마다 따로 보는 일입니다. 비를 기준으로 가르면 비 안 온 날 284일은 r 0.743, 비 온 날 82일은 r 0.573 으로 둘 다 섞어 놓았을 때(0.596)보다 또렷해집니다.

여기서 한 걸음 더 갑니다. 비 온 날은 여름에 몰려 있어서, 1년 전체로 그냥 견주면 비의 효과에 계절의 몫이 섞입니다. 기온을 15~25°C 로 붙들어 놓고 그 안에서만 비 온 날과 안 온 날을 견주면, 남는 것은 비의 몫에 가깝습니다. 이 값을 오늘은 비의 몫이라고 부르겠습니다 — 기온이 비슷한 날끼리만 견줬을 때 비 온 날의 대여 중앙값이 안 온 날보다 몇 % 적은가입니다.

그림 2비의 몫을 재는 두 가지 — 섞어서, 그리고 기온을 붙들고주황이 비 온 날 · 굵은 주황 선이 중앙값
기온을 붙들고 비만 가른다15~25°C 인 116일만 · 하루 한 점 · 세로는 대여(만 건)06121824비 안 온 날 94일중앙 17.09만비 온 날 22일중앙 8.14만같은 기온인데 −52% 섞어서 견주면 얼마나 달라지나같은 두 무리를 두 가지 방법으로 · 세로는 대여 중앙값(만 건)13.98만마른 284일8.21만젖은 82일1년 전체−41%17.09만마른 94일8.14만젖은 22일15~25°C 만−52%기온을 맞추면 비의 몫이 더 크게 보인다 기온을 붙들고 비만 가른다15~25°C 인 116일만 · 하루 한 점 · 세로는 대여(만 건)06121824비 안 온 날 94일중앙 17.09만비 온 날 22일중앙 8.14만같은 기온인데 −52% 섞어서 견주면 얼마나 달라지나같은 두 무리를 두 가지 방법으로 · 세로는 대여 중앙값(만 건)13.98만마른 284일8.21만젖은 82일1년 전체−41%17.09만마른 94일8.14만젖은 22일15~25°C 만−52%기온을 맞추면 비의 몫이 더 크게 보인다

1년을 통째로 견주면 13.98만 대 8.21만으로 −41%입니다. 기온을 15~25°C 로 맞추면 17.09만 대 8.14만으로 −52% — 더 커집니다. 섞어 보면 비의 효과가 오히려 작아 보인다는 뜻이에요. 비 온 날이 대여가 많은 여름에 몰려 있어, 그 계절의 힘이 비의 손실을 가려 주기 때문입니다. 자료: 같은 366일(원장 계산, 코드 ⑤가 찍는 값과 같다) · 비 온 날 = 일강수량 1mm 이상

2-4숫자 둘을 나란히 놓으면 보이는 것

그림이 없을 때도 의심할 단서가 숫자 안에 있습니다. 같아야 할 것 같은 두 숫자를 나란히 놓아 보세요 — 그 차이가 곧 이 관계의 모양입니다.

한 숫자 · 그리고 25°C 위
0.596r — 큰 양수
인데
12.0만30~35°C 중앙값
−10°C35°C

꼭대기 17.0만에서 내려온다 — r 은 꺾임을 말하지 않는다.

섞어 놓은 r · 갈라 놓은 r
0.596366일 전부
→
0.743비 안 온 284일
비 안 온 날 r 0.743비 온 날 r 0.573

다른 무리를 섞으면 흐려진다 — 비 온 82일은 r 0.573.

비의 몫 · 섞어서 대 기온을 붙들고
−41%1년 전체
vs
−52%15~25°C 만
1년 전체−41%15~25°C−52%

계절이 비의 손실을 가려 준다 — 붙들어야 몫이 드러난다.

하루 밀어 이었을 때
0.596제대로 이은 366행
인데
0.600하루 밀어 이은 365행
밀지 않음r 0.596하루 밀기r 0.600어긋남을 알린 것은 행 수 366 → 365 하나

날짜를 어긋나게 이어도 r 은 꿈쩍 않는다 — 3정거장 실험실에서 확인한다.

자료: 위 네 쌍의 숫자는 모두 3정거장 코드 ② · ③ · ④ · ⑤가 찍는 값이다(기상청 ASOS 서울 2024 × 따릉이 대여 2024, 날짜로 이은 366일).

관계를 읽는 나침반 — 네 걸음을 차례로

  1. 이었나행 수 셋이 맞는가 — 잇기가 틀리면 아래 셋이 모두 헛것이다
  2. 한 숫자r 은 얼마인가 — 직선의 세기만 잰다는 것을 잊지 않는다
  3. 구간구간마다 중앙값이 어떻게 움직이나 — 어디서 꺾이나, 그 칸에 며칠이 있나
  4. 셋째 속성무엇이 함께 움직이나 — 갈라서 보고, 기온을 붙들고 다시 본다

네 걸음을 다 밟아도 남는 한계가 있습니다. 관계는 원인이 아닙니다. 기온은 혼자 오르내리지 않아요 — 계절 · 방학 · 해가 떠 있는 시간 · 미세먼지 · 축제가 함께 움직입니다. "기온이 1°C 오르면 대여가 ○건 는다"는 한 줄 요약은 그 모든 몫을 기온 하나에 몰아줍니다. 게다가 관계가 꺾여 있으니 1°C 의 효과는 구간마다 다릅니다.

체크포인트 2

잇기의 검산은 행 수이고, 읽기는 한 숫자 · 구간 · 셋째 속성 셋이라는 것을 말할 수 있다. 이제 직접 이어서 읽는다.

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

두 파일을 잇고, 관계를 세 번 읽는다

오늘의 장비

날짜 열쇠 — 모양을 맞추고, 행 수로 검산한다

Ⅰ-7 에서 두 표를 잇는 pd.merge 는 이미 써 봤습니다. 오늘 새로 손에 쥐는 것은 그 앞뒤예요 — 잇기 전에 열쇠의 모양과 형을 맞추고, 이은 뒤 행 수로 검산합니다. 코드 ③ · ④는 matplotlib 을 씁니다. 처음 실행은 몇 초 멈춰요 — 고장이 아니라 그림 도구와 한글 글꼴을 처음 받는 중입니다(쪽마다 한 번).

부르는 모양

w["날짜"] = pd.to_datetime(w["일시"])
b["날짜"] = pd.to_datetime(b["대여일자"])
d = pd.merge(w, b, on="날짜")
print(len(w), len(b), len(d))  # 셋을 대조

오늘 쓰는 함수 넷

to_datetime
글자 날짜를 날짜형으로 — 모양이 달라도 같은 날은 같은 값
.str[:10]
글자를 앞에서 열 자만 — 빠르지만 모양이 바뀌면 깨진다
merge(on=…)
같은 열쇠끼리 한 줄로 — Ⅰ-7 에서 한 그대로
cut · corr
구간으로 자르기 · 두 열의 상관계수

Ⅰ-7 의 잇기와 다른 셋

  1. 열쇠를 먼저 만든다이미 있는 열을 쓰는 것이 아니라 날짜 열을 새로 만들어 맞춘다
  2. 이은 뒤 세어 본다왼쪽 · 오른쪽 · 이은 표 세 숫자를 늘 함께 찍는다
  3. 이은 표가 새 질문을 만든다따로 있을 때는 못 묻던 "기온과 대여의 관계"를 묻는다

대가 — 열쇠를 잘못 맞춰도 오류가 나지 않습니다. 검산을 빼먹으면 아무도 알려 주지 않아요.

1

열쇠를 맞추고, 행 수로 검산한다

5분

여는 장면에 적어 둔 내 예측입니다. 코드 ①이 그 자리에서 답을 줍니다 — ㉮ 0행일까요, ㉯ 2,000행일까요, ㉰ 오류일까요?

기본 빈칸 ①에 앞에서 몇 글자를 떼어 낼지를 채우고 ▶ 실행합니다. '2024-06-10 00:04:14'에서 날짜만 남기려면 앞 몇 글자면 될까요?

도전 .str[:10] 대신 pd.to_datetime(t["대여일시"]).dt.normalize() 로 바꾸고, 오른쪽도 pd.to_datetime(d["대여일자"]) 로 바꿔 이어 보세요. 같은 2,000행이 나오나요? 어느 쪽이 더 안전할까요 — 글자 자르기는 파일의 모양이 바뀌면 조용히 깨집니다.

탐구 0행이 아니라 너무 많은 행이 나오는 사고도 있습니다(Ⅱ-11 이 다룹니다). 열쇠를 맞출 때 확인할 것을 두 가지로 적어 보세요 — 모양(시각이 붙었나)과 단위(하루인가 한 시간인가).

이어서 코드 ②는 오늘 내내 쓸 이은 표를 만듭니다. 빈칸 ②에 글자 날짜를 날짜형으로 바꾸는 함수 이름을 채우고 ▶ 실행해, 세 숫자(366 · 366 · ?)를 대조하세요.

도전 칸 아래 채워 둔 세 줄은 대여를 하루 뒤로 밀어 이은 것입니다. 365행이 나오고 r 은 0.600 — 제대로 이었을 때(0.596)와 거의 같아요. 미션 ④의 실험실 +1 칸과 같은 숫자인지 맞대어 보세요.

탐구 두 파일의 단위가 다르면(한쪽은 하루, 다른 쪽은 한 시간) 이 행 수 검산은 어떻게 달라질까요?

빨간 오류보다 이 더 위험하다. 오류는 지만, 이쪽은 이기 때문이다. 그래서 잇고 나면 반드시 를 한다.

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

첫 번째 읽기 — 한 숫자와 점구름

3분

이은 표에서 기온과 대여 건수의 상관계수 r 은 얼마쯤 나올까요? −1 에서 1 사이의 수를 그림을 보기 전에 하나 정해 적어 두세요.

기본 코드 ③은 채워져 있습니다. 그대로 ▶ 실행해 r 한 줄과 산점도를 보세요. 비 온 날(주황)이 같은 기온에서 아래쪽에 있는지 눈으로 확인합니다.

도전 비 기준 >= 1 을 >= 5 로 바꾸면 주황 점이 82개에서 49개로 줄고, >= 0.1 로 낮추면 110개가 됩니다. 기준을 옮기면 그림이 어떻게 달라지나요?

탐구 점이 366개뿐인데도 겹쳐 보인다면 alpha 를 0.6 에서 0.3 으로 낮춰 보세요. 언제 반투명이 필요한지 Ⅱ-9 의 1,999점과 견주어 생각해 봅니다.

r 0.596 은 을 잰 숫자다. 그림을 보면 이므로, 이 관계를 직선 하나로 요약하면 .

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

두 번째 읽기 — 5°C 칸마다 중앙값

2분

대여가 가장 많은 기온 구간은 어디일까요? 그리고 가장 더운 구간은 어떨까요? 두 칸을 먼저 짐작해 보세요.

기본 빈칸 ③에 구간 폭을 채우고 ▶ 실행합니다. 막대 위에 찍히는 날 수를 함께 보세요 — 얇은 칸은 중앙값이 흔들립니다.

도전 5 를 2 로 바꾸면 구간이 잘아져 막대가 들쭉날쭉해집니다(Ⅱ-6 의 구간 폭 이야기 그대로예요). 이 자료에는 몇 도 폭이 알맞을까요?

탐구 중앙값 대신 평균("mean")으로 그리면 어느 구간이 가장 많이 달라지나요? 왜 그럴까요(Ⅱ-5 의 긴 꼬리).

r 은 으로 큰 양수인데, 구간 중앙값은 °C 를 넘으면 오히려 . 두 결과를 한 문장으로 하면 .

확인 문제 2에 이어서 적기 →
4

실험실 — 날짜를 하루 밀어 보고, 날짜 없는 조각을 제자리에 댄다

7분

코드 ②에서 이미 한 번 보았습니다 — 대여를 하루 뒤로 밀어 이었는데 r 은 0.596 에서 0.600 으로 거의 그대로였어요. 그렇다면 물음이 생깁니다. r 은 잇기가 잘됐는지를 알려 주는 숫자일까요?

실험실에 들어가기 전에 넷을 고릅니다. 조작부의 예측 ① ~ ④ 를 다 고르면 손잡이가 열려요 — 먼저 고르지 않으면 결과를 보고 나서 "그럴 줄 알았다"고 말하게 됩니다.

실험실은 두 막입니다. 1막은 대여 띠를 며칠 뒤로 미는 일 — 이것을 밀기라고 부릅니다. 2막은 조각, 곧 날짜를 지운 60일짜리 대여 기록 토막을 1년 위 제자리에 대는 일이에요. 도전 셋을 풀면 카드가 스스로 닫힙니다.

시뮬레이터

날짜 띠 맞추기

하루 밀려도 r 은 그대로다 — 그러면 무엇이 어긋남을 알려 주나

  1. 1예측 넷을 골라 잠근다
  2. 21막 — 대여 띠를 밀며 계기 셋이 어떻게 움직이는지 본다
  3. 32막 — 날짜 지운 조각을 1년 위에 대고 [여기다]를 세 번
막
예측 ① 하루 밀면 r 은
예측 ② 하루 밀면 비의 몫은
예측 ③ 반년 밀면 r 은
예측 ④ 조각의 제 날짜는
밀기 — 대여 띠를 며칠 뒤로
1막 · 제대로 이었다날씨 366일 × 대여 366일

비의 몫 = 15~25°C 인 날만 모아, 비 온 날의 대여 중앙값이 안 온 날보다 몇 % 적은가 · 제대로 이었는지를 말해 주는 것은 r 이 아니라 이은 행 수와 비의 몫이다

기온 × 대여 r—
이은 행 수366
비의 몫 15~25°C—
지금 밀기0일
예측 맞힘0/4
점수0
도전 1

1막 — 대여 띠를 뒤로 밀어 r 이 처음 0.5 아래로 떨어지는 날 수를 찾아라. 그때 이은 행 수는 몇 행인가?

도전 2

2막 판 1(봄) — [여기다] 세 번 안에 조각의 제 날짜를 맞혀라. 비 지문 계기가 길잡이다.

도전 3

2막 판 2(여름) — 먼저 r 이 가장 큰 자리에 한 번 대어 보고(틀린다), 그다음 제 날짜를 맞혀라.

자료: 기상청 종관기상관측(ASOS) 일자료(2024, 서울 108) × 서울특별시 공공자전거 대여이력 정보(2024, OA-15182, 공공누리 제1유형) — 날짜로 이은 366일(날짜 · 평균기온 · 일강수량 · 대여 건수)을 쪽 안에 실었다. 계기 셋은 그 366줄에서 판이 그때그때 다시 센다. 2막 조각 둘(2024-04-30 ~ 06-28 · 2024-06-05 ~ 08-03)은 원장이 남겨 둔 몫이라 이 쪽을 쓰면서 같은 자료로 골랐다 — 고른 기준은 "60일 조각을 307자리에 다 대어 보았을 때 r 이 가장 큰 자리가 제 날짜가 아니고, 비 지문이 가장 강한 자리는 제 날짜인 조각". 307자리를 다 세어 보면 r 최대가 제 날짜인 조각은 34개(11%), 비 지문 최대가 제 날짜인 조각은 190개(62%)다.

잇기가 제대로 됐는지를 로 검산하면 안 된다. 하루 밀어도 은 거의 그대로였고, 어긋남을 알려 준 것은 였다. 까닭은 r 이 을 재기 때문이다.

확인 문제 4에 숫자를 넣어 제출 →
5

세 번째 읽기 — 비로 가르고, 기온을 붙든다

3분

비 온 날만 따로 모아 보면 r 은 커질까요, 작아질까요? 그리고 기온이 비슷한 날(15~25°C)에서 비 온 날은 안 온 날보다 대여가 몇 % 적을까요? 두 가지를 먼저 적어 두세요.

기본 빈칸 ④에 두 열의 상관계수를 내는 함수 이름을 채우고 ▶ 실행합니다.

도전 15 와 25 를 20 과 25 로 좁혀 보세요. 날 수가 116일에서 52일로 줄고 비의 몫은 −44%가 됩니다 — 좁힐수록 기온은 더 공정해지지만 표본은 얇아집니다.

탐구 "기온이 1°C 오르면 ○건 는다"는 한 줄 요약이 위험한 까닭을 두 가지로 적어 보세요 — 하나는 꺾임, 다른 하나는 함께 움직이는 것들입니다.

오늘의 결론 세 줄 — 전체 관계는 , 꺾이는 곳은 , 비의 몫은 다. 그러나 이 셋을 다 적어도 라고는 말할 수 없다.

확인 문제 5에 숫자를 넣어 제출 →
체크포인트 3

두 공공데이터를 날짜로 이어 366행을 검산했고, 같은 관계를 세 번 읽었으며, 잇기를 r 로 검산하면 안 되는 까닭을 실험실에서 손으로 확인했다.

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

오늘의 탐험 일지

  1. 찾은 것

    날짜 하나로 두 공공데이터를 이었고, 같은 관계가 세 번 다르게 읽혔다 — r 0.596 · 꼭대기 20~25°C · 비의 몫 −52%.

  2. 도구의 한계

    r 은 직선의 세기만 잰다. 꺾임도, 날짜가 어긋나게 이어진 것도 말해 주지 않는다 — 하루 밀어도 0.596 → 0.600 이었다.

  3. 보고의 규칙

    이은 표를 보고할 때는 행 수 셋을 함께 적는다. 관계는 구간과 셋째 속성까지 본 뒤에 문장으로 쓴다.

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

1. 대여 기록의 대여일시(시각까지 붙은 글자)로 날짜별 표와 이었더니 오류 없이 0행이 나왔다. 빨간 오류가 나는 것보다 이것이 더 위험한 까닭을 쓰고, 잇고 나서 늘 해야 할 검산을 한 줄로 쓰시오.
📖 모범 답안

오류는 그 자리에서 멈추고 고칠 곳을 알려 준다. 그러나 '오류 없이 0행'은 아무 말도 하지 않은 채 빈 표를 다음 단계로 넘긴다. 빈 표로 평균을 내고 그림을 그려도 화면에는 붉은 줄 하나 뜨지 않아서, 모르고 지나가면 보고서까지 그대로 간다. 짝이 없는 것은 문법을 어긴 일이 아니라 그냥 그런 결과이기 때문에 파이썬이 알려 줄 수 없다.

검산 — 잇기 전후의 행 수를 늘 함께 찍어 대조한다(오늘은 2,000 · 366 → 0이었다). 0행이거나 모자라면 두 열쇠의 첫 값을 나란히 찍어 ① 모양(시각이 붙어 있나, 구분 기호가 같나)과 ② 단위(하루인가 한 시간인가)를 본다. 코드 ②처럼 셋이 366 · 366 · 366으로 같으면 빠진 날도 겹친 날도 없다.

2. 기온 × 대여 r 은 0.596으로 꽤 큰 양수인데, 5°C 구간 중앙값은 25°C 를 넘으면 줄었다(20~25°C 17.0만 → 30~35°C 12.0만). 아래 표를 채우고, 두 결과를 한 문장으로 합쳐 쓰시오. 그리고 이 관계를 직선 하나로 요약해도 되는지 판정하고 까닭을 쓰시오.
읽는 법이 자료에서 얻은 값이 방법이 못 보여 주는 것
한 숫자(r)
구간 중앙값
셋째 속성(비)
📖 모범 답안

표 — 한 숫자(r): 0.596 / 꺾임 · 어느 구간이 두꺼운지 · 셋째 속성의 몫을 못 보여 준다. 구간 중앙값: (20,25] 53일 17.0만이 꼭대기, (25,30] 77일 13.9만, (30,35] 6일 12.0만 / 구간 안의 흩어짐과 날짜의 순서를 못 보여 준다(칸이 얇으면 중앙값 자체가 흔들린다). 셋째 속성(비): 비 안 온 284일 r 0.743 · 비 온 82일 r 0.573, 15~25°C 에서 −52% / 비 말고 함께 움직이는 다른 것들(방학 · 요일 · 행사)은 여전히 섞여 있다.

한 문장 — "대체로 기온이 오르면 대여가 늘지만(r 0.596), 20~25°C 를 지나면 오히려 줄어드는 꺾인 관계다."

판정 — 직선 하나로 요약하면 안 된다. r 은 '직선으로 얼마나 잘 설명되나'를 재는 숫자라서 꼭대기를 지나 내려오는 부분을 평균해서 지워 버린다. 직선으로 요약하면 30°C 인 날의 대여를 실제보다 높게 짐작하게 된다. 다만 가장 더운 칸은 엿새뿐이므로 "더우면 안 탄다"고 단정하지 말고 날 수를 함께 적는다.

3. 비 온 날과 안 온 날을 섞어 놓으면 r 이 낮아지는 까닭을 쓰시오. 그리고 비의 효과를 잴 때 1년 전체가 아니라 15~25°C 인 날만 골라 견준 까닭을 쓰시오 (1년 전체 −41%, 15~25°C −52%).
📖 모범 답안

섞으면 낮아지는 까닭 — 비 온 날은 같은 기온에서도 대여가 적어 점들이 아래로 처진다. 성격이 다른 두 무리가 한 점구름에 겹쳐 있으면 같은 기온에 서로 다른 높이의 점이 함께 놓이고, 그만큼 기온만으로 설명되는 몫이 줄어든다. 실제로 갈라 놓으면 비 안 온 284일 0.743, 비 온 82일 0.573 으로 둘 다 섞어 놓았을 때(0.596)보다 또렷하다.

15~25°C 로 고른 까닭 — 비 온 날은 여름에 몰려 있다. 1년 전체로 그냥 견주면 '비의 효과' 안에 계절의 효과가 섞인다. 기온을 비슷하게 맞춰 놓고 비만 갈라야 비의 몫에 가까워진다. 실제로 1년 전체는 13.98만 대 8.21만(−41%)인데, 15~25°C 인 116일만 보면 17.09만 대 8.14만(−52%)으로 비의 손실이 더 크게 드러난다 — 섞어 보면 여름의 힘이 비의 손실을 가려 주고 있었던 것이다. 다만 구간을 좁힐수록 표본이 얇아진다(20~25°C 로 좁히면 52일 · −44%).

4. 실험실에서 대여 띠를 하루 뒤로 밀어 이었을 때 세 계기가 어떻게 달라졌는지 숫자를 넣어 쓰고, "잇기가 잘됐는지는 r 로 검산하면 된다"는 말이 왜 틀렸는지 쓰시오. 그리고 2막에서 조각의 제 날짜가 r 이 가장 큰 자리가 아니었던 까닭을 한 줄로 덧붙이시오.
📖 모범 답안

세 계기 — 이은 행 수 366 → 365(한 줄 줄었다) · r 0.596 → 0.600(거의 그대로, 오히려 조금 올랐다) · 15~25°C 비의 몫 −52% → −6%(거의 사라졌다). 일주일 밀면 359행 · r 0.522 · 비의 몫 −3% 다.

r 로 검산하면 안 되는 까닭 — r 이 재는 것은 계절이 만든 큰 흐름이다. 기온도 대여도 봄에 오르고 가을에 내려오는데, 이 흐름은 몇 주에 걸쳐 천천히 움직인다. 하루쯤 어긋나게 이어도 '더운 날 옆에는 더운 날'이라 짝이 거의 그대로여서 r 이 무너지지 않는다 (뒤로 13일을 밀어야 r 이 처음 0.5 아래로 떨어진다). 반면 비는 그날 하루의 사건이라 한 칸만 어긋나도 짝이 흐트러진다 — 그래서 비의 몫은 한 칸에 무너진다. 어긋남을 곧바로 알려 준 계기는 행 수였다.

2막 — 기온은 여러 주 동안 비슷하게 흘러서 r 이 큰 자리가 여러 곳에 생긴다. 제 날짜를 가리는 것은 그날에만 있는 사건, 곧 비 줄이 대여의 골에 꽂히는 자리다. (봄 조각은 제자리 r 0.356 으로 307자리 가운데 7등일 뿐이지만 비 지문은 +66%로 1등이었다.)

5. 오늘 이은 표로 "기온과 따릉이"를 결론 세 줄(전체 관계 · 꺾이는 곳 · 비의 몫)로 쓰되 숫자를 넣어 쓰시오. 그리고 "기온이 1°C 오르면 따릉이가 ○○건 는다"는 한 줄 요약이 위험한 까닭을 두 가지로 쓰시오.
📖 모범 답안

결론 세 줄(예)

① 2024년 서울에서 하루 평균기온과 따릉이 대여 건수는 양의 관계였다(366일, r 0.596).
② 그러나 곧은 관계가 아니다 — 5°C 구간 중앙값은 20~25°C 에서 17.0만 건으로 꼭대기를 찍고 25~30°C 13.9만, 30~35°C 12.0만으로 내려온다(가장 더운 칸은 엿새뿐이다).
③ 비는 같은 기온에서도 대여를 크게 줄인다 — 15~25°C 인 116일만 보면 비 안 온 날 17.09만 대 비 온 날 8.14만으로 −52%다(1년 전체로 견주면 −41%).

위험한 까닭 ① — 관계가 꺾여 있다. '1°C 당 몇 건'은 직선을 가정한 말인데, 실제로는 20~25°C 까지는 오르고 그 위에서는 내려온다. 그래서 1°C 의 효과가 구간마다 다르고, 더운 구간에서는 부호까지 반대가 된다. 하나의 기울기로 적으면 폭염일의 대여를 실제보다 높게 짐작한다.

위험한 까닭 ② — 기온은 혼자 움직이지 않는다. 계절 · 방학 · 해가 떠 있는 시간 · 비 · 행사가 함께 오르내린다. '1°C 당 몇 건'은 그 몫을 전부 기온에 몰아준다. 오늘 본 것만으로도 비 하나가 같은 기온에서 대여를 절반 가까이 깎았다 — 관계를 보았다고 원인을 안 것은 아니다.

+
더 알아보기

이은 표가 하는 일 셋

예보와 기록을 이어 내일을 옮긴다어제까지의 대여 기록날짜 · 대여소 · 건수내일의 날씨 예보기온 24°C · 비 20mm날짜로 잇기기록 × 예보하루 한 줄예측내일 수요 예측 — 대여소마다한강공원 A지금 세워둔 수18대내일 필요할 수4대학교 앞 B지금 세워둔 수6대내일 필요할 수17대트럭 11대남는 곳에서 모자란 곳으로 — 이것이 재배치다
현장

비 오는 날의 재배치 트럭

공공자전거 운영에서 가장 손이 많이 가는 일은 재배치입니다. 아침에 한강공원에 몰려 있던 자전거가 저녁이면 학교와 지하철역 앞에 쌓이고, 다음 날 아침이면 다시 비어 있어야 할 곳이 가득합니다. 그래서 밤사이 트럭이 남는 대여소에서 모자란 대여소로 자전거를 옮겨 놓습니다.

얼마나 옮길지는 내일 얼마나 빌려 갈지에 달려 있고, 그 답은 오늘 우리가 만든 표와 같은 모양의 표에서 나옵니다 — 어제까지의 대여 기록과 내일의 날씨 예보를 날짜로 이어 하루 한 줄로 만든 표예요. 비가 20mm 온다는 예보가 붙은 날에는 수요를 낮춰 잡고, 맑고 22°C 라는 예보가 붙은 날에는 높여 잡습니다. 오늘 잰 −52% 같은 숫자가 바로 그 조절의 근거입니다.

여기서 열쇠를 잘못 맞추면 어떤 일이 생길까요. 예보를 하루 밀려 붙이면 비 오는 날에 자전거를 잔뜩 내놓고 맑은 날에 텅 빈 대여소를 만듭니다. 그런데 오늘 실험실에서 본 대로, 그 실수를 상관계수는 알려 주지 않아요. 알려 주는 것은 행 수와 비가 온 날의 대여가 꺼지는 자국입니다.

도해: 대여 기록과 날씨 예보를 날짜로 이어 대여소별 내일 수요를 예측하고, 남는 곳에서 모자란 곳으로 옮기는 흐름을 그렸다. 대여소 이름과 대수는 재배치가 무엇인지 보이려고 지어낸 예시다.

한 칸 밀어 이으면 무엇이 달라지나7/147/157/167/177/18날씨7/147/157/167/177/18대여같은 날끼리7/147/157/167/177/18대여하루 밀어shift(1) — 오늘 날씨를 내일 대여에 붙인다밀기마다 r (2024 서울 366일)−3−2−1012345670.5960.600가로: 대여를 며칠 밀었나r 은 거의 안 움직인다
방법 더 깊이

오늘의 비, 내일의 대여 — 일부러 미는 잇기

오늘 우리는 날짜를 어긋나게 잇는 것을 사고로 다뤘습니다. 그런데 일부러 미는 잇기도 있어요. "어제 비가 많이 온 날은 다음 날 이용이 줄어들까?" 같은 물음이 그렇습니다. 길이 젖어 있고, 어제 예보를 보고 오늘 일정을 미리 바꾼 사람도 있을 테니까요. 이렇게 한쪽을 며칠 밀어 이은 뒤 관계를 재는 일을 시차 상관이라고 부릅니다.

pandas 로는 코드 ②에 채워 둔 세 줄이 그대로 방법입니다 — b.assign(날짜=b["날짜"] + pd.Timedelta(days=1)) 로 대여 쪽 날짜를 하루 옮긴 뒤 이으면, 같은 행에 오늘 날씨와 내일 대여가 나란히 놓입니다. 밀 날 수를 −7 에서 +7 까지 바꿔 가며 r 이 가장 커지는 자리를 찾으면 "무엇이 며칠 뒤에 영향을 주는가"를 볼 수 있어요.

다만 오늘 배운 것을 잊으면 안 됩니다. 아래 막대에서 보듯 이 자료의 r 은 밀기 −3 일부터 +7 일까지 0.52 ~ 0.60 사이에서 거의 움직이지 않습니다. r 이 가장 큰 밀기를 골랐다고 그것이 인과의 시차는 아니에요. 시차를 주장하려면 r 말고 그날에만 있는 사건(비 · 폭설 · 행사)이 어느 밀기에서 가장 또렷하게 대응하는지를 함께 봐야 합니다.

도해: 날씨 줄과 대여 줄을 같은 날끼리 잇는 그림, 하루 밀어 잇는 그림, 그리고 밀기 −3 ~ +7 일의 상관계수 막대. 막대 값은 오늘 쓴 366일 표를 밀기마다 다시 이어 잰 값이다.

날씨를 파는 것이 아니라, 날씨로 정한다기상 자료기온 · 강수 · 일조판매 기록날짜 · 품목 · 수량날짜 열쇠YYYY-MM-DD행 수로 검산이은 표하루 한 줄여름 아이스크림 발주량 — 기온에 맞춰7월 1일7월 14일기온발주그림의 두 줄은 관계를 보이려고 지어낸 예시다
진로

날씨 경영 — 예보를 매출로 옮기는 사람들

편의점이 아이스크림을 얼마나 시킬지, 농가가 언제 물을 댈지, 야외 공연을 그대로 열지 — 이런 결정은 날씨 데이터와 자기 데이터를 날짜로 이은 표 위에서 내려집니다. 이 일을 날씨 경영이라고 부르고, 그 표를 만들고 읽는 사람을 기업에서는 데이터 분석가, 기상 업계에서는 응용기상 담당이라고 부릅니다.

자료는 누구에게나 열려 있습니다. 오늘 쓴 ASOS 일자료는 기상청 기상자료개방포털에서 지점과 기간을 골라 내려받은 것이고, 따릉이 대여 기록은 서울 열린데이터광장에서 받은 것이에요. 민간 기상 사업자는 여기에 더해 동네 단위 예보나 매장 앞 체감 지수 같은 가공 자료를 파는데, 그 값이 비싼 까닭도 결국 이어 붙일 수 있는 열쇠(정확한 시각과 위치)를 함께 주기 때문입니다.

이 일에서 가장 먼저 하는 점검이 오늘의 첫 관문과 같습니다 — 두 파일의 날짜가 같은 모양인가, 단위가 같은가(하루인가 한 시간인가), 이은 뒤 행 수가 맞는가. 화려한 모델보다 이 세 줄을 빠뜨리지 않는 사람이 현장에서 더 오래 신뢰받습니다.

도해: 기상 자료와 판매 기록을 날짜 열쇠로 이어 하루 한 줄짜리 표를 만들고, 그 표로 발주량을 정하는 흐름. 아래 두 줄(기온과 발주)은 관계의 모양을 보이려고 지어낸 예시다. 자료 출처는 기상청 기상자료개방포털 · 서울 열린데이터광장.