은공지능 공작소 :: [Python/Jupyter] IMDB 영화데이터로 워드클라우드 그리기 (기본편)

안녕하세요. 은공지능 공작소의 파이찬입니다.
오늘은 IMDb 영화리뷰 데이터로 워드클라우드를 그려보겠습니다.
데이터 전처리 과정은 아래 포스팅을 참조해주시길 바랍니다.
 

[Python/Jupyter] 자연어처리를 위한 IMDB 데이터 전처리 과정 (데이터 다운로드부터 라벨링까지!)

안녕하세요! 은공지능 공작소의 파이찬입니다. 오늘은 파이썬으로 IMDB 영화데이터를 다운받고 전처리해보겠습니다. 전처리 작업은 자연어 처리를 위한 라벨링까지 진행합니다. https://www.imdb.com/ Ratings an..

chan-lab.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

1. 필요한 라이브러리 불러오기

 

 

 

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
%matplotlib inline # matplotlib가 주피터노트북에 표시되도록 설정
필요한 라이브러리는 총 3가지 입니다.
wordcloud, stopwords, matplotlib를 사용하겠습니다.

wordcloud는 워드클라우드 객체를 생성해주는 라이브러리이고,
stopwords는 일종의 불용어 집합 사전입니다.
불용어란 인터넷 검색시 잘 사용하지 않는 단어라고 합니다. 즉, 별 의미없는 단어라는 것입니다.
조사, 관사, 전치사, 접속사 등이 불용어에 해당됩니다. 이를 stopword 라고 부릅니다.

matplotlib는 파이썬언어로 그래프를 그려줄 수 있는 라이브러리 입니다.
워드클라우드 말고도 기본적인 선그래프, 박스플롯 등도
모두 이 matplotlib 라이브러리를 사용해서 그릴 수 있습니다.

 

 

 

 

 

 

 

2. 워드클라우드 데이터 살펴보기

 

 

 

워드 클라우드를 그릴 Train_data 입니다. (지난 포스팅에서 만들어 둔 것입니다.)
긍정리뷰와 부정리뷰를 모두 포함하고 있고, 총 25,000개의 행을 가지고 있습니다.

 

 

 

 

 

 

 

3. join 함수 이해하기

 

 

 

O Captain! my Captain! our fearful trip is done.
The ship has weather'd every rack, the prize we sought is won.

오 선장님! 나의 선장님! 우리의 두려운 여정은 끝났고,
배는 그 어떠한 비바람도 견뎠으며, 우리가 얻고자 한 상품을 쟁취했습니다.

- 월트 휘트먼의 소설 『풀잎』 中 -
join 함수를 설명하기 위해서, 월트 휘트먼의 소설 『풀잎』에서 3 문장을 가져왔습니다.
죽은시인의 사회라는 영화에서도 등장하는 꽤 유명한 문장이죠.

이제 이 3문장을 가지고 판다스 데이터 프레임을 만들어보도록 하겠습니다.

 

 

 

 

 

a = 'O Captain! my Captain!'
b = 'our fearful trip is done.'
c = "The ship has weather'd every rack, the prize we sought is won"

test_data = {}
test_data['sentence'] = []

test_data['sentence'].append(a)
test_data['sentence'].append(b)
test_data['sentence'].append(c)

test_data = pd.DataFrame.from_dict(test_data)
test_data
output:
                                            sentence
0                             O Captain! my Captain!
1                          our fearful trip is done.
2  The ship has weather'd every rack, the prize w...
위와 같이 코드를 짜주면, 3문장이 담긴 데이터프레임이 하나 만들어 집니다.
이제 이것들을 join 함수를 이용해서 하나로 통합해주겠습니다.

 

 

 

 

 

' '.join(test_data['sentence'])
output:
"O Captain! my Captain! our fearful trip is done. The ship has weather'd every rack, 
the prize we sought is won"
공백(' ')에 조인함수를 붙이면, 위와 같은 결과물을 얻을 수 있습니다.
이 공백의 의미는 구분자를 공백으로 해주겠다는 뜻 입니다.
이해를 돕기 위해 아래와 같이 % 문자열에 join을 적용해 보겠습니다.

 

 

 

 

 

