단원 홈

Ⅳ. 데이터 과학 프로젝트3차시

표를 받은
첫 20분

날마다 24칸, 전력 수요 표를 한 바퀴 둘러본다

2차시에서 고른 질문을 들고 드디어 진짜 파일을 엽니다. 한 행이 하루, 한 줄에 1시부터 24시까지 스물네 칸 — 여덟 해를 이으니 3,257행이 됐습니다. 오늘 할 일은 답을 내는 것이 아니라 물음을 캐는 것입니다.

  • [12데과04-02]
  • 50분네 정거장
  • 새 도구긴 표로 바꾸는 pandas — melt · unstack · nsmallest
  • 자료한국전력거래소 시간별 전력 수요 3,257행 × 25열 · 공휴일 145일
Ⅳ 단원 지도3 / 11차시
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11

학습 목표

  1. 개념에서

    탐색적 데이터 분석이 답이 아니라 물음을 만드는 단계임을 설명하고, 넓은 표와 긴 표가 각각 어떤 물음에 쉬운지 가려 말할 수 있다.

  2. 손으로

    받은 표에 검사 셋(겹친 날짜 · 빈 줄 · 행 수)을 돌리고, melt 로 긴 표를 만들어 24배 검산을 할 수 있다.

  3. 확인에서

    극단값에 날짜·요일·공휴일 이름을 붙여 '발견 → 그래서 물을 것' 세 쌍을 EDA 노트에 적을 수 있다.

1
여는 장면 · 4분

내려받기 단추를 눌렀더니 파일이 여덟 개였다

2차시에서 가져옴우리 질문에 답하려면 한 행이 '하루'인 표가 있어야 한다 — 그 표를 이제 받는다.

공공데이터포털에서 「한국전력거래소_시간별 전국 전력수요량」을 열었습니다. 받을 것이 하나가 아니었습니다 — 올해 파일 한 벌 옆에 '주기성 과거 데이터'가 일곱 벌 더 있었고, 그 가운데 2021년이 두 벌이었어요.

일단 모두 받아 위아래로 이어 붙였습니다. 열어 보니 한 행이 하루고, 그 옆으로 1시 · 2시 · … · 24시 칸이 스물넷 붙어 있습니다. 표는 오른쪽 작은 그림처럼 생겼습니다.

오늘 우리가 할 일은 이 표에서 답을 뽑는 것이 아닙니다. 아직 답할 준비가 안 됐거든요. 먼저 한 바퀴 둘러보면서 물음을 캐내야 합니다. 이 일에는 이름이 있습니다 — 탐색적 데이터 분석(EDA, Exploratory Data Analysis)입니다.

받은 그대로의 첫 두 줄3,257행 × 25열
날짜1시2시3시4시⋯24시2018-01-0159691.057231.055500.054821.0⋯⋯2018-01-0259313.056977.055828.055675.0⋯⋯한 행 = 하루 · 칸 스물넷 = 그날의 1시~24시값이 59691.0 처럼 실수인 것도 단서다 — 왜일까?
한 행하루
한 칸한 시간
표 1포털에 놓인 파일 여덟, 이어 붙이면 3,257행행 수는 포털의 파일별 상세정보 · 2026-09-22 확인
파일담긴 기간행우리가 이은 행메모
…_202512312025-01-01 ~ 12-31366366365일 + 맨 끝에 빈 줄 1
…_202412312024-01-01 ~ 12-31366366윤년
…_202312312023-01-01 ~ 12-31365365
…_202212312022-01-01 ~ 12-31365365
…_202112312021-01-01 ~ 12-313653652021년 한 벌째
…_202111302021-01-01 ~ 11-303343342021년 두 벌째 — 위 파일과 334일이 겹친다
…_202012312013-01-01 ~ 2020-12-312,9221,096여덟 해가 한 파일에 — 2018년부터만 이었다
…_202007312013-01-01 ~ 2020-07-312,7690위 파일 앞부분과 바이트까지 같다 — 잇지 않았다
이어 붙인 표2018-01-01 ~ 2025-12-31—3,257= 2,922 + 334 + 1

받은 파일을 손대지 않고 그대로 이었습니다. 겹친 날짜도, 빈 줄도 그대로 둡니다 — 그것을 찾아내는 것이 오늘 배울 검사이기 때문입니다. 자료: 한국전력거래소, 시간별 전국 전력수요량(2018~2025), 공공데이터포털(15065266), 이용허락범위 제한 없음

먼저 예측

코드를 돌리기 전에 셋을 짐작해 봉투에 넣어 둡니다. 봉투란 판에서 [봉투 잠그기]를 누르기 전에 적는 내 예측이고, 잠그면 답을 볼 때까지 바꿀 수 없습니다. 셋 다 오늘 표가 직접 답해 줍니다 — 맞히는 것이 목적이 아니라, 틀린 자리에서 물음이 생기는 것이 목적이에요.

(가) 여덟 해 가운데 수요가 가장 낮은 날은 언제쯤?
1월6월12월여기에 세로선 하나
(나) 8월에 수요가 가장 높은 시각 칸은?
1시12시24시여기에 봉우리 하나

(다) 하나 더 — 점심시간에 수요가 잠깐 꺼진다면, 그 골은 12시 칸에 찍힐까요 13시 칸에 찍힐까요? 이 물음이 왜 어려운지는 2-4에서 밝혀집니다.

체크포인트 1

파일 여덟을 이어 3,257행짜리 표를 얻었고, 아직 아무것도 계산하기 전에 짐작 셋을 봉투에 넣었다.

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

둘러보기는 답이 아니라 물음을 캐는 일이다

2-1요약 숫자에서 멈추면 이야기가 없다

탐색적 데이터 분석은 무언가를 확인하기 전에 하는 일입니다. 요약(평균·중앙값·사분위) · 분포(어떤 모양인가) · 극단(가장 큰 값과 작은 값은 누구인가) · 시간 패턴(하루·요일·계절로 어떻게 움직이나)을 차례로 훑습니다.

