기술과 산업/AI
분야별 데이터 수집 전략 가이드 시리즈 - 4화. 기상청 API로 날씨 데이터를 수집하고 시계열 분석에 활용하는 전략
B컷개발자
2025. 5. 9. 15:35
728x90
기상청 API를 통해 날씨 데이터를 수집하고, Python 기반 시계열 분석과 예측 모델에 적용하는 실전 수집 전략을 알려드립니다.
왜 날씨 데이터인가? 수요 예측과 AI의 핵심 변수
날씨는 물류, 유통, 에너지, 소매업, 농업, 관광 산업 등 거의 모든 산업에서 수요 예측의 핵심 변수로 작용합니다.
- ☔ 갑작스러운 비 → 편의점 우산, 라면, 즉석식품 매출 증가
- ☀️ 폭염 → 냉방기기 수요 폭등, 야외 활동 감소
- ❄️ 폭설 예보 → 물류 지연, 대중교통 분석 필요
이처럼 기상청의 정량적 기후 데이터를 시계열 분석에 적용하면 실무 인사이트가 폭발적으로 강화됩니다.
기상청 데이터포털 API 개요
기상청 기후데이터포털은 대한민국 기후 관측 및 예보 정보를 API 형식으로 제공하는 플랫폼입니다.
가장 널리 쓰이는 API는 아래와 같습니다.
API명 설명
| 초단기실황조회 | 현재 기온, 습도, 풍속 등 실시간 기상 정보 |
| 단기예보조회 | 1~3일 이내 기온, 강수량 예보 |
| 동네예보조회 | 행정동 단위 날씨 예측 |
| 기상관측자료조회 | 과거 날씨 기록 (일/월 단위) |
모든 API는 기상청 자체 개발자센터에서 인증키 발급 후 사용
호출 시 기상 관측소 코드(STNID) 또는 격자(X, Y) 좌표 필요
🔧 API Key 발급 및 구조 이해
- 기후데이터포털 회원가입
- ‘OpenAPI’ 메뉴 → 인증키 발급 신청
- 인증 후 GET 방식으로 요청
- 예시:
http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst
?serviceKey=발급받은키&numOfRows=10&pageNo=1
&base_date=20240501&base_time=0500
&nx=60&ny=127&dataType=JSON
nx, ny는 격자 좌표이며, 위경도를 변환해야 함
서울 종로구의 경우 대략 nx=60, ny=127
🧪 Python 실전 예제: 초단기 날씨 예보 데이터 수집 및 시계열 저장
1. 필요한 라이브러리
pip install requests pandas datetime
2. Python 코드
import requests
import pandas as pd
from datetime import datetime, timedelta
# API 파라미터
API_KEY = "YOUR_API_KEY"
url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst"
# 기준 날짜와 시간 설정
base_date = datetime.today().strftime("%Y%m%d")
base_time = "0500" # 새벽 5시 기준 예보
params = {
'serviceKey': API_KEY,
'numOfRows': '100',
'pageNo': '1',
'dataType': 'JSON',
'base_date': base_date,
'base_time': base_time,
'nx': '60', # 서울 종로구
'ny': '127'
}
response = requests.get(url, params=params)
items = response.json()['response']['body']['items']['item']
# DataFrame 생성
df = pd.DataFrame(items)
df = df[df['category'].isin(['TMP', 'REH', 'PTY'])] # 온도, 습도, 강수형태 필터
df = df[['fcstDate', 'fcstTime', 'category', 'fcstValue']]
# 피벗으로 구조 변환
df = df.pivot_table(index=['fcstDate', 'fcstTime'], columns='category', values='fcstValue').reset_index()
print(df.head())
📊 시계열 분석 적용 예시
예측 기반 응용
- 시간대별 기온 변화 → 매장 방문자 수 예측
- 강수확률 + PTY (강수형태) → 배송 지연 리스크 분석
- 특정 날씨 조건(예: 고온·고습) → 장비 이상 알림 시스템 개발
시각화 (matplotlib 또는 Plotly)
import matplotlib.pyplot as plt
df['datetime'] = pd.to_datetime(df['fcstDate'] + df['fcstTime'], format='%Y%m%d%H%M')
df = df.sort_values('datetime')
plt.plot(df['datetime'], df['TMP'].astype(float), label='기온(℃)')
plt.xticks(rotation=45)
plt.title("시간대별 기온 변화")
plt.xlabel("시간")
plt.ylabel("온도(℃)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
⚙️ 데이터 활용 시 유의사항
항목 설명
| API 호출 제한 | 초단기 실황 API는 일일 약 10,000건 제한 |
| 데이터 갱신 주기 | 1시간 단위, base_time 기준으로 구성 |
| 좌표 변환 | 위도-경도 → 격자좌표(nx, ny) 변환 필요 (기상청 제공표 있음) |
| 결측 처리 | 일부 시간대 데이터 누락 시 보간(interpolation) 필요 |
실무 활용 시나리오 예시
분야 적용 방식
| 편의점 매출 예측 | 기온 상승 → 음료·얼음 매출 추정 |
| 배달/물류 | 비 예보 시 배차 수량 조절 |
| 공공안전 | 고온다습 조건 시 폭염주의보 + 알림 푸시 |
| 농업 | 특정 작물 생육 조건에 맞춘 자동 경보 |
다음 회차 예고 – 한국은행 ECOS API로 경제지표 시계열 수집하기
5화에서는 **한국은행 ECOS(경제통계시스템)**을 활용해
금리, 환율, 소비자물가, 통화량 등 주요 경제지표를 시계열로 수집하고 시각화/분석하는 방법을 다룹니다.
728x90