본문 바로가기
IT_프로그래밍

[파이썬] 기상 자료 분석 진짜 쉽게 하자 matplotlib - 1

by 째까 2022. 8. 29.
반응형

안녕하세요. 째까입니다!

오늘은 오랜만에 파이썬을 이용해서 기상 자료 그림 그리기를 해보려고 해요.

크기가 작던 크던 항상 자료 분석을 하기 위해서는 몇 가지 생각을 해야하는데요. 저는 아래처럼 생각해요.

 

1.     왜 분석하는가 ? ( = 목적)

2.     예상 결과가 있는가? ( = 가설)

3.     뭘 그릴 것인가? ( = 자료 선정)

생각하는 것은 더 있지만 여러 자료 분석할 때 공통적으로 생각하는 문항이에요. 물론 머리 좋으신 분들은 바로 바로 생각하시고 결정하시겠지만 전 그렇지 않으니까..!

 

위 질문에 대한 째까 답의 키워드는 바로 처서 매직입니다! 그래서 이번 분석의 대답은

1.     프로그래밍 능력 향상 및 정보 제공을 위해 분석!

2.     처서 매직은 존재한다!( *처서 매직 : 절기 중 처서를 지나면 더위가 꺾인다)

3.     처서 매직을 알아보기 위해 일 평균 기온/최대_최소 기온을 알아보자!

로 정리할 수 있겠네요.

 

 일단 기상 자료를 받아볼까요? 저는 제가 사는 지역의 기상 자료를 얻으려해요.

제 지역은 서귀포! 국내 기상 자료를 가장 쉽게 받을 수 있는 사이트는 기상 자료 개방 포털입니다!

 

https://data.kma.go.kr/cmmn/main.do

 

기상자료개방포털

날씨! 데이터가 되다 OPEN API

data.kma.go.kr

위에 접속하시면 아래와 같이 보이실텐데요. 지상 자료가 필요하니까 기상관측 -> 지상 -> 종관기상관측(ASOS)를 선택해줍니다.

기상 자료 개방 포털에서 자료 받기

그 다음 시간 자료를 선택해주시고요. 저는 처서매직을 봐야하니까 처서 일자 기준(2022년 8월 23일, 화요일)을 포함한 일자를 선택해줍니다! 원하는 변수는 기온이 가장 필요한데요. 나머지 필요한 자료들은 원하시는데로 받으시면 됩니다. 저는 강수량, 풍속 자료도 줍줍했습니다. 이후에 조회를 눌러서 확인하신 뒤 csv 버튼을 눌러서 다운받습니다! 받으신 csv는 파일은 오른쪽과 같이 보이실꺼에요.  근데 서귀포 강수량이 비어있네요. 비가 안왔었군요.

 

서귀포 처서매직 진짠가

자 그럼 이제 파이썬을 이용해서 기상 csv 자료를 읽고! 그림 그려볼까요?

편하게 사용하시는 툴 사용하시면 됩니다! 저는 가장 편한 구글 코랩을 쓰겠습니다. 코랩짱 구글짱 

https://colab.research.google.com/?hl=ko

 

 

Google Colaboratory

 

colab.research.google.com

 

코랩에서 가장 먼저 할 것은 기상 자료 개방 포털에서 받은 자료를 코랩에 올려줘야해요. 좌측 사진을 순서대로 따라하시면 코랩에 올려집니다! 단 주의하실 것은 코랩 연결 끊어지면 올린 파일도 날라간다는 점! 그래서 연결할 때 마다 업로드해줘야합니다.

이후 파이썬에서 자료 읽어야하니까 경로를 잡아줘야하는데요. 경로는 오른쪽 사진을 따라하시면 쉽습니다.

좌 : 코랩에 파일 올리기/ 우 : 파일 경로 쓰기 귀찮을 때 경로 복사 버튼이 짱임 


 

받은 파일을 읽어볼까요? 아래 스크립트처럼 가장 간단히 파일을 읽을 수 있어요! pandas가 진짜 제일 편합니다. 여기서 중요한건 encoding = "cp949"가 필요하다는 거에요. 

import pandas as pd


f_name = "/content/OBS_ASOS_TIM_20220828153830.csv" ## 1. 파일 경로

header_name = ["loc_num", "loc_name", "date", "temp", "rainfall", "wind_speed"] ## 2. header 이름 바꿀 것 지정하기
print("* JEJU DATA *")
f_read = pd.read_csv(f_name, delimiter = ",", encoding = "cp949") ## 3.pandas로 파일 sheet화

print(f_read)


#* JEJU DATA *
#      지점  지점명                일시  기온(°C)  강수량(mm)  풍속(m/s)
#0    189  서귀포  2022-08-20 00:00    27.9      NaN      1.3
#1    189  서귀포  2022-08-20 01:00    27.8      NaN      1.8

잘 읽었군요!

 

이제 처서 매직을 확인해볼까요? 먼저 기온 그림을 그려봅시다. 기온은 매 분, 매 시간 "연속적인" 데이터잖아요? 그러면 바로 선(line) 그래프를 이용하면 됩니다. 

 

 

 

 

 

 

 

 

import pandas as pd

f_name = "/content/OBS_ASOS_TIM_20220828153830.csv" ## 1. 파일 경로

header_name = ["loc_num", "loc_name", "date", "temp", "rainfall", "wind_speed"] ## 2. header 이름 바꿀 것 지정하기
print("* JEJU DATA *")
f_read = pd.read_csv(f_name, delimiter = ",", encoding = "cp949") ## 3.pandas로 파일 sheet화


f_read.columns = header_name ## 4. 컬럼 이름 바꿔주기

jeju_time = pd.to_datetime(f_read["date"]) # 5. 원하는 변수 추출하기
jeju_temp = f_read["temp"]
jeju_wind = f_read["wind_speed"]



import matplotlib.pyplot as plt ## 6. 그림그리는 도구 import
fig, ax1 = plt.subplots(figsize=(9, 9)) ## 7. 도화지 크기 조절
ax1.plot(jeju_time, jeju_temp, color = "red") ## 8. x = 시간, y = 기온
plt.ylim(0, 35)
plt.ylabel("Temp.", color = "red")


ax2 = ax1.twinx()
ax2.plot(jeju_time, jeju_wind, color = "blue") ## 9. x = 시간, y = 풍속
plt.ylim(0, 5)
plt.ylabel("Wind speed", color = "blue")
plt.show()

 

결과는 아래와 같이 간단하게 표출할 수 있어요. 확실히 23일 이후로 서귀포 최저 기온이 뚝뚝 떨어지는군요! 그런데 풍속은 큰 변동성이 없군요.

x축 실화냐..

 

이를 통해 처서 매직은 진짜로 나타난다는 것을 확인했습니다~

 

2022년 08월 29일

째까일지

 

끝.

반응형

댓글