훑기만 해서는 EDA 가 아닙니다. 발견마다 '그래서 물을 것'을 한 줄씩 붙여야 합니다. "가장 낮은 날이 추석이었다"는 발견이고, "연휴 수요는 같은 계절 평일보다 몇 % 낮을까"는 물음입니다. 오늘 수업의 산출물인 EDA 노트는 그 쌍을 모으는 공책이에요.

극단값에 날짜와 요일과 공휴일 이름을 붙이는 순간 숫자가 이야기로 바뀝니다. 43,597 은 그냥 작은 수지만, "2020년 10월 1일 목요일, 추석"이라고 적는 순간 왜 그런지 물을 수 있는 것이 됩니다.

2-2넓은 표와 긴 표 — 한 행이 무엇인가

받은 표는 넓은 표입니다. 한 행이 하루고, 시각이 칸 이름에 붙어 있어요. 사람이 읽기에는 편합니다. 하지만 "1월의 시각별 평균"을 내려면 열 스물넷을 하나하나 다뤄야 합니다.

melt 한 줄이면 긴 표가 됩니다. 한 행이 하루의 한 시각이고, 칸 이름이던 '1시'가 시각이라는 열로 내려옵니다. 이름표를 떼어 칸마다 붙였다고 생각하면 됩니다. 그러면 시각끼리 모으는 일이 groupby 한 줄로 끝나요.

그림 1같은 자료, 두 모양melt 는 값을 바꾸지 않는다 — 행과 열의 자리만 바꾼다
받은 모양 — 넓은 표한 행 = 하루날짜1시2시3시⋯24시2018-01-01596915723155500⋯⋯2018-01-02593135697755828⋯⋯⋮⋮⋮⋮⋯⋯2,922행 × 24칸쉬운 물음하루 합계 · 요일 견주기어려운 물음1월의 시각별 평균melt 한 줄이 이 표를 오른쪽으로 옮긴다melt 뒤 — 긴 표한 행 = 하루의 한 시각날짜시각수요2018-01-011시596912018-01-012시572312018-01-013시55500⋮⋮⋮70,128행 × 1칸쉬운 물음달 × 시각 · 가장 낮은 한 시간어려운 물음하루 한 줄로 늘어놓기칸 이름(1시…24시)이 떨어져 한 열이 되었다받은 모양 — 넓은 표한 행 = 하루날짜1시2시3시⋯24시2018-01-01596915723155500⋯⋯2018-01-02593135697755828⋯⋯⋮⋮⋮⋮⋯⋯2,922행 × 24칸쉬운 물음하루 합계 · 요일 견주기어려운 물음1월의 시각별 평균melt 한 줄이 이 표를 오른쪽으로 옮긴다melt 뒤 — 긴 표한 행 = 하루의 한 시각날짜시각수요2018-01-011시596912018-01-012시572312018-01-013시55500⋮⋮⋮70,128행 × 1칸쉬운 물음달 × 시각 · 가장 낮은 한 시간어려운 물음하루 한 줄로 늘어놓기칸 이름(1시…24시)이 떨어져 한 열이 되었다

두 표에 담긴 숫자는 똑같습니다. 다른 것은 '한 행이 무엇인가'뿐이에요. 그리고 그 하나가 어떤 물음이 한 줄로 풀리는지를 가릅니다. 자료: 같은 표의 첫 줄(2018-01-01)을 두 모양으로 그렸다 · 행 수는 원장 실측(2,922행 → 70,128행)

오늘의 규칙모양을 바꿨으면 행 수를 세어 검산한다 — 넓은 표를 녹였는데 행이 24배가 아니면, 표에 아직 무언가 남아 있다.

2-3받자마자 할 검사 셋

파일을 받으면 분석보다 먼저 세 줄을 돌립니다. 겹친 날짜는 없나 · 빈칸은 없나 · 행 수가 날 수와 맞나. Ⅱ-3 에서 쓴 신상명세서의 짧은 판이에요. 오늘은 이 세 줄이 셋 다 실제로 무언가를 잡아냅니다.

겹친 날짜부터 봅시다. 2021년이 두 벌이니 2021-01-01 ~ 11-30 의 334일이 두 번 들어옵니다. 두 줄의 값이 같으면 하나를 지우면 되지만, 다르면 어느 판을 남길지 정하고 적어야 합니다. 우리는 나중 판(keep="last")을 남깁니다 — 잠정 자료는 뒤에 고쳐졌을 수 있으니 나중 것이 확정에 더 가깝습니다.

빈칸은 맨 끝 한 줄입니다. 2025년 파일의 마지막 줄이 쉼표만 스물넷인 빈 줄이에요. 그래서 포털 상세정보의 '366행'과 그해 날 수 365가 어긋납니다. 이 한 줄 때문에 시간 열 스물넷이 정수가 아니라 실수로 읽히고(59691.0), 그것도 단서가 됩니다.

검사를 건너뛰면 어떻게 될까요? 겹친 334일이 합계에 두 번 들어가고, '날 수'가 틀리고, 녹였을 때 행이 8,040개 더 많아집니다.

그림 23,257행의 속살과 24배 검산왼쪽 — 무엇이 몇 줄인가 · 오른쪽 — 녹이면 어디가 어긋나나
받은 그대로 3,257행무엇이 몇 줄인가날 2,922날 2,9222018-01-01 ~ 2025-12-31겹친 334일2021-01-01 ~ 11-30 — 두 판이 함께 왔다빈 줄 12025년 파일 맨 끝, 쉼표만 스물넷3,257= 2,922 + 334 + 1셋 다 검사 하나씩에 걸린다 — 겹친 날짜 · 빈 칸 · 행 수녹이면 행이 24배24배가 아니면 무언가 남아 있다있어야 할 행70,128= 2,922 × 24받은 그대로 녹인 행78,168= 3,257 × 24남는 행8,040= (334 + 1) × 248,040행은 겹친 334일과 빈 줄 하나가24칸씩 따라 들어온 것이다.받은 그대로 3,257행무엇이 몇 줄인가날 2,922날 2,9222018-01-01 ~ 2025-12-31겹친 334일2021-01-01 ~ 11-30 — 두 판이 함께 왔다빈 줄 12025년 파일 맨 끝, 쉼표만 스물넷3,257= 2,922 + 334 + 1셋 다 검사 하나씩에 걸린다 — 겹친 날짜 · 빈 칸 · 행 수녹이면 행이 24배24배가 아니면 무언가 남아 있다있어야 할 행70,128= 2,922 × 24받은 그대로 녹인 행78,168= 3,257 × 24남는 행8,040= (334 + 1) × 248,040행은 겹친 334일과 빈 줄 하나가24칸씩 따라 들어온 것이다.

