서론
요즘 너무 덥다. 진짜 이딴게 날씨인가 싶다 분명 작년까지만해도 버틸만 했던걸로 기억하는데
이번해에는 버틸수가 없다. 근데 이게 체감상으로만 그런건지 아니면 데이터상으로도 정말 오른건지 궁금해서 (사실 인터넷 검색하면 다 나옴) 뻘짓으로 matplotlib를 사용해 지난 3년 데이터를 불러와 그래프로 표시해보았다
CSV 파일 불러오기
https://data.kma.go.kr/cmmn/main.do
먼저 기상자료개방포털에 가입해서 3년간 기후 데이터를 CSV파일로 다운받아야한다. 물론 제공하는 API로 쉽게 불러올 수 있지만 이 글에서는 CSV파일을 사용한 그래프 표출이기 때문에 넘어간다.
E:/Seoul_tempAVG_2022-2024_CSV/2024.csv
E:/Seoul_tempAVG_2022-2024_CSV/2023.csv
E:/Seoul_tempAVG_2022-2024_CSV/2022.csv
다운 받았으면 프로젝트를 생성후 프로젝트 파일에 CSV파일들을 넣어준다. 나는 E드라이브에 Seoul_tempAVG_2022-2024_CSV 프로젝트 파일을 생성후 2024.csv,2023.csv,2022.csv파일을 넣어줬다.
import os
import datetime
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib import ticker
from matplotlib.dates import DayLocator
from pandas.conftest import axis_1
import hypothesis
import pytest
plt.rcParams['font.family'] ='Malgun Gothic' #한글 폰트
plt.rcParams['axes.unicode_minus'] =False
시작하기에 앞서 필요한 라이브러리들과 package들을 import 해줘야한다. 마지막 줄에 plt.rcParms들은 한글 폰트를 사용하기 위한 코드다. 이게 없으면 그래프에서 한글이 제대로 나오지 않으니 주의.
#read csv data
data_2024 = pd.read_csv('E:/Seoul_tempAVG_2022-2024_CSV/2024.csv',encoding='cp949')
data_2023 = pd.read_csv('E:/Seoul_tempAVG_2022-2024_CSV/2023.csv',encoding='cp949')
data_2022 = pd.read_csv('E:/Seoul_tempAVG_2022-2024_CSV/2022.csv',encoding='cp949')
이제 프로젝트 파일안에 있는 CSV파일들을 읽어야한다. pd.read_csv를 사용해 ('드라이브명:/파일명/CSV이름')을 적어주고 encoding='cp949'로 한글 인코딩을 사용한다. CSV파일 내부에 한글에 적어져 있기 때문에 인코딩을 지정해주지 않으면 다 깨져서 출력된다. 이후 간단하게 읽어온 CSV파일을 출력해보면 아래와 같이 잘 나오는걸 볼 수 있다.
여기서 일시 (202X-XX-XX XX:XXX)의 type을 찍어보면 object 즉 문자열인데 이를 더 쉽게 관리하기 위해
datetime 자료형으로 변환해줘야한다. 먼저 새로운 datetime column을 생성해주고
#새로운 datetime columns 생성
data_2024['날짜_datetime'] = pd.to_datetime(data_2024['일시'])
data_2023['날짜_datetime'] = pd.to_datetime(data_2023['일시'])
data_2022['날짜_datetime'] = pd.to_datetime(data_2022['일시'])
2024,2023,2022년의 월/일 그래프를 찍어야하므로 연도,월,일을 추출한 후 월.일 column에 넣어준다.
#2024
data_2024['연도'] = data_2024['날짜_datetime'].dt.year
data_2024['월'] = data_2024['날짜_datetime'].dt.month
data_2024['일'] = data_2024['날짜_datetime'].dt.day
data_2024['월.일'] = data_2024.apply(lambda row: '.'.join(map(str,[row.월,row.일])),axis=1)
#2023
data_2023['연도'] = data_2023['날짜_datetime'].dt.year
data_2023['월'] = data_2023['날짜_datetime'].dt.month
data_2023['일'] = data_2023['날짜_datetime'].dt.day
data_2023['월.일'] = data_2023.apply(lambda row: '.'.join(map(str,[row.월,row.일])),axis=1)
#2022
data_2022['연도'] = data_2022['날짜_datetime'].dt.year
data_2022['월'] = data_2022['날짜_datetime'].dt.month
data_2022['일'] = data_2022['날짜_datetime'].dt.day
data_2022['월.일'] = data_2022.apply(lambda row: '.'.join(map(str,[row.월,row.일])),axis=1)
이후 일시,지점 같은 필요없는 column을 삭제해주고
#데이터 수정하기 (필요없는 열 삭제)
fix_data_2024 = data_2024.drop(['일시','지점','지점명'],axis=1)
fix_data_2023 = data_2023.drop(['일시','지점','지점명'],axis=1)
fix_data_2022 = data_2022.drop(['일시','지점','지점명'],axis=1)
print(fix_data_2024.head())
그래프를 그려주면 된다
#그래프 데이터 추가
#평균기온
plt.plot(fix_data_2024['월.일'], fix_data_2024['평균기온(°C)'], marker='.', label='2024 평균기온',color='r')
plt.plot(fix_data_2023['월.일'], fix_data_2023['평균기온(°C)'], marker='.', label='2023 평균기온 ',color='b')
plt.plot(fix_data_2022['월.일'], fix_data_2022['평균기온(°C)'], marker='.', label='2022 평균기온 ',color='g')
# 그래프 제목과 축 레이블 설정
plt.title('2022~2023 월/일 평균 기온 그래프')
plt.xlabel('월/일')
plt.ylabel('평균기온(°C)')
# x축 눈금 라벨 회전
plt.xticks(rotation=45)
# 범례 추가
plt.legend()
#마커 3일 간격으로
ax = plt.gca()
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=3))
#그리드 추가
plt.grid()
#그래프저장
plt.savefig('graph.png')
# 그래프 출력
plt.show()
결과적으로 아래와 같은 그래프가 생성된다. 2024년은 빨간색,2023년은 파란색,2022년은
초록색으로 각 해의 월/일 평균기온을 나타내는데 확실히 9월 11일 기준 2024년 그래프를
보면 혼자서 튄걸 볼 수 있다. 체감상 더 더운게 아니라 데이터상으로도 확실히 올랐다. 추후 API로 2000년 초부터 현재까지의 그래프를 나타내면 증감 추세를 시작적으로 확인할 수 있을것이고 앞으로 미래에는 어느정도 증가할것인지도 대략적으로 확인할 수있을 것 같다.
GitHub Repository
https://github.com/Danielkim5216/Seoul_tempAVG_2022-2024_CSV
'뻘짓' 카테고리의 다른 글
django study day1 (0) | 2024.09.08 |
---|---|
홈 네트워크 구성과 RDP , WOL 설정하기 (0) | 2024.08.23 |
애플 실리콘 맥북에 MariaDB 설치하기 (0) | 2024.08.15 |
"DLL load failed: %1은(는) 올바른 Win32 응용 프로그램이 아닙니다" 해결하기 (0) | 2024.08.08 |
[OS] 운영체제 공부 (1) (0) | 2024.07.31 |