5. 히트맵(Heatmap) – seaborn, numpy




‘seaborn’은 ‘matplotlib’와 함께 효과적인 시각화 라이브러리를 제공해준다. ‘seaborn’을 사용하기위해서는 ‘numpy’와 ‘scipy’가 설치되어야 하는데, 윈도우에서는 pip install을 사용하는 경우 설치오류가 발생하는 경우가 많다.

먼저 numpy-mkl 버전을 인스톨 한다. numpy mkl 버전은 ‘numpy’와 인텔의 수학 커널 라이브러리를 지원하는 dll 파일들이 함께 포함되어 있는 패키지이다. 인터넷을 검색하여 numpy mkl 버전을 다운로드 받는다(http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy).

‘.whl’ 파일의 경우에는 사용하고 있는 파이썬 버전(cpXX로 표시)과 윈도우 32/64 비트를 개발 환경에 맞게 다운로드 받는다. 동일한 형식으로 ‘scipy’ 및 ‘seborn’ 파일을 받고 인스톨 한다(필자의 경우에는 파이썬 3.5 = CP25-의 64비트 버전을 다운로드받아 D:\Temp 폴더에 저장하였고, Python 설치 경로는 D:\Program Files\Python 이다). 패키지 인스톨에 대하여 잘 모르는 경우에는 파이썬 기초 » 7. 패키지(Package) 설치 부분 참조 ^^

D:\Program Files\Python\pip install d:\temp\numpy-1.12.1+mkl-cp35-cp35m-win_amd64.whl
Processing d:\program files\python\scripts\numpy-1.12.1+mkl-cp35-cp35m-win_amd64.whl
Installing collected packages: numpy
Successfully installed numpy-1.12.1+mkl

D:\Program Files\Python>pip install d:\temp\scipy-0.19.0-cp35-cp35m-win_amd64.whl
Processing d:\temp\scipy-0.19.0-cp35-cp35m-win_amd64.whl
Requirement already satisfied: numpy>=1.8.2 in d:\program files\python\lib\site-
packages (from scipy==0.19.0)
Installing collected packages: scipy
Successfully installed scipy-0.19.0

D:\Program Files\Python>pip install d:\temp\seaborn-0.7.1-py2.py3-none-any.whl
Processing d:\temp\seaborn-0.7.1-py2.py3-none-any.whl
Installing collected packages: seaborn
Successfully installed seaborn-0.7.1

D:\Program Files\Python>


설치가 완료되면 파이썬 쉘을 수행한 후 중국 입국자수(JSON 파일 : 중국(112)_해외방문객정보_2011_2016.json)를 가지고 히트맵을 작성하여 보자. 먼저 저장된 중국 입국자수 json 파일을 불러들여 데이터 프레임으로 저장한다.

>>> import pandas as pd
>>> import json
>>> fv_CFileName = 'd:/Temp/public_data/중국(112)_해외방문객정보_2011_2016.json'
>>> jsonFV = json.loads(open(fv_CFileName, 'r', encoding='utf-8').read())
>>> china_table = pd.DataFrame(jsonFV, columns=('yyyymm', 'visit_cnt'))
>>> china_table.head()
   yyyymm  visit_cnt
0  201101      91252
1  201102     140571
2  201103     141457
3  201104     147680
4  201105     154066


데이터프레임에 저장되어 있는 데이터는 연도와 월이 문자열로 결합된 ‘yyyymm’필드와 방문객수인 ‘visit_cnt’ 열로 구성되어 있다. 해당연도와 월을 가로와 세로로 가지는 표의 형태로 구성하기 위하여 ‘yyyymm’ 필드를 먼저 ‘datetime’형식으로 변환한 후 ‘year’ 컬럼과 ‘month’ 컬럼을 생성한다.

>>> china_table.yyyymm = pd.to_datetime(china_table.yyyymm, format='%Y%m')
>>> china_table['year'] = china_table.yyyymm.dt.year
>>> china_table['month'] = china_table.yyyymm.dt.month
>>> china_table.head()
      yyyymm  visit_cnt  year  month
0 2011-01-01      91252  2011      1
1 2011-02-01     140571  2011      2
2 2011-03-01     141457  2011      3
3 2011-04-01     147680  2011      4
4 2011-05-01     154066  2011      5


‘year’ 컬럼과 ‘month’ 컬럼이 생성된 것이 확인되면 이제 표 형식으로 데이터 프레임을 변경한 후 ‘saborn’을 import 한 후 ‘heatmap’ 객체를 생성하고 ‘show()’를 이용하여 그래프를 출력한다.

>>> china_table = china_table.set_index(['month','year'])['visit_cnt'].unstack(fill_value=0)
>>> print (china_table)
year     2011    2012    2013    2014    2015    2016
month                                                
1       91252  113927  167022  196371  296708  394345
2      140571  157019  173790  249698  326295  516787
3      141457  163261  183691  276479  423768  515130
4      147680  153875  222114  335069  531947  641610
5      154066  152347  210439  278723  517031  618083
6      150119  179508  234482  399031  573852  315095
7      195188  244573  322917  569787  692053  255632
8      241987  276299  359065  642258  757683  513275
9      176196  231462  283402  483518  564078  591242
10     181428  214681  279440  343273  562278  650174
11     136152  174164  204533  276428  460671  507579
12     119061  159080  195997  276234  420501  465218
>>> import matplotlib.pyplot as plt
>>> import seaborn as sns
>>> sns.heatmap(china_table)
>>> plt.show()


[그림 1]은 생성된 Heatmap을 나타낸다.

[그림 1] 국내 중국인 입국수 시각화(Heatmap)