남는 8,040행은 하늘에서 오지 않습니다 — 겹친 334일과 빈 줄 하나가 칸 스물넷씩 데리고 들어온 것이고, 그래서 (334 + 1) × 24 = 8,040 입니다. 3정거장 코드 ①에서 이 식을 직접 세웁니다. 자료: 원장 실측(Pyodide 0.26.4) — 3,257행 · 겹친 날짜 334 · 빈 줄 1 · 70,128 / 78,168 / 8,040

표 2검사 셋 — 무엇을 보고, 이 표에서 무엇이 걸렸나셋 다 걸린 표는 흔치 않다
검사무엇을 보나이 표에서 걸린 것그냥 두면
겹친 날짜같은 날이 두 번 있나334일 (2021-01-01 ~ 11-30) · 두 줄의 값은 모두 같다그 334일이 두 번 세어져 합계·평균의 무게가 틀어진다
빈칸모든 칸이 빈 행이 있나1줄 (2025년 파일 맨 끝) · 시간 열이 실수로 읽힌다날 수가 하나 늘고, 녹일 때 칸 24개가 따라 들어온다
행 수 = 날 수행 수가 첫날~끝날의 날 수와 같나고치기 전 3,257 ≠ 2,922 · 고친 뒤 2,922 = 2,922빠진 날이 있는지 없는지 영영 모른다

셋은 순서가 있습니다 — 겹친 날과 빈 줄을 먼저 치워야 '행 수 = 날 수'가 뜻을 갖습니다. 자료: 원장 실측 · 날 수 2,922 = 2018-01-01부터 2025-12-31까지

2-4'1시 칸'은 몇 시부터 몇 시인가

칸의 단위는 MWh 입니다. 한 칸은 그 한 시간 동안 쓴 전력량이고, 한 시간 동안의 전력량(MWh)은 곧 그 시간의 평균 전력(MW)과 같은 수입니다. 그래서 하루 24칸의 평균을 하루 평균 수요(MW)라고 부를 수 있어요.

그런데 '1시' 칸은 0시부터 1시까지일까요, 1시부터 2시까지일까요? 전력 자료는 흔히 구간이 끝나는 시각으로 적습니다(1시 칸 = 0~1시). 다만 이 파일의 설명에는 그 문장이 없어서 확정은 못 했습니다. 대신 표 자체가 정황을 하나 줍니다.

점심시간은 12시부터 1시까지입니다. 사무실 조명과 기기가 잠깐 꺼지면 그 골은 어느 칸에 찍힐까요? 1월의 공휴일 아닌 평일만 모아 보면, 골은 12시 칸이 아니라 13시 칸에 있습니다. '칸 이름 = 끝나는 시각'으로 읽으면 13시 칸이 곧 12~13시 — 딱 점심시간이에요.

1월 · 공휴일 아닌 평일의 한낮
79,35912시 칸(MW)
→
74,87013시 칸(MW)
12시13시14시74,87054 ~ 82천 MW 구간만 — 두 그림의 눈금이 같다

한 칸 만에 4,489MW가 꺼졌다가 14시 칸에서 다시 올라온다 — 점심시간의 자국.

1월 · 일요일의 한낮
57,11212시 칸(MW)
→
56,15013시 칸(MW)
12시13시14시56,15054 ~ 82천 MW 구간만 — 두 그림의 눈금이 같다

같은 눈금인데 골이 962MW뿐이다 — 일하지 않는 날에는 점심시간도 없다. 정황이 하나 더 는다.

오늘의 규칙확정하지 못한 것은 확정하지 못했다고 적는다. 정황은 정황으로 적고, 기상 자료처럼 다른 표와 시간 단위로 이을 때는 한 칸 어긋날 수 있다는 것을 먼저 의심한다.

체크포인트 2

EDA 가 '발견 → 물을 것'의 쌍을 모으는 일임을 알았고, 넓은 표와 긴 표의 차이·검사 셋·시각 칸 읽는 법을 손에 넣었다.

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

70,128칸을 한 장으로 펴고, 포개고, 빗고, 누른다

오늘의 장비

표의 모양을 바꾸는 pandas 네 손

그림은 Ⅱ-6 에서 배운 matplotlib 그대로입니다 — 새 그림 기술은 없어요. 오늘 새로 쥐는 것은 표의 모양을 바꾸는 손입니다. 처음 실행은 그림 도구를 준비하느라 2~3초 멈춥니다(고장이 아니에요).

부르는 모양

긴 = 넓은.melt(id_vars="날짜",
              var_name="시각",
              value_name="수요")
판 = 긴.groupby(["월", "시각"])["수요"] \
       .mean().unstack()

오늘 쓰는 함수 넷

melt
넓은 표 → 긴 표. id_vars 가 남을 열
drop_duplicates
겹친 행을 한 판만 — keep 이 어느 판인지 정한다
unstack
두 열로 묶은 결과를 가로세로 표로 편다
nsmallest / nlargest
가장 작은·큰 n개를 값과 함께 꺼낸다

앞 차시와 다른 셋

  1. 행을 늘려서 푼다Ⅱ 단원은 열을 골라 줄였다면, 오늘은 melt 로 행을 24배 늘려 물음을 쉽게 만든다
  2. 지우기 전에 이름을 붙인다극단값에 날짜·요일·공휴일 이름을 먼저 붙인다(Ⅱ-5 는 판정부터 했다)
  3. 검사에 답이 없다Ⅱ-3 의 신상명세서는 표를 설명했고, 오늘 검사 셋은 물음을 만든다

