관리 메뉴

열심히 일한 당신 떠나라

기후위기 증거-식량위기 대한민국(남재작) 본문

사회/교육

기후위기 증거-식량위기 대한민국(남재작)

@thiskorea 2024. 2. 24. 23:01

본업으로 돌아가본다. 지금 저는 인공지능중심고에서 인공지능을 가르치고 있는 정보교사입니다. '식량위기대한민국(남재작)'을 읽고 있는 중에 이 문구가 궁금해졌습니다. 

우리가 오해하는 것 중 하나가 평균기온이 1.5도 오르면 우리나라도 1.5도 정도 기온이 오를 것으로 착각하는 것이다. 하지만 현실은 그렇지 않다. ...(중략) 또 하나의 특징은 극지방의 경우 가장 더운 날의 기온이 상승하는 정도보다 가장 추운 날 기온이 상승하는 폭이 더 크다. 이런 이유로 평균 기온 상승에서 예상하는 것보다 북극의 빙하는 더 빠르게 줄어들게 된다.

그래서 제가 살고 있는 청주시 기온 데이터를 갖고 시각화를 해보았습니다. 파이썬과 chatGPT를 사용하여 코드를 작성하였습니다.

 기상청 기상자료개방포털(https://data.kma.go.kr/cmmn/main.do)에서 필요한 데이터를 다운로드 받는다.

기상자료개방포털

저는 기온분석을 선택해서 비교해 보았습니다. 제 또래가 태어난 해가 1980년이라 1980년부터 2024년 2월까지 데이터를 다운로드하였습니다. 

검색조건을 다음과 같이 맞추고 검색을 하고 csv로 데이터를 다운로드합니다.

csv에는 불필요한 메타 데이터들이 있어서 간단한 데이터 분석에는 방해가 되어 지웁니다.

그리고 저는 열 제목도 영어로 처리하였습니다. 한글로 되어 있어도 상관없으나 나중에 귀찮은 일이 있을 수도 있어서 저는 영어로 작업을 합니다.

import pandas as pd

# 데이터 로드
data_path = '/content/drive/MyDrive/데이터분석/cj_temporature.csv'
df = pd.read_csv(data_path, encoding='CP949')

# 데이터의 처음 몇 줄과 기본 통계 정보 출력
df_head = df.head()
df_tail = df.tail()
df_description = df.describe()

df_head, df_tail, df_description

csv 파일을 구글 드라이브에 업로드시키고 data_path에 해당 파일을 불러옵니다.

결과는 다음과 같습니다.

더보기
(         date  avg  min  max
 0  1980-01-01  2.9 -3.3  6.8
 1  1980-01-02  5.8  4.8  7.1
 2  1980-01-03  4.5  1.9  5.4
 3  1980-01-04 -0.6 -4.7  2.3
 4  1980-01-05 -5.2 -9.6 -0.5,
              date   avg  min   max
 16120  2024-02-19  10.4  5.6  14.4
 16121  2024-02-20   5.8  3.9   8.0
 16122  2024-02-21   4.4  1.5   6.9
 16123  2024-02-22   1.2  0.3   2.7
 16124  2024-02-23   2.9  0.3   5.9,
                 avg           min           max
 count  16125.000000  16125.000000  16125.000000
 mean      12.825209      8.053371     18.350772
 std       10.376091     10.705181     10.465095
 min      -14.500000    -22.100000    -10.700000
 25%        3.800000     -1.000000      9.300000
 50%       13.900000      8.300000     20.200000
 75%       22.200000     17.800000     27.400000
 max       33.100000     28.900000     39.100000)

이제 평균기온, 최고기온, 최저기온을 비교하는 함수를 작성합니다.

import pandas as pd
import matplotlib.pyplot as plt

def visualize_temperature_comparison_avg(year1, year2, data_path):
    # 데이터 로드
    df = pd.read_csv(data_path, encoding='CP949')
    
    # 'date' 컬럼을 datetime 형태로 변환
    df['date'] = pd.to_datetime(df['date'])
    
    # 입력받은 두 해의 데이터 필터링 및 월별 평균 기온 계산
    df_year1 = df[df['date'].dt.year == year1]
    df_year2 = df[df['date'].dt.year == year2]
    monthly_avg_year1 = df_year1.groupby(df_year1['date'].dt.month)['avg'].mean()
    monthly_avg_year2 = df_year2.groupby(df_year2['date'].dt.month)['avg'].mean()
    
    # 월별 평균 기온 차이 계산
    avg_temp_diff = monthly_avg_year2 - monthly_avg_year1

    # 시각화
    plt.figure(figsize=(14, 7))
    plt.plot(monthly_avg_year1.index, monthly_avg_year1.values, label=f'{year1} Average Temperature', color='red')
    plt.plot(monthly_avg_year2.index, monthly_avg_year2.values, label=f'{year2} Average Temperature', color='blue')
    plt.title(f'Monthly Average Temperature in {year1} vs {year2}')
    plt.xlabel('Month')
    plt.ylabel('Average Temperature (℃)')
    plt.xticks(range(1, 13))  # 1 to 12 months on x-axis
    plt.legend()
    plt.grid(True)
    plt.show()

    return avg_temp_diff

def visualize_temperature_comparison_maxmin(year1, year2, data_path):
    # 데이터 로드
    df = pd.read_csv(data_path, encoding='CP949')
    
    # 'date' 컬럼을 datetime 형태로 변환
    df['date'] = pd.to_datetime(df['date'])
    
    # 입력받은 년도에 해당하는 데이터 필터링
    df_year1 = df[df['date'].dt.year == year1]
    df_year2 = df[df['date'].dt.year == year2]
    
    # 월별 최고 기온과 최저 기온 계산
    monthly_max_year1 = df_year1.groupby(df_year1['date'].dt.month)['max'].mean()
    monthly_min_year1 = df_year1.groupby(df_year1['date'].dt.month)['min'].mean()
    monthly_max_year2 = df_year2.groupby(df_year2['date'].dt.month)['max'].mean()
    monthly_min_year2 = df_year2.groupby(df_year2['date'].dt.month)['min'].mean()
    
    # 월별 최고 기온 차이 계산
    max_temp_diff = monthly_max_year2 - monthly_max_year1

    # 월별 최저 기온 차이 계산
    min_temp_diff = monthly_min_year2 - monthly_min_year1

    # 시각화
    plt.figure(figsize=(14, 7))
    
    # year1의 최고 기온과 최저 기온
    plt.plot(monthly_max_year1.index, monthly_max_year1.values, label=f'{year1} Max Temperature', color='red', marker='o')
    plt.plot(monthly_min_year1.index, monthly_min_year1.values, label=f'{year1} Min Temperature', color='blue', marker='o')
    
    # year2의 최고 기온과 최저 기온
    plt.plot(monthly_max_year2.index, monthly_max_year2.values, label=f'{year2} Max Temperature', color='orange', marker='o')
    plt.plot(monthly_min_year2.index, monthly_min_year2.values, label=f'{year2} Min Temperature', color='green', marker='o')
    
    plt.title('Monthly Max and Min Temperature Comparison')
    plt.xlabel('Month')
    plt.ylabel('Temperature (℃)')
    plt.xticks(range(1, 13))  # 1월부터 12월까지
    plt.legend()
    plt.grid(True)
    plt.show()

    return max_temp_diff, min_temp_diff

그리고 사용자로부터 비교하고자 하는 년도를 입력받습니다.

# 사용자로부터 부모의 태어난 해와 자식의 태어난 해를 입력받음
year1, year2 = map(int, input("부모의 태어난 해, 자식의 태어난 해를 입력하세요 (예: 1981 2022): ").split())
# 함수 실행
avg = visualize_temperature_comparison_avg(year1, year2, data_path)
max, min = visualize_temperature_comparison_maxmin(year1, year2, data_path)

저는 제가 태어난 해와 자식이 태어난 해인 1981 2022를 입력하였습니다.

1981년과 2022년의 평균 기온 비교 시각화
1981년과 2022년의 최고기온, 최저 기온 비교 시각화

1981년과 2022년의 평균 기온을 분석해 보니 제가 태어난 해에 비하여 우리 정원이가 태어난 해의 평균 기온이 상승한 것을 확인할 수 있습니다.

또한 최고기온이 오른 폭보다 최저기온이 오른 폭이 훨씬 큰 것을 확인할 수 있습니다.

수치로 비교하자면 

print("월별 평균 기온 차이:", avg)
print("월별 최고 기온 차이:", max)
print("월별 최저 기온 차이:", min)
더보기

월별 평균 기온 차이: date

1 7.493548 2 1.757143 3 2.832258 4 3.240000 5 2.909677 6 2.276667 7 1.500000 8 2.074194 9 3.686667 10 2.980645 11 7.373333 12 -0.919355 Name: avg, dtype: float64

월별 최고 기온 차이: date

1 5.129032 2 1.464286 3 0.793548 4 2.580000 5 2.261290 6 0.840000 7 0.858065 8 0.358065 9 1.940000 10 1.364516 11 7.380000 12 -2.932258 Name: max, dtype: float64

월별 최저 기온 차이: date

1 9.777419 2 2.039286 3 3.896774 4 3.850000 5 3.545161 6 3.640000 7 1.354839 8 2.825806 9 4.520000 10 4.067742 11 6.830000 12 0.209677 Name: min, dtype: float64

평균, 최고, 최저 기온 차 비교 시각화

그래프로 확인해 보면 최고 기온의 차이보다 최저 기온의 차가 훨씬 큰 것을 확인할 수 있습니다.

극지방의 경우에 최저 기온의 상승 폭이 더 크다는 것을 청주 지역 데이터를 통해서 간접적으로 확인할 수 있습니다.

지금 이 글을 작성하고 있는 시기는 2024년 2월 24일 밤입니다. 청주 지역은 비가 추적추적 내리고 있어요. 아직 2월임에도 불구하고 강수량이 평년보다 매우 많습니다. 기온 데이터를 강수량 데이터로 바꾸고 데이터 분석을 해봐도 좋을 것 같습니다. 2월에 이렇게 비가 많이 온 적은 태어나서 처음 같습니다. 기후 변화를 넘어서 기후 위기로 향해 가는 상황을 어떻게든 멈춰 설 수 있도록 우리가 노력해야 후손이 좋은 환경에서 살 수 있지 않을까요?