오늘부터 본격적으로 프로젝트가 시작되었다. 주말 동안 로직 구현은 어느 정도 해두었기 때문에 오늘은 머신러닝에 필요한 데이터를 찾고 정리했다.
먼저 찾고 있던 데이터는 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년치의 시간별 일사량 데이터와 합쳐 학습에 필요한 데이터 정리를 마무리할 예정이다.