대가 — 긴 표는 행이 24배가 됩니다. 70,128행은 브라우저에서도 견디지만, 여든 해라면 먼저 줄이고 녹여야 해요.

1

여덟 해 양탄자 — 표 자체를 손으로 만진다

10분

양탄자란 받은 표의 한 칸(하루의 한 시각)을 한 점으로 바꿔 통째로 짜 놓은 그림입니다. 값이 낮으면 어둡고 높으면 밝아요. 3,257행 × 24칸이 그대로 한 장이 됩니다. 먼저 여는 장면의 봉투 셋을 판 위에서 고르고 잠급니다.

기본 봉투를 잠근 뒤 표 손질을 차례대로 누르고, 계수기가 3,257 → 2,923 → 2,922 → 70,128 로 바뀌는 것을 봅니다. 그다음 네모 긋기를 켜고 양탄자 위를 끌어 무늬를 캐세요. 수첩이란 판 오른쪽(폰에서는 아래)에 놓인 여덟 칸으로, 네모가 무늬 하나를 잡으면 그 칸이 열립니다 — 거기에 발견 한 줄과 '그래서 물을 것'을 채워야 도장이 찍혀요. 수첩 셋에 도장을 찍는 것이 오늘의 목표입니다.

시뮬레이터

여덟 해 양탄자

받은 표 70,128칸을 한 장으로 펴고, 포개고, 빗고, 누른다 — 무엇을 누르느냐가 무엇을 지우느냐다

  1. 1봉투 셋을 고르고 잠근다
  2. 2표 손질을 차례대로 — 포개기 · 쓸어 내기 · 이름표 떼기
  3. 3네모를 그어 이야기를 캐고, 빗질 · 부채 · 누르기로 끝까지 모은다
봉투 (가) 가장 낮은 날
봉투 (나) 8월 봉우리 칸
봉투 (다) 점심 골
표 손질 — 차례대로
모아 보기
이야기 캐기
받은 그대로 — 폭 아홉봉투 셋을 고르면 손질이 열립니다

이야기 도장 = 네모 안에서 그 이야기가 표시한 칸과 나머지 칸이 각각 30칸 이상이면서 네모의 3% 이상이고, 두 무리의 평균 차가 네모 평균의 3% 이상일 때 수첩 칸이 열린다 · 여럿이 걸리면 차가 가장 큰 하나

손놀림 = 코드 한 줄 넓은 = pd.read_csv("../data/kpx_hourly_wide.csv")

표의 행3,257행
폭9
두 번 들어간 날334
빈 줄1
녹이면 행78,168
수첩 도장0
도전 1 ★

표를 손질한 뒤 네모를 그어 이야기 셋에 도장을 찍어라. 가장 눈에 띄는 가로줄부터 둘러 보면 쉽다.

도전 2 ★★

다섯까지 찍어라. 가로줄(날)만 보지 말고 세로줄(시각)도 둘러야 한다 — 새벽과 한낮에 무엇이 있나?

도전 3 ★★★

일곱을 찍고, 양탄자에서 가장 어두운 한 점을 길게 눌러 그 칸의 날짜와 시각을 수첩에 적어라.

자료: 실행 칸과 같은 파일을 판이 그대로 읽는다 — ../data/kpx_hourly_wide.csv(3,257행 × 25열) · ../data/holidays.csv(공휴일 145일). 한국전력거래소, 시간별 전국 전력수요량(2018~2025), 공공데이터포털(15065266), 이용허락범위 제한 없음 · 「관공서의 공휴일에 관한 규정」·임시공휴일 국무회의 의결·「공직선거법」 선거일로 원에듀가 정리. 판의 색 눈금(1% 45,575 ~ 99% 87,466MW)과 증거 카드의 숫자는 모두 실측이다.

도전 양탄자를 끝까지 눌러 보세요(모아 보기 → 누르기). 63,970 한 칸만 남으면 수첩의 도장이 모두 흐려집니다 — 그 화면을 보고 "이 숫자만 받았다면 무엇을 물을 수 있었나"를 한 줄로 적어 두세요.

탐구 여러분 팀 자료에도 이런 무늬가 있을까요? 표를 한 장의 그림으로 폈을 때 눈에 띌 만한 줄·기둥·덩어리를 하나 예상해 보고, 그것이 보이려면 가로와 세로에 무엇을 놓아야 할지 적어 보세요.

양탄자를 쪽으로 모을수록 가 보이고, 그 대신 는 사라진다. 그러니 요약을 보고할 때는 를 함께 적어야 한다.

EDA 노트 ㉱ 칸에 '발견 → 물을 것' 세 쌍 적기 →
2

판의 계수기를 코드로 다시 센다

5분

여덟 해는 2,922일입니다. 받은 그대로 읽으면 몇 행일까요? 그리고 그것을 긴 표로 녹이면 몇 행이어야 할까요? 숫자 둘을 먼저 적어 보세요 — 판에서 본 계수기와 같은 숫자가 나와야 합니다.

기본 빈칸 셋을 채우고 ▶ 실행하세요. [2] 는 일부러 틀린 길입니다 — 손질하기 전에 녹여서 몇 행이 남는지 먼저 겪습니다.

도전 [빈칸 ③] 의 keep="last" 를 keep=False 로 바꿔 보세요. 행이 2,588, 긴 표가 62,112 가 됩니다 — 24배 검산은 통과하는데 겹친 334일이 통째로 사라졌어요. 검산 하나만 믿으면 안 되는 까닭입니다.

탐구 두 판의 값이 달랐다면 코드의 어느 줄을 먼저 고쳐야 할까요? [3] 의 '겹친 두 줄의 값이 모두 같은가' 가 False 일 때 무엇을 더 찍어 보면 좋을지 한 줄로 적어 보세요.

[2] 의 남는 행은 와 가 칸 24개씩 데리고 들어온 것이다 — 식으로 쓰면 .

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

