Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Sum
- 상관관계
- %in%
- max
- 여러 데이터 검색
- 데이터분석가
- 회귀분석
- 총과 카드만들기
- if문 작성법
- 데이터분석
- 빅데이터
- 정보획득량
- 회귀분석 알고리즘
- difftime
- Dense_Rank
- 불순도제거
- 빅데이터분석
- sqld
- 순위출력
- Intersect
- 그래프시각화
- 팀스파르타
- loop 문
- 단순회귀 분석
- 그래프 생성 문법
- 막대그래프
- merge
- sql
- count
- 히스토그램 그리기
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] Python_43. 데이터 시각화 2. (연관어 분석) 본문
※ 연관어 분석 데이터 시각화 실습
1. c:\\data 에 naver_bomot.txt 넣기
2. 형태소 분석기를 이용해서 naver_bomot에서 명사만추출하기from collections import Counter # 단어의 건수 체크하기 위한 모듈 from konlpy.tag import Okt # 한글 현태소 분석 모듈 # 분석할 데이터를 불러오기 with open('C:\\data\\naver_bomot.txt','r',encoding='utf8') as f: text = f.read() # 봄옷과 연관이 높은 단어 추출 related_words = [] okt =Okt() for sentence in text.split('.'): #문장단위로 분리 if '봄옷' in sentence: # '봄옷' 이 포함된 문장인 경우에만 단어 추출 nouns = okt.nouns(sentence) # 문장에서 명사추출 for i in nouns: if len(i) > 1 : # 철자가 1개보다 큰 명사이면 related_words.append(i) print(related_words) # 봄옷이라는 단어를 포함하는 문장에 들어간 단어들
2. related_words 에서 자주 언급된 단어들만 추출하기
# related_words 에서 자주 언급된 단어들만 추출하기 if related_words: top_words = Counter(related_words).most_common(100) #100개 이상 출현된 단어 print(top_words) else: print('봄옷과 연관된 단어가 없습니다.')
3. top_words 리스트를 딕셔너리로 변환하기dct = {'키워드':[],'cnt':[]} for key, value in top_words: #print(key,value) dct['키워드'].append(key) dct['cnt'].append(value) print(dct)
4. 데이터 프레임 생성하기 (따로 코딩 돌리기)
# 4. 데이터 프레임 생성하기 (따로 코딩 돌리기) import pandas as pd df = pd.DataFrame(dct) df.columns = ['title','count'] #df wc = df.set_index('title').to_dict()['count']
5. 워드 클라우드로 시각화 하기
## 워드 클라우드 생성을 위한 패키지 # wordcoloud.py 안에 있는 WordCloud 함수를 임포트 from wordcloud import WordCloud import matplotlib.pyplot as plt # 한글 안깨지게 하는 코드 from matplotlib import font_manager, rc font = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() rc('font', family=font) wordCloud = WordCloud( font_path = "c:/Windows/Fonts/malgun.ttf", # 폰트 지정 width = 1000, # 워드 클라우드의 너비 지정 height = 800, # 워드클라우드의 높이 지정 max_font_size=100, # 가장 빈도수가 높은 단어의 폰트 사이즈 지정 background_color = 'white' # 배경색 지정 ).generate_from_frequencies(wc) # 워드 클라우드 빈도수 지정 plt.imshow(wordCloud) plt.axis('off')
6. '봄옷'과 연관성이 높은 단어들중에서 빈도수 높은 단어만 빨간색, 나머지는 검정색으로 나오게 하기## '봄옷'과 연관성이 높은 단어들중에서 빈도수 높은 단어만 빨간색, 나머지는 검정색으로 나오게 하기 # wordcoloud.py 안에 있는 WordCloud 함수를 임포트 from wordcloud import WordCloud import matplotlib.pyplot as plt # 사용자 정의 색상 함수 def color_func(word, font_size, position, orientation, random_state= None, **kwargs): if word in top_10_words: return 'red' #빈도수 상위 10개 단어를 빨간색으로 else: return 'black' # 나머지 단어 검정색으로 # 한글 안깨지게 하는 코드 from matplotlib import font_manager, rc font = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() rc('font', family=font) wordCloud = WordCloud( font_path = "c:/Windows/Fonts/malgun.ttf", # 폰트 지정 width = 1000, # 워드 클라우드의 너비 지정 height = 800, # 워드클라우드의 높이 지정 max_font_size=100, # 가장 빈도수가 높은 단어의 폰트 사이즈 지정 background_color = 'white' # 배경색 지정 ).generate_from_frequencies(wc) # 워드 클라우드 빈도수 지정 top_10_words = {word for word, count in Counter(wc).most_common(10) } plt.imshow(wordCloud.recolor(color_func=color_func), interpolation = 'bilinear') plt.axis('off') plt.show()
7. 위 코드를 함수로 나타내기 (★ 총코드)def related_wordcloud(location, keyword): from collections import Counter # 단어의 건수를 체크하기 위한 모듈 from konlpy.tag import Okt # 한글 형태소 분석 모듈 # 분석할 데이터를 불러옵니다. with open(location, 'r', encoding='utf8') as f: text = f.read() # '봄옷' 과 연관이 높은 단어 추출 related_words =[] okt = Okt() for sentence in text.split('.'): # 문장단위로 분리 if keyword in sentence: # '봄옷' 이 포함된 문장인 경우에만 단어 추출 nouns = okt.nouns(sentence) # 문장에서 명사 추출 for i in nouns: if len(i) > 1 : # 철자가 1개보다 큰 명사이면 related_words.append(i) #print(related_words) # 봄옷이라는 단어를 포함하는 문장에 들어간 단어들 # related_words 에서 자주 나오는 단어들만 추출합니다. if related_words: top_words = Counter(related_words).most_common(100) # 상위 100개 단어 추출 #print(top_words) else: print(f'{keyword}과 연관된 단어가 없습니다.') # top_words 리스트를 딕셔너리로 변환합니다. dct = {'키워드' :[], 'cnt' :[] } for key, value in top_words: #print(key, value) dct['키워드'].append(key) dct['cnt'].append(value) # 데이터 프레임으로 생성합니다. import pandas as pd df = pd.DataFrame(dct) df.columns =['title','count'] # 워드 클라우드를 그리기 위해서 다시 딕셔너리 형태로 생성합니다. wc = df.set_index('title').to_dict()['count'] # '봄옷' 과 연관성이 높은 단어들중에서 빈도수 높은 단어만 빨간색, 나머지는 검정색 from wordcloud import WordCloud import matplotlib.pyplot as plt # 사용자 정의 색상함수 def color_func(word, font_size, position, orientation, random_state=None, **kwargs): if word in top_10_words: return 'red' # 빈도수 상위 10개 단어를 빨간색으로 else: return 'black' # 2. 한글 안깨지게 하는 코드 from matplotlib import font_manager, rc font = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() rc('font', family=font) wordCloud = WordCloud( font_path = "c:/Windows/Fonts/malgun.ttf", # 폰트 지정 width = 1000, # 워드 클라우드의 너비 지정 height = 800, # 워드클라우드의 높이 지정 max_font_size=100, # 가장 빈도수가 높은 단어의 폰트 사이즈 지정 background_color = 'white' # 배경색 지정 ).generate_from_frequencies(wc) # 워드 클라우드 빈도수 지정 top_10_words = {word for word, count in Counter(wc).most_common(10) } plt.imshow(wordCloud.recolor(color_func=color_func), interpolation='bilinear') plt.axis('off') plt.show()
( 변형문제)
1. naver_blog2 함수를 실행해서 '봄옷' 말고 다른 키워드로 웹 스크롤링 하시오. (키워드: 보홀호텔내돈내산)
chj.naver_blog2('보홀호텔내돈내산', 20) chj.related_wordcloud('C:\\data\\naver_blog.txt','픽업')
'빅데이터 분석(with 아이티윌) > python' 카테고리의 다른 글
[빅데이터분석] Python_45. 데이터 시각화 4. (비교분석) (2) | 2024.08.28 |
---|---|
[빅데이터분석] Python_44. 데이터 시각화 3. (감정 분석_긍정, 부정) (0) | 2024.08.27 |
[빅데이터분석] Python_42. 데이터 시각화 1. (언급량 분석) (0) | 2024.08.27 |
[빅데이터분석] Python_41. 파이썬 웹 스크롤링 (youtube text) (0) | 2024.08.26 |
[빅데이터분석] Python_40. 파이썬 이미지 스크롤링 2 (Bing ) (0) | 2024.08.26 |