본문 바로가기

IT/Python

[파이썬] 코로나로 미세먼지 지표는 좋아졌을까?

미세먼지 지표를 다운 받기 위해서 이리저리 찾아보니, 한국의 선진 데이터 시스템으로 구할 수가 있었다.

(정보) 도시숲에서 시간대별 TSP, PM10, PM2.5 PM1, 기상자료(풍향, 풍속, 기온, 습도)를 측정하여 정보를 제공하고, 에어로졸의 구성원(질산염, 황산염, 암모늄 등) 중 산업발생 휘발성유기화합물 AVOCs, Anthropogenic Volatile Organic Compounds)자연발생 휘발성유기화합물(BVOCs, Biogenic Volatile Organic Compounds)의 시간별, 계절별 비율 정보를 제공함.

http://know.nifos.go.kr/know/service/finddust/findDustHist.do

 

2020년 데이터를 다운로드 받고, 연습 해 보실분은 아래 참고로 첨부 해 두었습니다.

dust_(20200718).csv
1.86MB

 

기본적인 Library불러오고

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

plt.rc("font", family="Malgun Gothic")
plt.rc("axes", unicode_minus=False) 

%ls data

 

CSV파일 불러오기.

df= pd.read_csv("data/dust_(20200718).csv", encoding="utf-8")
df.shape

>> (25046, 13) 

 

데이터가 어떻게 생겼는지 확인

#List of anthropogenic (AVOC) and biogenic (BVOC)
#PM(Particulate Matter·입자상 물질) 뒤에 숫자를 붙여 표현하는 경우가 많다. 예를 들어 ‘PM10’은 10㎛ 이하 미세먼지를 뜻하고 ‘PM2.5’는 2.5㎛ 이하 초미세 먼지를 말한다. ‘PM2.5 수치’는 ‘초미세먼지 수치’를 말하는 셈이다.
df.head()

 

df.info()

 

 

#Column 별 데이터 특징을 파악할 수 있다.
df.dtypes

 

데이터 결측치들의 Column별 합

#데이터 결측치들의 합
df.isnull().sum()

 

결측치를 시각화

#결측치를 시각화
df.isnull().sum().plot.barh(figsize=(10, 5))

 

결측치 Data값이 557개가 Max임으로 그냥 과감하게 제거

#결측치값 제거
df_null= df.dropna()

 

기본적 통계값 도출

df_null.describe()

 

결측치 재 확인, 결측치가 모두 제거 되었음을 확인 

df_null.isnull().sum()

 

상관관계 체크

df_corr= df.corr()
df_corr

 

Heatmap 그려보자

plt.figure(figsize=(6,6))
sns.heatmap(df_corr, annot=True, fmt=" .2f",cmap="Greens" )

 

> Avoc 값이 높을때 미세먼지 와 초미세먼지값이 강한 상관관계가 있고 Bvoc값도 강한 상관관계가 있다.

 

그래서 상관관계표한번 그려봄

sns.lmplot(data=df_null, x="Avoc-PM10(㎍/m³)", y="BvocPM10(㎍/m³)")

<seaborn.axisgrid.FacetGrid at 0x264c1d8cf08>

 

Lineplot 으로 산업발생 휘발성유기화합물 미세먼지 (Avoc-PM10(㎍/m³)) 그래프를 그려봄

df_null.plot.line(x='관측시간', y='Avoc-PM10(㎍/m³)',figsize=(25,10))

<matplotlib.axes._subplots.AxesSubplot at 0x26440f09888>

>> 내 예상과 달리 크게 Covid-19 전후를 나눌만한 날짜가 없어서 그런지 큰 차이를 보이진 않음

 

Lineplot 으로 자연발생 휘발성유기화합물(BVOCs, Biogenic Volatile Organic Compounds) 그래프를 그려봄

df_null.plot.line(x='관측시간', y='BvocPM10(㎍/m³)',figsize=(25,10))

<matplotlib.axes._subplots.AxesSubplot at 0x2644101d788>

 

전체 데이터에서 4월까지를 (전반기) 7월까지를 (후반기)로 나누어 데이터 확인

df_null['Avoc-PM10(㎍/m³)'].count()

24390

a= int(df_null['Avoc-PM10(㎍/m³)'].count()/2)
a

12195

 

전반기 평균 값은 41, 중앙값은 39.50

corona= df_null.loc[:a]
corona['Avoc-PM10(㎍/m³)'].describe()

후반기 평균값은 30.70 중앙값은 39.20 이다

no_corona=df_null.loc[a:]
no_corona['Avoc-PM10(㎍/m³)'].describe()

 

결론적으로 작년데이터랑 비교 해 보아야 할 것 같은데 다시 작년 2019년 데이터를 다운로드 할려고 하니 다운로드가 되질 않아서 작년과 검증을 하지 못해서 아쉬웠다.

나의 가설이었던 1~4월 /5~7월 미세먼지는 Covid-19가 성행하던 시기에따라 전반기가 낮게 나올것으로 예상했으나 그렇지 않았다. 

파나와는 달리 한국은 완전격리를 실시하지 않아서인지 Covid-19로 인한 미세먼지의 큰 영향을 받지 않아보인다.

 

쥬피터 노트북 Code도 공유합니다.

Dust.ipynb
0.39MB

'IT > Python' 카테고리의 다른 글

[파이썬] Dictionary (딕셔너리)  (0) 2020.06.29
[파이썬] List 관련3 (split, join)  (0) 2020.06.29
[파이썬] List 관련2 (extend, reverse, sort)  (0) 2020.06.29
[파이썬] range 구문  (0) 2020.06.29
[파이썬] List 관련 (Python)  (0) 2020.06.29