20
이원하 파이썬을 이용한 빅데이터 수집. 분석과 시각화 Part 2. 데이터 시각화

Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

이원하

파이썬을 이용한 빅데이터 수집. 분석과 시각화

Part 2. 데이터 시각화

Page 2: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

목 차

03WordCloud – 자연어 처리

1

07Matplotlib – 그래프

2

16Folium – 지도 시각화

3

21Seabean - Heatmap

4

Page 3: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을이용한빅데이터수집, 분석과시각화

1WORDCLOUD - 자연어처리1

Page 4: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

KoNLPy – 형태소 기반 자연어 처리

4

http://www.oracle.com/technetwork/java/javase/downloads/index.html

http://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype

>>> from konlpy.tag import Kkma

>>> from konlpy.utils import pprint

>>> kkma = Kkma()

>>> pprint(kkma.nouns(u'명사만을추출하여워드클라우드를 그려봅니다'))

['명사', '추출', '워드', '워드클라우드', '클라우드']

Page 5: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

KoNLPy 내부 객체

5

Page 6: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

KoNLPy & pytagcloud

6

jtbcnews_facebook_2017-01-01_2017-06-30.txt>>> from konlpy.tag import Twitter

>>> from collections import Counter

>>> import pytagcloud

>>> import webbrowser

>>> import re

>>> openFileName = "c:/python_sample/jtbcnews_facebook_2017-01-01_2017-06-30.txt"

>>> cloudImagePath = openFileName + ".jpg"

>>> rfile = open(openFileName, 'r', encoding='utf-8').read()

>>> data = re.sub(r'[^\w]', ' ', rfile)

>>> nlp = Twitter()

>>> nouns = nlp.nouns(data)

>>> count = Counter(nouns)

>>> wordInfo = dict()

>>> for tags, counts in count.most_common(50):

if (len(str(tags)) > 1):

wordInfo[tags] = counts

print ("%s : %d" % (tags, counts))

>>> taglist = pytagcloud.make_tags(dict(wordInfo).items(), maxsize=80)

>>> pytagcloud.create_tag_image(taglist, cloudImagePath, size=(640, 480), fontname='korean', rectangular=False)

>>> webbrowser.open(cloudImagePath)

>>> from collections import Counter

>>> color = ['red', 'blue', 'red', 'red']

>>> counter_color = Counter(color)

>>> print(counter_color_A)

Counter({'red': 3, 'blue': 1})

Page 7: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을이용한빅데이터수집, 분석과시각화

1MATPLOTLIB – 그래프

2

Page 8: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

8

[파이썬 설치경로]>pip install matplotlib

>>> from matplotlib import pyplot

>>> pyplot.plot([1,2,3,4],[10,30,20,40])

>>> pyplot.show()

Page 9: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

9

File "C:\python\lib\site-packages\matplotlib\font_manager.py", line 1412, in <module>

fontManager = pickle_load(_fmcache)

def win32InstalledFonts(directory=None, fontext='ttf'):

…중략 …

key, direc, any = winreg.EnumValue( local, j)

if not is_string_like(direc):

continue

if not os.path.dirname(direc):

direc = os.path.join(directory, direc)

direc = direc.split(‘\0’, 1)[0] #파이썬 경로문제해결

direc = os.path.abspath(direc).lower()

Page 10: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

10

>>> import matplotlib.pyplot as plt

>>> plt.plot([1,2,3,4])

