지난 이야기
https://rkckskdk.tistory.com/297
이건 또 어떻게 하는데..
한글 분석을 시도한 다른 블로거의 글을 봤다.
다 추후에 수정이라고 하고 사라졌다.
그렇지만 좋은 링크들을 담고 있다.
https://pioneer-2021.tistory.com/30
관련 논문
https://www.oss.kr/oss_guide/show/abc5db40-c9e1-4f52-8d3a-262c178318a0
짧게나마 코드를 적어주신 블로거님 발견
https://business-analytics.tistory.com/3
무슨 소리인지는 모르겠지만 일단 코드 그대로 써보자.
그와 관련한 문서
https://konlpy.org/ko/latest/examples/wordcloud/
어김없이 등장한 GPT 햄
계속 오류를 잡아보려 노력했으나, GPT 형님도 다른거 써보라고 한다. 포기도 빠른 형님
검색하다보니 khaiii라는 API가 있다.
카카오에서 제작한 3번째 형태소 분석기라고 한다.
GPT 형님께 부탁드려서 새 코드를 받아냈다.
설치하는 과정이 까다롭다.
다행히 나와 같은 환경에서 설치한 사람이 블로그를 썼다. 감사합니다.
https://velog.io/@yoonsy/MacOS에-khaiii-형태소-분석기-설치하기
API 설치하는 데 3시간 걸렸다...
드디어 완성!!!!!!!
사용한 코드 (하지만 이걸 따라하려는 분이 있다면, 모듈 설치가 힘들 것이라는 것만 말씀드리겠습니다..)
from khaiii import KhaiiiApi
from collections import Counter
from wordcloud import WordCloud
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 불러오기
df = pd.read_excel('input.xlsx', sheet_name='data', usecols='B')
# 'Column_Name'에는 실제 열의 이름을 넣어주세요
sentences = df['content'].tolist()
api = KhaiiiApi()
noun_list = []
# 각 문장을 형태소로 분석하여 명사 추출
for sentence in sentences:
morphs = api.analyze(sentence)
for words in morphs:
for morph in words.morphs:
if morph.tag.startswith('NNG'): # 명사만 추출
noun_list.append(morph.lex)
# 단어 빈도수 카운트
count = Counter(noun_list)
words = dict(count.most_common())
# 워드클라우드 생성 (폰트 설정)
wordcloud = WordCloud(
font_path='/Library/Fonts/NanumBarunGothic.ttf', # Arial Unicode MS 폰트 경로
background_color='white',
colormap='Accent_r',
width=800,
height=800
)
wordcloud.generate_from_frequencies(words)
plt.figure(figsize=(10, 10))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis('off')
plt.show()
그리고 1초만에 만든 그래프로 변환하는 코드.
아래는 코드 내용
from khaiii import KhaiiiApi
from collections import Counter
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 경로 설정 (본인 컴퓨터에 설치된 한글 폰트 경로로 지정해주세요)
font_path = '/Library/Fonts/NanumBarunGothic.ttf'
# 폰트 설정
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
# 데이터 불러오기
df = pd.read_excel('input.xlsx', sheet_name='data', usecols='B')
sentences = df['content'].tolist()
api = KhaiiiApi()
noun_list = []
# 각 문장을 형태소로 분석하여 명사 추출
for sentence in sentences:
morphs = api.analyze(sentence)
for words in morphs:
for morph in words.morphs:
if morph.tag.startswith('NNG'): # 명사만 추출
noun_list.append(morph.lex)
# 단어 빈도수 카운트
count = Counter(noun_list)
words = dict(count.most_common())
# 단어 빈도수를 데이터프레임으로 변환
df_words = pd.DataFrame(list(words.items()), columns=['Word', 'Frequency'])
# 상위 20개 단어 선택
top_words = df_words.head(20)
# 막대 그래프로 시각화
plt.figure(figsize=(10, 6))
plt.bar(top_words['Word'], top_words['Frequency'], color='skyblue')
plt.xlabel('Words')
plt.ylabel('Frequency')
plt.title('Top 20 Words Frequency')
plt.xticks(rotation=45)
# 막대 그래프에 값을 작게 표시
for i, v in enumerate(top_words['Frequency']):
plt.text(i, v - 10, str(v), fontsize=8, ha='center', va='bottom')
plt.tight_layout()
plt.show()
만약 자기 네이버 플레이스 후기에 대한 데이터 분석도 궁금하신 분들은 그냥 메일 주세요.
제 환경에서 쉽게 해드릴게요.
xxxch584@naver.com
'기술 > 프로그래밍' 카테고리의 다른 글
네이버 주소 검색 - 위경도 변환 파이썬 자동화 (네이버 지도 API) (1) | 2024.01.05 |
---|---|
파이썬 BeautifulSoup 모듈 (0) | 2024.01.02 |
파이썬 requests 모듈 (0) | 2024.01.02 |
네이버플레이스 후기 데이터 마이닝으로, 마케팅 방향 잡기 - (1) 웹크롤링 (1) | 2023.12.27 |
네이버플레이스 후기 데이터 마이닝으로, 마케팅 방향 잡기 - (0) 개요 (0) | 2023.12.27 |