9.2 날씨 자료의 특징과 레이블¶
자료 불러오기¶
자료실의 seoul_weather_2021_2025.csv를 Colab에 업로드한 뒤 다음 코드를 실행한다.
import pandas as pd
df = pd.read_csv("seoul_weather_2021_2025.csv", parse_dates=["date"])
print(df.shape)
print(df.head(3))
실행 결과
(1826, 8)
date temp_mean temp_max ... humidity wind_max sunshine_h
0 2021-01-01 -5.9 -0.7 ... 63 14.8 7.6
1 2021-01-02 -5.9 -2.8 ... 34 19.0 9.0
2 2021-01-03 -6.3 -2.1 ... 41 17.2 9.0
[3 rows x 8 columns]
2021-01-01부터 2025-12-31까지 1,826일의 자료이며 열은 8개다. 열의 의미와 단위는 다음과 같다.
| 열 | 의미 | 단위 |
|---|---|---|
date |
날짜 | |
temp_mean |
일평균기온 | ℃ |
temp_max |
일최고기온 | ℃ |
temp_min |
일최저기온 | ℃ |
precip_mm |
일강수량 | mm |
humidity |
일평균 상대습도 | % |
wind_max |
일최대풍속(지상 10 m) | km/h |
sunshine_h |
일조시간 | 시간 |
자료의 성격
이 자료는 Open-Meteo가 제공하는 서울 지점(위도 37.57, 경도 126.98) 재분석 자료다. 재분석 자료는 관측값을 수치 모델로 보정해 격자 단위로 산출한 값이므로, 기상청 서울 관측소의 실측값과 수치가 다를 수 있다. 출처와 이용 조건은 부록 D에 정리했다.
레이블 생성¶
예측 대상은 다음 날 평균기온이다. 각 행에 다음 날의 temp_mean 값을 레이블 열 target_temp로 추가한다. shift(-1)은 열 전체를 한 행 위로 이동한다.
df["target_temp"] = df["temp_mean"].shift(-1)
print(df[["date", "temp_mean", "target_temp"]].tail(3))
실행 결과
date temp_mean target_temp
1823 2025-12-29 3.1 -1.9
1824 2025-12-30 -1.9 -6.1
1825 2025-12-31 -6.1 NaN
2025-12-29 행의 target_temp는 다음 날인 12-30의 평균기온 −1.9℃다. 마지막 날은 다음 날 자료가 없으므로 NaN(결측)이며, 9.3절에서 제외한다.
계절 위치 특징¶
기온은 계절에 따라 반복적으로 변동한다. 날짜를 1~366의 연중 일수로 입력하면 12월 31일(365)과 1월 1일(1)이 가장 먼 값이 되지만, 실제로는 하루 차이다. 이 문제를 해결하기 위해 연중 일수를 원 위의 각도로 환산하고 사인·코사인 값 두 개를 특징으로 사용한다.
import numpy as np
day = df["date"].dt.day_of_year
df["doy_sin"] = np.sin(2 * np.pi * day / 365.25)
df["doy_cos"] = np.cos(2 * np.pi * day / 365.25)
print(df.loc[[0, 90, 181, 273], ["date", "doy_sin", "doy_cos"]].round({"doy_sin": 2, "doy_cos": 2}))
실행 결과
date doy_sin doy_cos
0 2021-01-01 0.02 1.00
90 2021-04-01 1.00 0.01
181 2021-07-01 0.01 -1.00
273 2021-10-01 -1.00 0.00
doy_cos는 1월 초에 1, 7월 초에 −1이므로 겨울과 여름을 구분한다. doy_sin은 4월 초에 1, 10월 초에 −1이므로 기온이 상승하는 봄과 하강하는 가을을 구분한다. 두 값을 함께 사용하면 1년의 모든 날짜가 원 위의 한 점으로 표현되고, 12월 31일과 1월 1일은 인접한 점이 된다.
확인 문제¶
shift(-1)대신shift(1)을 적용하면target_temp에 어떤 값이 저장되는지 설명하시오.- 10월 15일의
doy_sin과doy_cos부호를 예상하고 코드로 확인하시오.