251110 [ Day 84 ] - Project (2)

TaeHyun·2025년 11월 10일

TIL

목록 보기
98/184

시작하며

오늘부터 본격적으로 프로젝트가 시작되었다. 주말 동안 로직 구현은 어느 정도 해두었기 때문에 오늘은 머신러닝에 필요한 데이터를 찾고 정리했다.

공공데이터포털 API

먼저 찾고 있던 데이터는 20230101~20241231까지 시간별 서울의 태양광 발전량 데이터였다. 하지만 24년도 데이터는 금방 찾았지만 이전 데이터를 찾기 힘들었다. 결국 찾지 못하고 공공데이터포털에서 '한국전력거래소_지역별 시간별 태양광 발전량 정보'라는 Open API 데이터를 신청해서 API 키를 발급받아 원하는 데이터를 받을 수 있었다.

# API 설정
SERVICE_KEY = ""
BASE_URL = ""

# 날짜 범위 설정
year = 2024
month = 2
last_day = calendar.monthrange(year, month)[1]

start_date = datetime(year, month, 1)
end_date = datetime(year, month, last_day)
num_of_rows = 1000

# 모든 데이터 수집
all_items = []
current_date = start_date

while current_date <= end_date:
    trade_ymd = current_date.strftime("%Y%m%d")
    
    # 첫 요청으로 해당 날짜의 totalCount 확인
    params = {
        "serviceKey": SERVICE_KEY,
        "pageNo": 1,
        "numOfRows": num_of_rows,
        "dataType": "json",
        "tradeYmd": trade_ymd
    }
    
    response = requests.get(BASE_URL, params=params)
    
    # 에러 처리
    if response.status_code != 200:
        print(f"에러 발생: {trade_ymd}, 상태코드: {response.status_code}")
        print(f"응답: {response.text[:200]}")
        break
    
    try:
        data = response.json()
    except:
        print(f"JSON 파싱 에러: {trade_ymd}")
        print(f"응답: {response.text[:200]}")
        break
    
    total_count = int(data['response']['body']['totalCount'])
    total_pages = (total_count // num_of_rows) + (1 if total_count % num_of_rows > 0 else 0)
    
    # 해당 날짜의 모든 페이지 수집
    for page in range(1, total_pages + 1):
        params['pageNo'] = page
        response = requests.get(BASE_URL, params=params)
        data = response.json()
        items = data['response']['body']['items']['item']
        all_items.extend(items)
        time.sleep(0.1) 
    
    print(f"{trade_ymd} 완료: {total_count}개 데이터")
    current_date += timedelta(days=1)
    time.sleep(0.2) 

# DataFrame 생성
df = pd.DataFrame(all_items)
print(f"\n총 {len(df)}개 데이터 수집 완료")
df.head()

이렇게 2년간의 시간별 데이터를 받아서 저장했는데, 중간중간 데이터가 없는 날들이 꽤나 많아서 일단 문의를 넣어두었다. 2년치 데이터가 있어서 당장 머신러닝을 하기에는 무리 없을 것 같지만, 학습 결과가 만족스럽지 못하면 22년도의 데이터도 추가해야 될 것 같다.

마치며

내일은 저장한 데이터들을 전처리한 뒤 따로 저장해둔 2년치의 시간별 일사량 데이터와 합쳐 학습에 필요한 데이터 정리를 마무리할 예정이다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글