미니프로젝트

공항 기상 시각화

728x90

어떤 자료를 이용해서 시각화 할 지 고민했는데, 전 직장에서 해외 공항 자료를 작성했을 때 해당 지역의 기상 자료를 활용했던 것이 생각이 났다.

 

위키백과의 다낭 기후정보

공공데이터 포털에서 공항의 일별 기상자료를 다운받았다.

www.data.go.kr/data/15052608/fileData.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

시각화에 필요한 라이브러리와 matplotlib에 한글을 사용하기 위한 라이브러리 import.

이 또한 jupyter notebook을 사용해서 코딩했다.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import platform

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
    path = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system... sorry~~~~')

 

csv파일 불러오기

alldata = pd.read_csv('airport_weather_data.csv', encoding='cp949', index_col=0)
alldata.head()

일자 컬럼을 datetime으로 변환하고 인덱스로 설정하기

#사실 datetime을 설정안해줘도 된다고 생각했는데, 차트를 그릴 때 x축에 일자가 너무 지저분하게 들어가 있어서

#방법을 찾다보니 datetime을 설정하게 되었다.

alldata['일시'] = pd.to_datetime(alldata['일시'])
alldata.info()
alldata = alldata.set_index('일시')

일시 컬럼의 데이터 타입이 datetime으로 변한걸 볼 수 있다.

NaN 데이터 유무를 확인

alldata.isna().sum()

이 데이터 프레임의 NaN데이터는 없음을 의미하기에 0으로 채워주고, 필요없는 컬럼 제거

alldata = alldata.fillna(0)
alldata = alldata.drop(['최대풍속 나타난시각(hhmi)','최대순간풍속 나타난시각(hhmi)','최고기온시각(hhmi)','최저기온시각(hhmi)','1시간최다강수 시각(hhmi)','평균운량(1/8)'], axis=1)
alldata.head()

 

이제 공항별로 나눠준다.

처음에 데이터를 다운로드 받을 때 김포, 인천, 제주공항의 자료를 받았지만, 똑같은 시각화 자료를 만드는것 보다 김포공항의 자료만 시각화 하는게 더 가독성이 좋을 것이라고 판단했다.

 

GMP = alldata.loc[alldata['지점명']=='김포공항',]
ICN = alldata.loc[alldata['지점명']=='인천공항',]
CJU = alldata.loc[alldata['지점명']=='제주공항',]

GMP.head()
ICN.head()
CJU.head()

 

 

김포공항 일자 별 평균 풍속

plt.figure(figsize=(25,15))
plt.plot(GMP['평균풍속(KT)'])
plt.title('김포 공항 일별 평균풍속')
plt.xlabel('일자')
plt.ylabel('평균 풍속')
plt.show()

김포공항 일별 최대 풍속과 평균풍속

plt.figure(figsize=(25,15))
plt.plot(GMP['평균풍속(KT)'],label = '평균풍속')
plt.plot(GMP['최대풍속(KT)'], label = '최대풍속')
plt.title('김포 공항 일별 평균 및 최대 풍속')
plt.xlabel('일자')
plt.ylabel('풍속')
plt.legend()
plt.show()

 

9월에 gust가 최대 30노트까지 불었다.

다음은 최대 풍속의 풍향과 최대 순간 풍속의 풍향을 나타내보았다.

plt.figure(figsize=(25,15))

plt.subplot(1,2,1)
plt.hist(data = GMP, x= '최대풍속 풍향(deg)',rwidth = 0.5,label = '최대 풍속 풍향', bins =40)
plt.title('김포 공항 일별 최대풍속 풍향 ')
plt.xlabel('풍향')
plt.ylabel('빈도수')
plt.legend()
plt.subplot(1,2,2)
plt.hist(data =GMP, x ='최대순간풍속 풍향(deg)', rwidth = 0.5,label = '최대 순간 풍속 풍향', bins=40, color='r')
plt.title('김포 공항 일별최대 순간 풍속 풍향(gust)')
plt.xlabel('풍향')
plt.ylabel('빈도수')
plt.legend()
plt.show()

RWY15보다 RWY33나 34를 더 주로 사용할 것을 볼 수 있다.

 

김포공항의 일자 별 최저온도와 최고온도

plt.figure(figsize=(25,15))
plt.plot(GMP['최저기온(°C)'],label = '최저기온')
plt.plot(GMP['최고기온(°C)'], label = '최고기온',color = 'r')
plt.title('김포 공항 일별 기온')
plt.xlabel('일자')
plt.ylabel('기온')
plt.legend()
plt.show()

 

 

 

처음에는 깊게 생각하지 못하여 놓치는 부분이 있지 않을까?라고 생각이 되어 seaborn의 pairplot을 사용해서 상관관계를 확인했다.

기압과 습도의 상관관계가 반비례 관계로 보여 scatter로 시각화 해보았다.

plt.figure(figsize=(25,15))
plt.scatter(data=GMP,x='평균상대습도(%)',y='평균해면기압(hPa)')
plt.title('기압과 습도의 상관관계')
plt.xlabel('평균상대습도')
plt.ylabel('평균해면기압')
plt.show()

 

 

 

마지막으로 피벗을 사용하여 공항 별 평균 자료치를 확인해봤는데 이건 다음에 어찌 쓸지 생각해 봐야겠다.

pivoted_alldata = pd.pivot_table(alldata, index = ['지점명'])
pivoted_alldata

 

728x90