가장 낮은 날과 높은 날에 이름을 붙인다

3분

봉투 (가)를 다시 떠올려 보세요. 여덟 해 2,922일 가운데 가장 낮은 날은 언제쯤일까요? 그리고 하루 평균 수요의 히스토그램에 봉우리가 몇 개 설 것 같나요?

기본 빈칸이 없는 칸입니다. 그대로 ▶ 실행해 판의 63,970 과 같은지 맞대어 보세요. [6] 이 오늘의 핵심입니다 — 숫자에 날짜 · 요일 · 공휴일 이름을 붙이는 순간 이야기가 생깁니다.

도전 [6] 의 how="left" 를 how="inner" 로 바꿔 보세요. 하루 표가 공휴일 145일만 남아, 낮은 8일에서 이름이 '-' 인 두 일요일이 사라지고 가장 높은 날이 광복절(2024-08-15, 74,281MW) 이 됩니다 — 잇는 방법이 표의 뜻을 바꿉니다.

탐구 낮은 8일 가운데 이름이 '-' 인 2023-10-01(일) 과 2025-05-04(일) 은 왜 명절만큼 낮았을까요? 달력을 찾아 그 주에 무슨 일이 있었는지 확인해 보세요.

4만 MW 대의 낮은 날은 이므로 오류가 아니다. 이름이 '-' 인 두 일요일이 명절만큼 낮았던 것은 때문일 수 있고, 이것을 확인하려면 를 더 봐야 한다.

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

긴 표라서 한 줄로 끝나는 물음

2분

봉투 (나)(다)를 확인할 차례입니다. 8월에 가장 높은 시각 칸은 몇 시 칸일까요? 그리고 70,128칸 가운데 가장 낮은 한 칸은 몇 시 칸일 것 같나요? (대개 새벽을 짚습니다.)

기본 빈칸 하나를 채우고 ▶ 실행하세요. [7] 은 판의 빗질과 같은 일이고, [8] 은 넓은 표였다면 두 번 훑어야 할 물음을 한 줄로 끝냅니다.

도전 그림의 달을 (1, 8) 에서 (3, 4, 5) 로 바꾸고 제목도 「봄 석 달」로 바꿔 보세요. 봄 석 달은 모두 13시 칸이 푹 꺼지고 20시 칸이 봉우리입니다 — 겨울도 여름도 아닌 모양이에요.

탐구 [8] 의 가장 낮은 다섯 칸이 모두 한 날의 한낮입니다. 새벽이 아니라 한낮이 가장 낮으려면 무슨 일이 있어야 할까요? 답하지 말고 무엇을 더 봐야 하는지를 적으세요(8차시에서 엽니다).

여덟 해를 겹쳐 본 8월 봉우리는 칸이지만, 해마다 펴 보면 봉우리가 로 걸어간다. 그러니 '8월 봉우리는 몇 시'라는 보고에는 를 함께 적어야 한다.

확인 문제 4에 적어 제출 →
5

EDA 노트 — 다시 돌려도 채워지지 않는 칸

10분

지금까지 판과 코드가 낸 숫자는 다시 돌리면 또 나옵니다. 그런데 오늘 남겨야 할 노트는 다섯 칸(㉮~㉲)이에요. 그 가운데 다시 돌리기만 하면 채워지는 칸은 몇일까요? 채우기 전에 둘을 짚어 보세요 — 나머지는 화면 바깥에서 가져와야 하는 칸입니다.

기본(2분) 미션 ①의 판으로 돌아가 [EDA 노트로 보내기] 를 누르세요. 수첩 도장이 발견: … → 물을 것: … 꼴로 ㉱ 칸에 들어갑니다. 초안 그대로 내지 마세요 — 판이 붙여 준 것은 무늬의 이름일 뿐이고, '그래서 물을 것'은 여러분의 문장이어야 합니다.

우리 팀(4분) 여기서 두 갈래로 나뉩니다. 자기 자료 팀은 미션 ②~④ 의 코드를 그대로 쓰되 싣는 줄 하나(pd.read_csv(…))와 열 이름만 여러분 파일로 바꿔 같은 순서를 돌립니다 — 검사 셋 → 극단 여덟 → 묶어 보기. 무엇이 걸리는지가 그대로 ㉯ 의 답이 돼요. 공통 데이터 팀은 2차시에서 고른 자기 물음 쪽으로 좁혀 다시 돌립니다 — 명절 팀이라면 연휴 날짜만 골라 시각 모양을, 여름 팀이라면 7·8월만 골라 시각 모양을 냅니다.

노트(4분) 확인 문제 6 의 다섯 칸을 채웁니다. 셋은 화면 밖에서 와야 해요 — ㉯ 는 지운 것과 남긴 것의 까닭(빈 줄 1 · 겹친 334일, 어느 판을 왜 남겼나), ㉰ 는 극단 여덟에 '그날 무슨 일이 있었나'를 달력과 뉴스로 찾아 붙이는 칸, ㉲ 는 이상한 것 하나와 지우지 않은 까닭입니다. ㉲ 의 재료는 둘 가운데 고르면 돼요 — 양탄자에서 가장 어두운 한 점(2025-05-04 일요일 12시 칸), 또는 가장 낮은 8일에 섞여 있던 이름이 '-' 인 일요일.

탐구 채울 수 없는 칸이 하나라도 있다면 그것 자체가 발견입니다. "우리 표에는 시간 축이 없어서 ㉮ 를 '한 행 = 한 가게'로 적었다"도 답이 돼요 — 비워 두지 말고 왜 못 채웠는지를 적으세요.

다섯 칸 가운데 코드가 그대로 채워 준 것은 칸뿐이고, 나머지는 에서 가져와야 했다. 그러니 EDA 노트는 를 옮겨 적는 자리가 아니라 를 적는 자리다.

확인 문제 6 · EDA 노트 다섯 칸을 채워 제출 →
체크포인트 3

