Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
이원하
파이썬을 이용한 빅데이터 수집. 분석과 시각화
Part 2. 데이터 시각화
목 차
03WordCloud – 자연어 처리
1
07Matplotlib – 그래프
2
16Folium – 지도 시각화
3
21Seabean - Heatmap
4
파이썬을이용한빅데이터수집, 분석과시각화
1WORDCLOUD - 자연어처리1
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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'명사만을추출하여워드클라우드를 그려봅니다'))
['명사', '추출', '워드', '워드클라우드', '클라우드']
파이썬을 이용한 빅데이터 수집, 분석과 시각화
KoNLPy 내부 객체
5
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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})
파이썬을이용한빅데이터수집, 분석과시각화
1MATPLOTLIB – 그래프
2
파이썬을 이용한 빅데이터 수집, 분석과 시각화
Matplotlib – 그래프 Package
8
[파이썬 설치경로]>pip install matplotlib
>>> from matplotlib import pyplot
>>> pyplot.plot([1,2,3,4],[10,30,20,40])
>>> pyplot.show()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
Matplotlib – 그래프 Package
11
>>> plt.plot([1,2,3,4], [1,2,3,4], 'ro')
>>> plt.show()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()
파이썬을이용한빅데이터수집, 분석과시각화
1FOLIUM – 지도 시각화
2
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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')
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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')
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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')
파이썬을 이용한 빅데이터 수집, 분석과 시각화
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()