'%'.join(test_data['sentence'])
output:
"O Captain! my Captain!%our fearful trip is done.%The ship has weather'd every rack,
the prize we sought is won"
문장 중간중간에 %가 들어간 것이 보이시나요?
이런 식으로 구분자와 join 함수를 통해, 문장들을 하나로 통합할 수 있습니다.

이해를 돕기 위해 %를 사용한 것 이니,
다음 코드부터는 정상적으로 공백 구분자로 진행하겠습니다.

 

 

 

 

 

 

 

4. 워드클라우드 그리기

 

 

 

wordcloud = WordCloud(stopwords = STOPWORDS,
                      background_color = 'black', #배경색
                      width = 800,
                      height = 600).generate(' '.join(train_data['txt']))
                      
plt.figure(figsize = (15, 10)) # (가로인치, 세로인치)
plt.axis("off") # 축눈금 제거
plt.imshow(wordcloud) # 이미지가 표시되도록
plt.show() # 최종 출력문
위와 같이 입력해하여,
워드 클라우드 객체 생성 후 워드 클라우드를 그려줍니다.

stopwords불용어처리를 해주는 옵션이고, 아래에서 더 자세히 다루겠습니다.
background_color배경색을 지정해주는 옵션입니다.
width, height는 각각 워드클라우드의 가로길이, 세로길이를 나타내고 단위는 픽셀입니다.

.generate()를 통해 워드클라우드 객체에 데이터를 넣을 수 있습니다.
괄호 안에는 공백과 join 함수로 만든 통합문이 들어가게 됩니다.
(위에서 자세히 설명 드렸습니다.)

plt라고 되어 있는 부분들은 모두 워드클라우드를 그려주기 위한 부분입니다.
설명은 코드주석으로 대신하겠습니다.

 

 

 

 

 

생성된 워드클라우드의 모습입니다.
아직 다듬어야 할 부분이 많지만, 그래도 아름답죠? ㅎㅎ

 

 

 

 

 

 

 

+ Stopwords 자세히 알아보기

 

 

 

stopwords = set(STOPWORDS)
stopwords
output:
{'a',
 'about',
 'above',
 ...
 'yours',
 'yourself',
 'yourselves'}
stopwords는 앞에서도 말씀드렸다시피, 불용어를 의미합니다.
불용어는 검색어로 잘 쓰이지 않는 단어를 뜻합니다. 즉, 쓸데없어서 삭제해야 하는 단어이지요.

위의 결과에서도 확인하실 수 있듯이, 별로 큰 의미를 갖지 못하는 단어들이 나열되어 있습니다.
여기에는 전치사, 관사, 관계대명사, 지시대명사 등이 포함이 됩니다.

WordCloud 객체에서는 Stopwords 옵션이 있는데,
stopwords = STOPWORDS 라고 해주면 자동으로 불용어를 제거한 후 출력을 해줍니다.

 

 

 

 

 

네 이렇게 해서 오늘은 기본적인 워드클라우드 그리는 법에 대해 알아보았습니다.
다음 시간에는 html 태그제거와 stopwords 업데이트 방법 등에 대해 알아보겠습니다.

위의 워드클라우드를 보면 br이라고 되어 있는 것들이 유독 눈에 많이 들어옵니다.
이는 html의 <br> 태그인데요, 키보드의 엔터키처럼 줄을 바꿔주는 기능을 합니다.
이런 단어들은 제거를 해주는 것이 당연하겠지요?
또한 불용어 사전을 업데이트하는 방법도 다음 포스팅에서 다루어볼 생각입니다.

오늘 포스팅은 여기까지 하겠습니다.
감사합니다.

 

반응형
블로그 이미지

pychan

딥러닝에 관련된 시행착오, 사소하지만 중요한 것들, 가능한 모든 여정을 담았습니다.

,