표를 한 장의 무늬로 보고 손으로 손질했고, 그 숫자를 코드로 다시 세었고, 극단값에 이름을 붙여 물음 목록을 얻었다. 그 목록을 EDA 노트 다섯 칸으로 옮기며, 다시 돌려도 채워지지 않는 칸이 무엇인지도 보았다.

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

오늘의 탐험 일지

  1. 찾은 것

    같은 표를 어느 방향으로 모으느냐가 다른 이야기를 꺼낸다 — 하루로 모으면 명절이, 달 × 시각으로 모으면 계절의 봉우리가, 끝까지 누르면 63,970 한 숫자만 남는다.

  2. 도구의 한계

    24배 검산은 행 수만 본다. keep=False 로 334일을 통째로 버려도 검산은 통과한다 — 검사 하나로는 모자란다.

  3. 보고의 규칙

    발견에는 '그래서 물을 것'을 붙이고, 지운 것에는 지운 까닭을 적는다. 확정하지 못한 것은 확정하지 못했다고 적는다.

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

1. 가장 낮은 8일 가운데 여섯은 공휴일 이름이 '추석'·'추석 다음날'이었고, 2023-10-01 은 이름이 '-' 이지만 추석~개천절 엿새 연휴(9-28 ~ 10-03) 안의 일요일이다 — 합해 일곱이 추석 연휴였다. 나머지 하나는 2025-05-04 일요일이었다. 이것을 보고 세울 수 있는 물음 둘을 쓰시오. (답이 아니라 물음을 쓰는 것입니다 — 다음 분석으로 확인할 수 있는 모양이어야 합니다.)
📖 모범 답안

다음 같은 물음이면 된다 — “연휴 수요는 같은 계절 평일보다 몇 % 낮은가”, “연휴 며칠째가 가장 낮은가”, “설 연휴는 왜 가장 낮은 날 목록에 없는가 — 겨울 난방이 받쳐 주는가”, “2025-05-04 는 명절도 아닌데 왜 그만큼 낮았나 — 봄·연휴·날씨 가운데 무엇이 겹쳤나”.

좋은 물음의 조건은 이 표나 옆 표로 확인할 수 있는 모양이라는 것이다. “사람들이 명절에 쉬어서”는 설명이지 물음이 아니고, “전기가 아까워서”는 이 자료로 확인할 길이 없다. 실제로 설은 27일의 낮은 순위 중앙값이 282위인데 추석 27일은 30위다 — 같은 명절인데 이만큼 갈리는 것이 다음 차시로 이어지는 물음이 된다.

2. 넓은 표를 긴 표로 바꾸면 행이 왜 정확히 24배가 되는가? 24배가 아니라면 무엇을 의심해야 하는지 쓰시오.
📖 모범 답안

넓은 표의 한 행에는 시각 칸이 24개 있고, melt 는 그 칸 하나하나를 따로 한 행으로 만든다. 그래서 행 수가 행 × 24 가 된다(2,922 × 24 = 70,128).

24배가 아니라면 셋을 의심한다 — ① 겹친 날짜가 남아 있다(우리 표에서는 334일 × 24 = 8,016행이 더 붙었다), ② 빈 줄이 섞여 있다(1 × 24 = 24행), ③ 연도마다 시각 칸 수나 열 이름이 다른 파일이 섞여 있다. 우리 표에서는 ①과 ②가 함께 걸려 (334 + 1) × 24 = 8,040행이 남았다. (빈칸을 지우는 옵션으로 행이 줄어드는 경우도 있으니, 24배보다 적을 때도 같은 자리를 살핀다.)

3. 포털 목록의 파일을 모두 받아 이으면 2021-01-01 ~ 11-30 이 두 번 들어간다. 두 판의 값이 달랐다면 어느 쪽을 남기고, 그 결정을 어디에 적겠는가? 지우지 않고 그냥 두면 어느 계산이 틀어지는가?
📖 모범 답안

나중 판(12월 31일판)을 남긴다 — 이 자료는 '수요예측용 잠정자료'라서 뒤에 고쳐졌을 수 있고, 나중에 올라온 판이 확정에 더 가깝다. 코드로는 drop_duplicates("날짜", keep="last") 다. (두 판이 같다면 어느 것을 지워도 결과가 같지만, 규칙은 그래도 적는다 — 다음에 받은 파일에서는 다를 수 있다.)

결정과 까닭은 EDA 노트와 데이터 명세서에 적는다(받은 날짜 · 판 · 남긴 쪽 · 까닭).

그냥 두면 날짜로 묶은 그날 하루 평균은 멀쩡할 수 있어도, 합계 · 날 수 · 전체 평균의 무게가 틀어진다 — 그 334일이 두 번 세어지기 때문이다. 녹였을 때 8,040행이 남는 것도 같은 까닭이다.

4. 1월 봉우리는 10시 칸, 8월 봉우리는 18시 칸이다. 두 달의 모양이 다른 까닭을 가설 둘로 쓰고, 각 가설을 이 표로 어떻게 확인할지 한 줄씩 쓰시오.
📖 모범 답안

가설 1 — 겨울 봉우리는 출근·등교와 함께 난방이 한꺼번에 켜지는 아침에 선다. 확인 — 1월의 날을 더 추운 날 / 덜 추운 날로 갈라 시각별 모양을 따로 그려, 추운 쪽에서 아침 봉우리가 더 높아지는지 본다.

가설 2 — 여름 봉우리는 기온이 가장 높은 오후의 냉방이 만든다. 확인 — 8월을 더운 날 / 덜 더운 날로 갈라 같은 그림을 그려, 더운 쪽에서 오후 봉우리가 더 높고 더 늦은 시각으로 가는지 본다.

덧붙여 볼 것 — 8월 봉우리는 여덟 해를 겹쳤을 때 18시 칸이지만 해마다 펴 보면 2018~2020 17시 → 2021~2022 18시 → 2023~2025 19시 로 걸어간다. '18시'는 여덟 해를 겹쳐 만든 봉우리이므로, 보고할 때는 어느 기간을 겹쳤는지를 함께 적어야 한다. (왜 저녁으로 갔는지는 8차시에서 연다.)