>>> plt.xlabel('X-axis label’) #x 축라벨타이틀설정

>>> plt.ylabel('Y-axis label') #y 축라벨타이틀설정

>>> plt.show()

>>> plt.plot([1,2,3,4],[1,2,3,4])

>>> plt.show()

Page 11: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

11

>>> plt.plot([1,2,3,4], [1,2,3,4], 'ro')

>>> plt.show()

Page 12: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

12

>>> plt.plot([1,2,3,4],[1,2,3,4],'r-', [1,2,3,4],[3,4,5,6],'v-')

>>> plt.show()

>>> from matplotlib import font_manager, rc

>>> import matplotlib

>>> font_location = "c:/Windows/fonts/malgun.ttf"

>>> font_name = font_manager.FontProperties(fname=font_location).get_name()

>>> matplotlib.rc('font', family=font_name)

>>> plt.plot([1,2,3,4])

>>> plt.xlabel('x축한글표시')

>>> plt.show()

Page 13: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

13

>>> plt.figure()

>>> plt.subplot(1, 2, 1)

>>> plt.plot([1,2,3,4], [1,2,3,4])

>>> plt.subplot(1, 2, 2)

>>> plt.plot([5,6,7,8],[5,6,7,8])

>>> plt.show()

Page 14: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

14

>>> plt.plot([1,2,3,4], [1,2,3,4])

>>> plt.xlabel('x축')

>>> plt.ylabel('y축')

>>> plt.title('matplotlib 활용')

>>> plt.text(3.5, 3.0, '평균:2.5')

>>> plt.grid(True)

>>> plt.show()

Page 15: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Matplotlib – 그래프 Package

15

jtbcnews_facebook_2017-01-01_2017-06-30.txt

>>> from konlpy.tag import Twitter

>>> from collections import Counter

>>> import pytagcloud

>>> import webbrowser

>>> import re

>>> openFileName = "c:/python_sample/jtbcnews_facebook_2017-01-

01_2017-06-30.txt"

>>> cloudImagePath = openFileName + ".jpg"

>>> rfile = open(openFileName, 'r', encoding='utf-8').read()

>>> data = re.sub(r'[^\w]', ' ', rfile)

>>> nlp = Twitter()

>>> nouns = nlp.nouns(data)

>>> count = Counter(nouns)

>>> wordInfo = dict()

>>> for tags, counts in count.most_common(50):

if (len(str(tags)) > 1):

wordInfo[tags] = counts

print ("%s : %d" % (tags, counts))

>>> import matplotlib.pyplot as plt

>>> from matplotlib import font_manager, rc

>>> import matplotlib

>>> font_location = "c:/Windows/fonts/malgun.ttf"

>>> font_name =

font_manager.FontProperties(fname=font_location).get_name()

matplotlib.rc('font', family=font_name)

>>> plt.xlabel('주요단어')

>>> plt.ylabel('빈도수')

>>> plt.grid(True)

>>> Sorted_Dict_Values = sorted(wordInfo.values(), reverse=True)

>>> Sorted_Dict_Keys = sorted(wordInfo, key=wordInfo.get,

reverse=True)

>>> plt.bar(range(len(wordInfo)), Sorted_Dict_Values, align='center')

>>> plt.xticks(range(len(wordInfo)), list(Sorted_Dict_Keys), rotation='70')

>>> plt.show()

Page 16: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을이용한빅데이터수집, 분석과시각화

1FOLIUM – 지도 시각화

2

Page 17: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Folium – 지도 시각화 Package

17

[파이썬 설치경로]>pip install folium

>>> import folium

>>> map_osm = folium.Map(location=[37.566345, 126.977893])

>>> map_osm.save(‘c:/python_sample/map1.html')

Page 18: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Folium – 지도 시각화 Package

18

>>> import folium

>>> map_osm = folium.Map(location=[37.566345, 126.977893], zoom_st

art=17)

>>> map_osm.save(‘c:/python_sample/map2.html')

>>> import folium

>>> map_osm = folium.Map(location=[37.566345, 126.977893], zoom_st

art=17, tiles='Stamen Terrain')

>>> map_osm.save('c:/python_sample/map3.html')

>>> map_osm = folium.Map(location=[37.566345, 126.977893], zoom_st

art=17, tiles='Stamen Toner')

>>> map_osm.save('c:/python_sample/map4.html')

Page 19: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Folium – 지도 시각화 Package

>>> map_osm = folium.Map(location=[37.566345, 126.977893], zoom_start=17)

>>> folium.Marker([37.566345, 126.977893], popup='서울특별시청').add_to(map_osm)

>>> folium.Marker([37.5658859, 126.9754788], popup='덕수궁').add_to(map_osm)

>>> map_osm.save(c:/python_sample/map5.html')

Page 20: Part 2. 데이터시각화 · 파이썬을이용한빅데이터수집, 분석과시각화 KoNLPy & pytagcloud 6 jtbcnews_facebook_2017-01-01_2017-06-30.txt >>> from konlpy.tag import

파이썬을 이용한 빅데이터 수집, 분석과 시각화

Folium – 지도 시각화 Package

import urllib.request

import json

import folium

import webbrowser

def get_request_url(url):

client_id = "PIKKM1p_iFKvlrgZdyk3"

client_secret = "scxKeSJYib"

req = urllib.request.Request(url)

req.add_header("X-Naver-Client-Id", client_id)

req.add_header("X-Naver-Client-Secret", client_secret)

try:

response = urllib.request.urlopen(req)

if response.getcode() == 200:

return response.read().decode('utf-8')

except Exception as e:

print(e)

return None

def getGeoData(address):

base = "https://openapi.naver.com/v1/map/geocode"

parameters = "?query=%s" % urllib.parse.quote(address)

url = base + parameters

retData = get_request_url(url)

if (retData == None):

return None

else:

return json.loads(retData)

def main():

address = input("주소를입력하세요 : ")

jsonResult = getGeoData(address)

if (jsonResult == None):

print ("주소검색결과가없습니다")

elif 'result' in jsonResult.keys():

lattitude = jsonResult['result']['items'][0]['point']['y']

longitude = jsonResult['result']['items'][0]['point']['x']

map_osm = folium.Map(location=[lattitude, longitude], zoom_start=17)

folium.Marker(location=[lattitude, longitude], popup=address).add_to(map_osm)

map_osm.save('c:/python_sample/address.html')

webbrowser.open('c:/python_sample/address.html')

else:

print ("주소검색결과가없습니다")

if __name__ == '__main__':

main()