본문 바로가기

빅데이터

상관계수와 미세먼지 데이터

상관계수(Correlation coefficient)란 X와 Y사이의 선형성의 정도를 나타내는 측도이다. 다시 말해 X와 Y의 상관관계를 나타내는 수치이다. 상관계수는 -1부터 1사이의 숫자로 표시되는데 절댓값으로 1에 가까울수록 상관관계가 강한 것이다. 상관계수가 0이면 두 변수간의 상관관계가 없다는 뜻이고 0에 가까울수록 관련성이 적다. 상관계수가 양(+)의 값을 가질 경우 X가 증가할 때 Y 또한 증가한다는 경향이 있음을 의미한다. 음(-)의 값을 가질 때는 X가 증가할 때 Y는 감소하는 경향이 있음을 의미한다.

 

상관계수가 1인 경우는 거의 없다.

 

                                                                                                           상관계수 공식                                                                                                          출처 : 네이버 지식백과

 

상관계수를 구하는 공식은 간단하지만 직접 계산해보면 매우 매우 귀찮다. 하지만 이 역시 파이썬을 이용하면 눈 감고도 구할 수 있다. 2015년도의 미세먼지와 관련된 데이터를 이용하여 여러 요인 간의 상관관계를 분석해보도록 하겠다.

 

 

우선 이번에도 역시 사용할 라이브러리들을 먼저 불러온다.

 

 

해당 데이터를 불러왔는데 유니코드 에러가 뜬다. 확실하지는 않지만 데이터에 한글이 포함되어 있어 그대로 불러올 수 없는듯하다. 이럴 경우 인코딩을 해주면 문제가 해결된다.

 

 

파일명 뒤에 encoding = 'cp949'만 추가해 주면 문제없이 데이터가 불러진다. 도시, 날짜, 이산화황, 일산화탄소, 오존, 이산화질소, 기온, 강수, 습도 등등의 정보를 보여준다. 이 중 서울의 여름 데이터만 뽑아내서 상관관계를 분석해보겠다.

 

우선 서울만 분류를 하고자 하는데 두 가지(내가 아는 거만) 방법이 있다.

 

 

 

결과는 같으니 아무거나 사용해도 된다. 이 데이터는 1월부터 12월까지의 데이터를 포함하고 있다. 여름 미세먼지의 상관관계를 분석하기 위해 여름인 6, 7, 8월의 데이터를 뽑아보겠다.

 

 

계절을 구분하기 위해 date_dict라는 변수에 각 월별로 맞는 계절을 입력하여 딕셔너리 형태로 저장해 준다. 그리고 4번 라인의 코드는 실제 데이터에 입력되어 있는 월(month)을 딕셔너리에 mapping 되어있는 계절로 바꾸고 Season 컬럼에 저장하는 코드이다. 아래의 경고 문구는 다른 방법을 사용하라는 권장 문구이다.(무시해 준다)

 


딕셔너리는 중괄호{}로 선언하고 '키':'값' 형태를 쉼표로 연결해서 만든다.

딕셔너리의 요소에 접근할 때는 딕셔너리 뒤에 대괄호[]를 입력하고 내부에 인덱스처럼 키를 입력한다.


 

그다음 여름의 데이터만 다시 data_seoul에 저장하기 위해 앞서 서울 데이터만 뽑아낸 방법으로 여름 데이터인 6월~8월의 데이터를 뽑아준다. 그 후 다시 data_seoul을 실행시키면 6월부터 8월까지의 데이터만 볼 수 있다.

 

 

이 데이터의 상관관계를 파악하기 위해 data_seoul.corr()만 입력해 주면 모든 요소들 간의 상관계수를 계산해서 보여준다. 하지만 이렇게 보면 뭐가 뭔지도 헷갈리고 직관적이지 않기 때문에 히트맵을 그리는 시각화 작업을 진행해 준다.

 

 

 

히트맵은 seaborn 라이브러리를 이용하면 쉽게 그릴 수 있다.

 

(1) 우선 seaborn 라이브러리를 불러온다.

(2) 그다음 폰트 크기를 조절해 줄 건데 굳이 안 해줘도 되는 작업이다. sns.set(font_scale= 크기) - 크기 부분에 숫자를 입력해 주면 히트맵 내 글씨 크기가 바뀐다.

(3) 히트맵이 그려질 subplots을 설정한다. figsize = (가로 길이, 세로 길이)

(4) sns.heatmap(히트맵 그릴 데이터, annot -> 그림 위에 상관계수 표시 여부, fmt -> 소수점 몇 번째 자리까지 표현할지, linewidths -> 히트맵 상관계수 간의 거리, cmap -> 색깔 설정 'RdBu'는 수치가 낮으면 빨간 계열 높을수록 파란 계열로 바뀌고 'RdBu_r'을 해주면 반대로 된다.

 

모든 코드를 입력하고 실행을 하면 아래와 같은 히트맵을 얻을 수 있다.

 

 

 

여름엔 눈이 안 내려 Nan 값이라 비어있다.

 

결과를 보면 서울, 여름의 미세먼지는 CO(일산화탄소)와 강한 양의 상관관계가 있고 NO2(이산화질소), SO2(이산화황)과도 꽤 큰 양의 상관관계를 볼 수 있다. O3(오존), 풍속과도 어느 정도 양의 상관관계를 갖고 나머지 요인과는 관계가 없어 보인다.

 

 


참고자료

 

[혼자 공부하는 파이썬] 저자 윤인성

[확률의 입문] 저자 Sheldon Ross