5. 탐색에서 찾은 '이상한 값'을 바로 지우면 안 되는 까닭을 오늘 표에서 예를 들어 쓰시오.
📖 모범 답안

4만 MW 대의 낮은 날들은 오류가 아니라 추석이다(가장 낮은 2020-10-01 은 43,597MW). 튀는 값이라고 지우면 명절이라는 이야기와, 나중에 모델이 반드시 알아야 할 날이 함께 사라진다.

70,128칸 가운데 가장 낮은 2025-05-04 12시 칸 35,811MW 도 같다. 다섯 칸이 모두 그날 한낮(10~14시 칸)에 몰려 있는데, 이것이 오류라면 다섯 칸이 나란히 몰릴 까닭이 없다 — 무언가 실제로 일어난 것이다.

그래서 순서는 ① 날짜·요일·공휴일 이름을 붙여 무엇인지 확인 → ② 지울지 남길지 결정 → ③ 결정과 까닭을 기록 이다. 지우는 것이 답일 때도 있지만, 지운 사실과 까닭이 적히지 않으면 그 분석은 되짚을 수 없는 분석이 된다.

6. EDA 노트 — 오늘 둘러본 것을 아래 다섯 칸에 정리해 제출하시오. 판의 [EDA 노트로 보내기] 를 누르면 ㉱ 칸에 초안이 들어옵니다. 그대로 내지 말고 자기 말로 고쳐 쓰세요. 자기 자료로 프로젝트를 하는 팀은 여러분 표에 같은 순서를 돌린 뒤 채웁니다.
칸적을 것
㉮ 한 행이 무엇인가
㉯ 검사 셋의 결과 · 지운 것과 남긴 것의 까닭
㉰ 가장 낮은 날·높은 날 셋 — 그날 무슨 일이 있었나
㉱ 발견 → 그래서 물을 것 (세 쌍)
㉲ 이상한 것 하나와 지우지 않은 까닭
📖 모범 답안

㉮ 한 행은 하루이고, 그 행의 칸 스물넷은 그날의 1시 칸부터 24시 칸까지 한 시간씩의 평균 전력(MW)이다. (긴 표로 바꾼 뒤에는 한 행이 하루의 한 시각이다.)

㉯ 겹친 날짜 334일(2021-01-01 ~ 11-30) — 두 줄의 값이 모두 같았지만 규칙대로 나중 판을 남겼다(keep="last"). 모든 칸이 빈 행 1줄 — 2025년 파일 맨 끝이라 지웠다(dropna(how="all")). 고친 뒤 2,922행 = 첫날~끝날 날 수 2,922, 긴 표 70,128행 = 24배. 지우기 전에는 녹인 행이 78,168로 8,040 많았다.

㉰ 가장 낮은 날 2020-10-01(목, 추석, 43,597MW) · 2018-09-24(월, 추석, 43,699) · 2019-09-13(금, 추석, 44,580). 가장 높은 날 2024-08-20(화, 83,203) · 2022-12-23(금, 83,011) · 2024-08-21(수, 81,875) — 여름과 겨울이 번갈아 나오고 공휴일은 하나도 없다.

㉱ 보기 — ① 발견: 가장 낮은 8일 가운데 여섯이 추석·추석 다음날이다 → 물을 것: 연휴 수요는 같은 계절 평일보다 몇 % 낮은가? ② 발견: 8월 봉우리가 여덟 해를 겹치면 18시 칸인데 해마다 17 → 19시로 걸어간다 → 물을 것: 무엇이 저녁 쪽으로 밀고 있나(기온인가, 다른 것인가)? ③ 발견: 1월 평일 13시 칸이 12시 칸보다 4,489MW 낮은데 일요일에는 962MW뿐이다 → 물을 것: 이 골이 정말 점심시간이라면 다른 달·다른 요일에서도 같은 자리에 있나?

㉲ 보기 — 70,128칸 가운데 가장 낮은 다섯 칸이 모두 2025-05-04(일) 한낮(12시 칸 35,811MW부터 10시 칸 38,075MW까지)이다. 새벽이 아니라 한낮이 가장 낮다는 것은 오류처럼 보이지만, 다섯 칸이 나란히 몰린 것은 실제로 무언가 있었다는 뜻이다. 지우지 않고 물음으로 남긴다 — 봄·연휴·일요일·맑은 한낮 가운데 무엇이 겹쳤는지를 날씨 자료와 함께 봐야 알 수 있다(8차시).

자기 자료 팀은 ㉮~㉲ 를 자기 표의 숫자로 채운다. 채울 수 없는 칸이 있다면 그것 자체가 발견이다 — "우리 표에는 시간 축이 없다"도 ㉮ 의 답이 된다.

+
더 알아보기

표 뒤에 있는 이야기 셋

0시부터 6시까지만 크게 본 그림0시1시2시3시4시5시6시전력 자료 — 칸 이름 = 그 한 시간이 끝나는 시각1시 칸2시 칸3시 칸4시 칸5시 칸6시 칸「1시 칸」이 담는 한 시간 = 0시 ~ 1시기상 관측 — 값 하나 = 그 정각에 잰 값「1시」가 가리키는 순간 = 1시 정각이름만 보고 이으면1시 칸1시 정각30분 ~ 1시간 어긋난다
방법 더 깊이

'1시'는 몇 시부터 몇 시인가

시간마다 값이 하나씩 있는 표는 세상에 아주 많습니다. 그런데 그 칸 이름이 무엇을 가리키는지는 분야마다 관행이 다릅니다. 전력처럼 한 시간 동안 쌓인 양을 적는 자료는 흔히 구간이 끝나는 시각으로 이름을 답니다 — '1시 칸'은 0시부터 1시까지의 한 시간이라는 뜻이지요. 반면 기상 관측처럼 그 순간을 재는 자료는 정각의 값을 적습니다 — '1시'는 1시 정각에 잰 기온입니다.

