ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 분야별 데이터 수집 전략 가이드 시리즈 - 4화. 기상청 API로 날씨 데이터를 수집하고 시계열 분석에 활용하는 전략
    기술과 산업/AI 2025. 5. 9. 15:35
    728x90

    기상청 API를 통해 날씨 데이터를 수집하고, Python 기반 시계열 분석과 예측 모델에 적용하는 실전 수집 전략을 알려드립니다.


    왜 날씨 데이터인가? 수요 예측과 AI의 핵심 변수

    날씨는 물류, 유통, 에너지, 소매업, 농업, 관광 산업 등 거의 모든 산업에서 수요 예측의 핵심 변수로 작용합니다.

    • ☔ 갑작스러운 비 → 편의점 우산, 라면, 즉석식품 매출 증가
    • ☀️ 폭염 → 냉방기기 수요 폭등, 야외 활동 감소
    • ❄️ 폭설 예보 → 물류 지연, 대중교통 분석 필요

    이처럼 기상청의 정량적 기후 데이터를 시계열 분석에 적용하면 실무 인사이트가 폭발적으로 강화됩니다.


    기상청 데이터포털 API 개요

    기상청 기후데이터포털은 대한민국 기후 관측 및 예보 정보를 API 형식으로 제공하는 플랫폼입니다.
    가장 널리 쓰이는 API는 아래와 같습니다.

    API명 설명

    초단기실황조회 현재 기온, 습도, 풍속 등 실시간 기상 정보
    단기예보조회 1~3일 이내 기온, 강수량 예보
    동네예보조회 행정동 단위 날씨 예측
    기상관측자료조회 과거 날씨 기록 (일/월 단위)

    모든 API는 기상청 자체 개발자센터에서 인증키 발급 후 사용
    호출 시 기상 관측소 코드(STNID) 또는 격자(X, Y) 좌표 필요


    🔧 API Key 발급 및 구조 이해

    1. 기후데이터포털 회원가입
    2. ‘OpenAPI’ 메뉴 → 인증키 발급 신청
    3. 인증 후 GET 방식으로 요청
    4. 예시:
    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
Designed by Tistory.