최근에 '동감'이라는 영화를 보았는데요, 이번에 워드클라우드를 진행하며 리메이크 작임을 알았습니다.
몽글몽글함도 있지만 약간은 내용이 아쉬운 느낌이 드는 영화였습니다.
주인공의 심리에 완전히 이입하지 못했던 것 같습니다. 하지만 오랜만에 대학생활의 풋풋함을 느꺼보고 싶은 분들에게 추천드립니다.
오늘은 파이썬(Python)을 통해서 CGV 영화 댓글을 수집하여 워드클라우드로 만들어보겠습니다.
워드클라우드란? 사용빈도가 높은 단어를 예쁘게 시각화하여 보여주는 방법입니다.
1. 댓글 수집하기
- 댓글 수집은 크롤링을 통해서 가져왔습니다.
- 이전 발행 글 참조해주시면 될 것 같습니다.
- CGV 댓글 수집의 경우, page 마다 URL에 넘버링 되지 않는 형태라 Selenium 을 통해 수집해야 합니다.
2022.08.01 - [파이썬(Python)] - [한산-용의 출현] 댓글 수집하기
[한산-용의 출현] 댓글 수집하기
요즘 날씨가 너무 덥습니다. 제 블로그를 보시는 분들이라면 '숫자'로 보는 걸 좋아할 거라 생각했습니다. (기상청 자료 굳이굳이 들고왔습니다 ) 더우면 기력을 잃어버리는 개복치인 저는 영화
serendipity77.tistory.com
- 최근 Selenium이 업데이트 되면서 'By'와 같은 형태로 작성해주셔야 합니다. (이전 발행 글 Melon 코드 참고)
1
2
3
4
5
6
|
from selenium.webdriver.common.by import By
movie_chart = wd.find_element(By.CLASS_NAME, 'sect-movie-chart')
|
2022.10.18 - [파이썬(Python)] - [파이썬/크롤링] 멜론차트 Crawling, Selenium으로 동적페이지 크롤링하기
[파이썬/크롤링] 멜론차트 Crawling, Selenium으로 동적페이지 크롤링하기
엑셀 블로그를 할 때 어려운 부분 중 하나는 바로 예시 자료입니다. 예시 자료를 만들려고 생각하는 게 시간이 은근 많이 잡아 먹습니다. 그래서 앞으로 예시자료는 크롤링한 자료를 통해서 보
serendipity77.tistory.com
2. 데이터 불러오기
- 편집기는 Jupyter Lab 으로 사용하였습니다.
- 라이브러리를 불러옵니다.
from wordcloud import WordCloud # 워드클라우드 제작 라이브러리
import pandas as pd # 데이터 프레임 라이브러리
import numpy as np # 행렬 라이브러리
import matplotlib.pyplot as plt # 워드클라우드 시각화 라이브러리
- 데이터를 불러옵니다
df = pd.read_csv('동감댓글수집_2022.11.20.csv')
df
- 데이터 결과확인(11월 20일 기준 불러온 데이터입니다 , 360개 댓글이 있습니다)
3. 정규표현식으로 데이터 편집하기
- '정규표현식'을 통해 불필요한 특수문자 등을 제거해야합니다. 한글을 제외한 모든 문자를 제거해보겠습니다.
df['Review'] = df['Review'].str.replace('[^가-힣]', ' ', regex = True)
df['Review']
- [^가-힣] : 한글이 아닌 모든 문자를 뜻합니다.
- replace에 따라 [^가-힣] : 한글이 아닌 모든 문자를, ' ' : 빈칸으로 만들어줘, regex = True : 정규표현식 사용할게 ! 란 뜻입니다.
- 위에 있는 리뷰 데이터와 비교 시, 특수문자 등이 사라졌음을 볼 수 있습니다.
4. '명사'만 추출하기
- 형태소 분석기 꼬꼬마(Kkma)를 통해서 명사만 추출해보겠습니다.
import konlpy
kkma = konlpy.tag.Kkma() #형태소 분석기 꼬꼬마(Kkma)
nouns = df['Review'].apply(kkma.nouns)
nouns
- 추출결과 확인해보니 나쁘지 않은 것 같습니다.
- 추출결과 비교해보겠습니다
- 추출결과를 보니 1행의 원작, 리메이크 등은 잘 뽑아내었으나 3행의 여진구를 '여진'으로 뽑아내고, 위한을 '위'로 뽑아냈습니다.
- 조금 아쉬운 결과지만 그래도 상당히 괜찮은 결과가 나타났습니다.
5. 단어 데이터프레임 만들기
- explode 함수를 통해 list 데이터를 한 행에 한 단어만 들어가도록 변경해줍니다.
nouns = nouns.explode()
nouns
- 데이터 글자수를 확인하여 2개 이상만 가져오도록 합니다.
df_word = pd.DataFrame({'word' : nouns})
df_word['count'] = df_word['word'].str.len()
df_word = df_word.query('count >= 2')
df_word
- Groupby 함수를 통해 단어별로 얼마나 쓰였는지 확인이 필요합니다.
- 기왕이면 가장 빈도가 많은 단어순으로 '내림차순' 해보겠습니다.
df_word = df_word.groupby('word', as_index = False).count().sort_values('count', ascending = False)
df_word
- 영화 데이터이다보니, '영화'라는 단어가 가장 많이 포진되어 있습니다.
- '영화'데이터에서 '영화', '연기', '배우' 등은 너무나 당연히 많이 포함되는 단어라 큰 Insight를 찾기 어려울 것 같습니다.
- 상위 3개 정도는 지운 데이터를 들고오겠습니다.
- 단순하게 iloc 함수를 사용하여 위에서 네 번째 행부터 가져오도록 합니다.
# 영화처럼 불필요한 단어 제거
df_word = df_word.iloc[3:, :]
df_word.head(5)
- '영화', '배우', '연기' 등의 텍스트는 지워졌습니다.
6. 워드클라우드 만들기
- 드디어 워드클라우드 라이브리러리를 쓸 수 있습니다.
- 전처리 과정이 귀찮았습니다. 또한, 워드클라우드는 Java 등 갖가지 문제점이 발생합니다. 버전 등을 잘 확인해주셔야 합니다.
- 데이터 프레임을 딕셔너리 형태로 변환해주셔야 합니다.
dic_word = df_word.set_index('word').to_dict()['count']
dic_word
- 워드클라우드 함수를 사용합니다.
wc = WordCloud(random_state = 123, font_path = 'AppleGothic', width = 400,
height = 400, background_color = 'white')
img_wordcloud = wc.generate_from_frequencies(dic_word)
plt.figure(figsize = (10, 10)) # 크기 지정하기
plt.axis('off') # 축 없애기
plt.imshow(img_wordcloud) # 결과 보여주기
plt.savefig('동감_워드클라우드') # 파일 저장
- font_path : 'AppleGothic'은 지금 맥북으로 작업 중이라 저렇게 작성하였으며, Windows 사용자의 경우, 'Malgun Gothic'이라고 해주시면 될 것 같습니다.
- plt : 맨 위에서 불렀던 함수 중 matplotlib.pyplot 을 활용하였습니다.
- 워드클라우드 결과가 나타납니다.
7. 알아두면 좋은 추가사항
- 워드클라우드를 통해 모양 및 색 등을 변경할 수 있습니다.
- PIL 이라는 라이브러리를 임포트 해줍니다.
import PIL
icon = PIL.Image.open('cloud.png')
img = PIL.Image.new('RGB', icon.size, (255,255,255))
img.paste(icon, icon)
img = np.array(img)
여기서 cloud.png는 검은 배경화면에 구름모양의 이미지를 두었습니다.
- mask = img 와 colormap 을 변경하여 모양 및 색상을 바꿔보았습니다.
Python을 통한 워드클라우드(wordcloud)로 텍스트 시각화 많이 활용해보시길 바랍니다.
혹시 댓글 데이터 필요하신 분들께서는 아래 파일 다운로드 부탁드립니다.
'파이썬(Python)' 카테고리의 다른 글
[Python/파이썬] 구글이미지 크롤링 (무한스크롤) (0) | 2023.01.02 |
---|---|
[파이썬/Python] 파이썬으로 폴더 내 엑셀파일 한번에 통합하기 (0) | 2022.11.22 |
[파이썬/Python] 날짜지만 소수점인 데이터 날짜로 변경해보기(10월이 1월로 변경되지 않도록 하기) (0) | 2022.11.15 |
[파이썬/Python] 분리된 엑셀 시트 하나의 시트로 통합하기 (0) | 2022.11.06 |
[파이썬/크롤링] 멜론차트 Crawling, Selenium으로 동적페이지 크롤링하기 (0) | 2022.10.18 |
댓글