Data Science/자연어 처리 (NLP)

워드 클라우드 (Word Cloud, 단어 구름) 만들기 - Python3, Windows 10 (feat.

 

아래 글에서 이어지는 내용이다.

foreverhappiness.tistory.com/35

 

[자연어 처리] 불용어(Stop Words) 처리하기 - Python3, Windows 10

아래 글에서 이어지는 내용이다. foreverhappiness.tistory.com/30 [자연어 처리] KoNLPy를 사용하여 형태소 분석 및 DTM 만들기 - Python3, Windows 10 (feat. Okt, Pandas, Scikit-Le 아래 글에서 이어지는 내용..

foreverhappiness.tistory.com

 

지난 시간까지 웹 페이지를 크롤링하여 이를 필터링하고 형태소 분석하고 불용어 처리까지 하여 최종적으로 DTM을 만드는 작업까지 했다.

 

이번 포스팅에서는 지난 시간까지 작업했던 DTM.csv 파일을 사용하여 워드 클라우드 (Word Cloud)를 만들어볼 것이다.

 

혹시 이전 포스팅들을 볼 여유가 없어 실습할 DTM.csv 파일이 필요하다면 아래 깃허브에 올려뒀으니 참고 바란다.

https://github.com/happiness96/Web-Crawling/tree/master/crawling

 

happiness96/Web-Crawling

Web Crawling, Text mining, Data mining (Using Python3) - happiness96/Web-Crawling

github.com

 


 

먼저 워드 클라우드 라이브러리를 설치해야 한다.

왼쪽 하단의 시작 버튼 옆 검색창에 CMD 혹은 명령 프롬프트를 입력하고 실행시킨다.

 

그리고 아래 명령문을 실행하여 Word Cloud 라이브러리를 설치한다.

 

pip install wordcloud

 

혹시나 pip 명령문을 찾을 수 없다는 오류가 발생한다면 아래 링크에서 환경 변수 부분을 참고하길 바란다.

 

foreverhappiness.tistory.com/25

 

파이썬 3 (Python 3) 설치하기 (For Windows)

최근 들어 파이썬의 비중이 많이 높아지고 있다. 파이썬으로 게임을 제작하기도 하고, 인공지능, 빅데이터 분석에도 많은 라이브러리들이 제공되기도 한다. 삼성 SW 역량 평가에 Python 언어도 포

foreverhappiness.tistory.com

 


 

설치가 끝났다면 이제 한번 사용해보자.

 

먼저 워드 클라우드를 각 단어의 빈도수에 따라 제작하려 한다.

단어의 빈도수가 크면 단어가 크게 나타날 것이고, 빈도수가 적으면 작게 나타날 것이다.

 

아래의 코드를 살펴보자.

 

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

if __name__ == '__main__':
    # pandas의 read_csv 함수를 이용하여 DTM 파일을 불러온다.
    dataset = pd.read_csv('D:\crawling\DTM.csv')

    # 각 단어의 빈도수를 나타내는 dictionary를 선언한다. key: 단어, value: 등장 횟수
    frequency = {}

    for word in dataset.columns[1:]:        # columns를 사용하면 0번째 열에 해당하는 값들을 반환해준다.
        frequency[word] = sum(dataset[word])        # sum 함수를 통해 모든 문서를 통틀어 해당 단어가 몇 번 출현했는지 빈도수를 저장할 수 있다.

    # 워드 클라우드의 기본 설정을 해준다.
    fp = './utils/NanumGothic.ttf'      # 설정해줄 폰트의 경로 (C:/Windows/Fonts/ 를 참고)
    wc = WordCloud(background_color="white", max_words=100, width=1000, height=800, font_path=fp)
    plt.figure(figsize=(15, 15))        # 워드 클라우드 이미지 사이즈를 조절한다.

    wc = wc.generate_from_frequencies(frequency)        # 빈도수에 따라 각 단어의 크기가 결정된다.
    plt.imshow(wc)
    plt.axis('off')
    plt.show()

 

먼저 지난번에 각 문서별로 해당 단어가 몇 회 출현했는지 나타내 주는 DTM(Document-Term-Matrix, 문서 단어 행렬)을 제작했었다. 

 

이번에는 전체 문서에 대해 각 단어의 빈도수를 확인해야 하므로 DTM 문서를 불러와 각 단어별로 즉 열 별로 sum 함수를 사용하여 빈도수를 체크해줄 것이다.

 

이를 frequency dict에 담아 확인해보면 아래와 같이 나올 것이다.

 

{'가공': 1121,
 '가동': 1278,
 '가루': 2,
 '가상': 4,
 '가성': 1,
 '가속': 127,
 '가수분해': 3,
 '가스': 4716,
 '가압': 2,
 '가연': 23,
 '가연성': 5389,
 '가열': 5903,
     .
     .
     .
 

 

Word Cloud로 객체를 생성해줄 때 여러 가지 설정 작업을 해준 후 generate_from_frequencies 함수를 동해 frequency dict를 넣어주기만 하면 끝이다.

 

결과는 아래와 같다.

 

Word Cloud (Frequency)

 

현재 분류된 모든 단어들은 크롤링했던 데이터 중 "화재 및 폭발 가능성"에 해당하는 단어들이다.

빈도수에 따라 생성된 것이므로 폭발, 분진, 화재, 점화, 가열 등등 이런 단어들의 빈도수가 높다는 걸 알 수 있다.

 


 

마지막으로 재밌는 작업을 하나 해보고자 한다.

 

아래 사진에 워드 클라우드를 입히고자 한다.

 

Black Mage

 

그렇다.. 검은 마법사다.

사진은 아무거나 상관없지만 검은색을 찾아 워드 클라우드를 입히기 때문에 검은색 이미지라면 더욱 좋다.

 

이제 아래 코드를 실행시켜보자.

 

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np

if __name__ == '__main__':
    # pandas의 read_csv 함수를 이용하여 DTM 파일을 불러온다.
    dataset = pd.read_csv('D:\crawling\DTM.csv')

    # 각 단어의 빈도수를 나타내는 dictionary를 선언한다. key: 단어, value: 등장 횟수
    frequency = {}

    for word in dataset.columns[1:]:        # columns를 사용하면 0번째 열에 해당하는 값들을 반환해준다.
        frequency[word] = sum(dataset[word])        # sum 함수를 통해 모든 문서를 통틀어 해당 단어가 몇 번 출현했는지 빈도수를 저장할 수 있다.

    black_mage_mask = np.array(Image.open("D:\crawling\Black_Mage.jpg"))

    # 워드 클라우드의 기본 설정을 해준다.
    fp = './utils/NanumGothic.ttf'      # 설정해줄 폰트의 경로 (C:/Windows/Fonts/ 를 참고)
    wc = WordCloud(background_color="white", max_words=100, width=1000, height=800, font_path=fp, mask=black_mage_mask)
    plt.figure(figsize=(15, 15))        # 워드 클라우드 이미지 사이즈를 조절한다.

    wc = wc.generate_from_frequencies(frequency)        # 빈도수에 따라 각 단어의 크기가 결정된다.
    plt.imshow(wc)
    plt.axis('off')
    plt.show()

 

위 이미지 파일은 코드상에 보이는 경로에 넣어두었다.

이미지 파일을 마스킹하기 위해 numpy와 PIL 모듈을 불러왔다.

 

혹시나 numpy가 설치되어있지 않다면 명령 프롬프트를 열어 아래 명령을 실행시키면 설치할 수 있다.

 

pip install numpy

 

numpy 모듈과 PIL 모듈을 사용하여 이미지를 불러온 후 Word Cloud에 mask 속성으로 넣어주면 끝이다.

 

결과는 아래와 같다.

 

 

너무 귀여워졌다.

 


 

여기까지 워드 클라우드에 대해 살펴보았다.

 

아마 워드 클라우드는 인터넷을 하면서 한 번쯤은 보았을 것이다.

 

물론 단어마다 색상을 지정할 수도, 워드 클라우드를 조금 더 예쁘게 꾸밀 수도 있는 방법도 많다.

 

어떤 주제에 대해서 키워드나 연관어를 나타낼 때 사용하면 유용할 것이다.