ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [텍스트마이닝] 한글 빈도분석과 WordCloud
    Python 2023. 1. 27. 15:00

    동아대 INSPIRE - python텍스트마이닝 25강을 실습 및 정리한 내용입니다.


    1. 분석 명령어

    ① 패키지 및 데이터 불러오기

    먼저, 필요한 명령어들을 불러옵니다.

    import numpy as np
    from sklearn.feature_extraction.text import CountVectorizer
    from matplotlib import font_manager
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    import pickle

     

    지난 강의에서 만들었던 한글 파일을 여는 코드를 fp라고 임의로 지정하고, pickle을 로드하여 ko_word에 저장합니다.

    with open('ko_stopped_join.bin', 'rb') as fp:
        ko_word = pickle.load(fp)

     

    ko_word를 실행하면, 단어들이 쭉 나열된 형태로 잘 저장된 것을 확인할 수 있습니다.

     

    ② DTM 자료 만들기

    상위 100개를 뽑아서 cv에 저장하겠습니다.

    cv=CountVectorizer(max_features=100)

     

    fit_transform라는 명령어를 사용해서 dtm 자료를 만들어 확인해 봅시다.

    dtm=cv.fit_transform(ko_word)
    dtm

    문서가 세로로 118개, 상위 단어 100개가 가로로 나오는 자료가 만들어졌습니다.

     

    지금 dtm에 이름이 없기 때문에, get_feature_names 명령어를 사용해 cv의 이름을 words에 저장하겠습니다.

    words=cv.get_feature_names()

     

    ③ 단어별 빈도세기 및 단어-빈도(TF) 만들기

    이번에는 DTM 자료가 아래와 같이 만들어졌다고 생각했을 때, 각 단어별 개수를 카운트해 보겠습니다.

      가능성 가치 ... 인간
    문서 1 2 1   0
    문서 2 0 2   1
    문서 3 1 1   0
    ...        
    문서 118 3 2   0

     

    dtm.sum(axis=0)을 하면 세로로 개수를 더한 값을 구할 수 있고, count_mat에 저장합니다.

    count_mat=dtm.sum(axis=0)
    count_mat

    잘 저장되었지만, 행렬 형태입니다.

     

    A-29

    B-24

    C-26

    위와 같은 형태로 차원을 줄여 array 형태로 만들겠습니다.

    차원을 줄일 때는 squeeze를 사용하고, 단어와 카운트를 묶기 위해 zip을 사용합니다.

    count=np.squeeze(np.asarray(count_mat))
    word_count=list(zip(words,count))
    word_count

    단어와 빈도가 잘 매치되었습니다.

     

    이를 워드클라우드로 만들기 위해서는 개수가 많은 순서대로 정렬되어야 합니다.

    word_count=sorted(word_count, key=lambda x:x[1], reverse=True)
    word_count

    빈도가 높은 순으로 정렬되었습니다.

     

    ④ wordcloud 작성하기

    이제 워드클라우드를 작성해 봅시다!

    주의! 한글은 폰트가 깨질 수 있기 때문에, font_pathwindow 폰트로 설정해 주어야 합니다.

    wc=WordCloud(font_path='C:/Windows/Fonts/malgun.ttf', background_color='black', width=800, height=600)

    빈도는 word_count로 지정해 줍니다.

    cloud=wc.generate_from_frequencies(dict(word_count))

    워드클라우드의 크기, 축 등을 설정해 줍니다.

    plt.figure(figsize=(12,9))
    plt.imshow(cloud)
    plt.axis('off')
    plt.show()

     

    폰트 깨지는 것 없이 잘 만들어졌습니다!

Designed by Tistory.