Programming/Python

[Python] 실제 온도 데이터를 반영한 기간별 온도 가상의 온도 데이터 생성해 보기

변화의 물결1 2024. 2. 23. 00:05

 

 

 

 안녕하세요.

 

 이번에는 1년 치 가상의 온도데이터를 생성 테스트를 하려고 했는데, 간단하게 Random 함수를 사용하면 되지? 생각했는데, 이렇게 하면 여름에 마이너스 온도가 나오거나 추운 겨울에도 플러스 온도가 나오는 문제가 발생합니다.

 

 그래서 현실온도 데이터를 기반으로 해서 1년 치 혹은 특정 시기의 온도와 비슷하게 가상의 데이터가 생성될 수 있게 Python 코드로 작업해 보았습니다.

 

 

 기본 아이디어를 GPT에서 틀을 생성하고 나머지 부분들 기능 추가 및 수정 진행했습니다. 어떻게 시작하면 될까라는  부분에 있어서는 GPT의 도움을 받아 보는 것도 나쁘지 않아 보입니다.

 

 그러나 아직까지는 코드를 생성한 후 확인하고 사용해야 할 것 같습니다. 가끔 중간중간에 버그나  수정해주어야 할 부분들이 있기 때문에 자동 생성된 코드를 이해하는 것을 필수인 듯합니다.

 


1. 기  능

 

  - 생성하고자 하는 기간 지정

  - 실제 온도 반영하여 온도 변화 및 오전 오후 시간대에 대한 반영

  - 생성한 데이터 파일로 출력

 

    

2. 코드 간단한 설명

 

 - random 및 datetime, timedelta 모듈을 가져옵니다.

 

   reference_data라는 사전(dictionary) 구조체 정의합니다.  이 온도 구조체 특정 날짜에 대한 참조 온도 데이터를 포함하고 있습니다. 그래서 이 부분을 기상청 데이터로 넣으면 됩니다.

  각 날짜마다 평균 온도, 최저 온도 및 최고 온도가 들어갑니다. (하단 기상청 링크에서 원하는 기간 선택해서 Excel이나 CSV로 출력 가능 합니다.

 

 generate_weather_data 함수는 기상 온도 데이터를 생성하고 파일에 기록합니다. 이 함수는 예시는 주어진 기간(2023년 1월 1일부터 2024년 1월 1일까지)에 대해 10분 간격으로 가상 온도 데이터를 생성합니다.

 

 각 시간 간격에 대해 해당 날짜가 reference_data에 있는지 확인하고, 있으면 그에 맞게 온도를 생성하여 파일에 기록합니다. 온도는 해당 시간이 평균 온도와 최저 온도 또는 최고 온도 사이에 있는지에 따라 다르게 생성됩니다.

 

  만약 참조 데이터가 없는 날짜인 경우 "No reference data found for the given date."를 파일에 기록합니다.

generate_weather_data 함수가 실행되면서 생성된 기상 데이터는 "weather_data.txt" 파일에 기록되는데 file.write()에 인자로 원하는 저장하고자 하는 문자열의 형태를 만들어 저장하면 됩니다.

 

 추가로 if hour < 12:를 통해 현재 시간이 오전인지 확인하고, 오전인 경우 평균 온도와 최저 온도 사이의 가상 값을 생성합니다. 오전 시간대에는 온도가 점차적으로 상승하는 경향을 반영하였고, 오후인 경우 평균 온도와 최고 온도 사이의 값을 생성합니다. 오후 시간대에는 온도가 점차적으로 하강하는 경향을 반영되어 있습니다. 이 부분을 좀 더 세분화해서 좀 더 더 현실 같이 맞춰 볼 수 있을 거라고 생각됩니다.

 

 

3. 소스 코드

 

   reference_data 부분은 길어서 몇 개만 넣어 두었습니다. 추가해서 넣으면 에러메시지 없이 데이터가 기록됩니다.

 

import random
from datetime import datetime, timedelta

# Sample reference data
# 날짜, 평균온도, 최저온도, 최고온도
reference_data = {
"2023-01-10": (1.6, -3.9, 9.1),
"2023-01-11": (2.6, -2.0, 9.2),
"2023-01-12": (5.9, -0.6, 12.5),
"2023-01-13": (8.3, 5.1, 10.1),
"2023-01-14": (6.6, 3.8, 8.4),
"2023-01-15": (-0.2, -3.5, 3.8),
"2023-01-16": (-4.6, -6.8, -1.2),
# 기상청 날짜 데이터 추가    
}


def generate_weather_data():
    start_date = datetime(2023, 1, 1)
    end_date = datetime(2024, 1, 1)
    delta = timedelta(minutes=10)
    current_date = start_date

    with open("weather_data.txt", "w") as file:
        while current_date < end_date:
            temp_date = current_date.strftime("%Y-%m-%d")
            if temp_date in reference_data:
                avg_temp, min_temp, max_temp = reference_data[temp_date]
                for _ in range(130):
                    hour = current_date.hour
                    minute = current_date.minute
                    second = random.randint(0, 59)

                    if hour < 12:
                        temperature = round(random.uniform(min_temp, avg_temp), 1)
                    else:
                        temperature = round(random.uniform(avg_temp, max_temp), 1)

                    # Randomly generate seconds
                    second = random.randint(0, 59)

                    file.write(f"시간: {current_date.strftime('%Y-%m-%d %H:%M')}:{second:02d} / 온도: {temperature} \n")
                    current_date += delta
            else:
                file.write("No reference data found for the given date.\n")
                current_date += timedelta(days=1)

generate_weather_data()

 

 

4. 출력 결과

 

 코드에 이상이 없다면 weather_data 파일이 생성되고, reference 날짜가 없는 기간에는 “No reference data found for the given date”가 나타납니다.

  

 

 

 

  이렇게 하면 실제 온도 데이터를 반영한 1년 치 가상온도를 생성할 수 있습니다. 완벽한 소스라고 보기보다는 이렇게도 한번 생각할 수 있구나 참조가 되었으면 합니다. 이제는 프로그램 개발에 있어 GPT를 비서(아이언맨의 자비스)처럼 조금씩 사용해야 하는 시대가 오는 듯합니다. ^^;

 

 

감사합니다.

 

 

<참고 사이트>

1. 기상청 기간별 온도 데이터

https://data.kma.go.kr/stcs/grnd/grndTaList.do

2. ChatGPT 3.5

 

 

반응형