두 표를 시간 단위로 이을 때 이름만 보고 맞추면 어떻게 될까요. 한쪽은 한 시간짜리 덩어리, 다른 쪽은 그 덩어리가 끝나는 순간의 점입니다. 30분에서 한 시간까지 어긋난 채 붙게 되고, 그러면 "기온이 가장 높은 시각보다 전력 봉우리가 한 시간 늦다" 같은 있지도 않은 발견이 만들어집니다. 4차시에서 기온 자료를 붙일 때 우리가 처음 확인해야 할 것이 바로 이 한 칸입니다.

확실히 하는 방법은 셋입니다. ① 제공 기관의 설명 문서에서 구간 표기 문장을 찾는다. ② 없으면 자료 자체에 시각을 아는 사건이 남긴 자국을 본다(우리는 점심시간의 골이 13시 칸에 찍히는 것을 보았습니다). ③ 그래도 확실하지 않으면 확실하지 않다고 적고 기관에 묻습니다. 셋 다 분석의 일부예요.

도해: 0시부터 6시까지의 눈금 위에 두 표기를 나란히 놓고, 그대로 이었을 때 어긋나는 폭을 표시했다. · 이 파일의 설명에는 구간 표기 문장이 없어 확정하지 못했다 — 13시 칸의 점심 골은 '구간 끝 표기'를 받치는 정황이다.

실시간계통 운영잠정 공개수요예측용계량 확인정산확정 통계▲ 우리가 받은 표값은 이 길 위에서 고쳐질 수 있다 — 그래서 보고서에'받은 날짜'와 '판(버전)'을 적는다.포털의 2021년 — 두 판11월 30일판334행12월 31일판365행겹치는 334일겹친 334일 × 24칸 = 8,016칸을 하나씩 맞대었다값이 다른 칸0— 이 두 판 사이에는숫자가 고쳐진 흔적이 없다.
현장

잠정 자료와 확정 자료 — 숫자는 나중에 바뀐다

우리가 받은 파일에는 “수요예측용 잠정자료” 라고 적혀 있습니다. 이 한 줄이 뜻하는 바가 작지 않아요. 전력 통계는 계통을 운영하면서 실시간으로 만들어지고, 그 뒤 계량값 확인과 정산을 거쳐 확정됩니다. 그 사이에 숫자가 고쳐질 수 있다는 뜻입니다. 잠정값은 틀린 값이 아니라 아직 굳지 않은 값이에요.

포털에 2021년이 두 벌로 남아 있는 것도 그 흔적입니다. 11월 30일까지를 담은 판이 먼저 올라오고, 연말에 한 해치를 담은 판이 다시 올라온 것이죠. 그래서 목록의 파일을 모두 받아 이으면 같은 날이 두 번 들어옵니다. 우리는 규칙으로 나중 판을 남기기로 정했습니다.

다만 이 두 판을 실제로 맞대어 보면 재미있는 결과가 나옵니다 — 겹친 334일 × 24칸, 곧 8,016칸 가운데 값이 다른 칸이 0 입니다. 이 두 판 사이에는 숫자가 고쳐진 흔적이 없어요. 그러니 "잠정이니까 다를 것"이라고 짐작으로 적으면 안 됩니다. 잠정과 확정의 차이를 보려면 전력거래소가 따로 내는 확정 통계와 맞대어야 합니다.

여기서 배울 습관은 하나입니다. 분석 보고서에 받은 날짜와 판(버전)을 적는 것. 같은 이름의 파일이라도 언제 받았느냐에 따라 숫자가 다를 수 있고, 그 한 줄이 없으면 몇 달 뒤 다른 사람이 같은 분석을 재현할 수 없습니다.

도해: 전력 통계가 실시간 → 잠정 공개 → 계량 확인·정산 → 확정으로 가는 길과, 포털 2021년 두 판의 겹침을 그렸다. · 겹친 8,016칸 가운데 값이 다른 칸 0은 원장 실측이다.

관제 벽 화면실제 수요예측 수요0시6시12시18시24시예비력이 줄면 발전기를 더 켠다켜 둔 발전기8· 대기4예측이 함께 보는 것기온·습도일조요일명절·연휴큰 경기
진로

전력 계통을 지키는 사람들

전기는 거의 저장하지 않습니다. 그래서 쓰는 만큼 그 순간에 만들어야 합니다 — 조금만 모자라도 주파수가 떨어지고, 조금만 남아도 발전기를 헛돌리게 됩니다. 전력거래소의 중앙전력관제센터는 이 아슬아슬한 균형을 하루 24시간 지켜보는 곳입니다. 벽 화면에는 예측 수요 곡선과 실제 수요 곡선이 겹쳐 흐르고, 둘의 틈이 벌어지면 발전기를 더 켜거나 내립니다.

그 예측 곡선을 만드는 사람이 수요 예측 담당자입니다. 하는 일이 오늘 우리가 한 일과 놀랄 만큼 닮았어요. 내일이 무슨 요일인지, 공휴일인지, 연휴의 며칠째인지, 기온과 습도와 일조가 어떨지, 큰 스포츠 경기가 있는지를 모두 표에 붙여 놓고 비슷한 날을 찾습니다. 우리가 오늘 극단값에 날짜·요일·공휴일 이름을 붙인 것이 바로 그 첫 손질입니다.

이 일에는 데이터 과학자만 있는 것이 아닙니다. 계통을 아는 전기공학 전공자, 예측 모형을 만드는 통계·컴퓨터 전공자, 기상 자료를 읽는 사람, 그리고 예측이 크게 빗나갔을 때 왜 빗나갔는지 되짚어 기록으로 남기는 사람이 함께 일합니다. 마지막 역할이 특히 중요합니다 — 다음 해에 같은 실수를 하지 않게 하는 것은 새 모형이 아니라 잘 적힌 기록인 경우가 많거든요. 오늘 여러분이 쓰는 EDA 노트가 그 연습입니다.

도해: 관제 벽 화면에서 예측 수요와 실제 수요가 겹치는 모양, 켜 둔 발전기와 대기 중인 발전기, 예측이 함께 보는 것들을 그렸다. (화면 배치는 설명을 위한 도해이고 특정 기관의 실제 화면이 아니다.)