WordCloud 더 나아가기

2024. 11. 7. 22:54python study/sw와 ai 데이터 분석

자연어 처리(Natural Language Processing)

  • 컴퓨터가 자연어를 해석하여 처리할 수 있도록 해주는 일

한글의 자연어 처리

  • 형태소: 언어에서 의미가 있는 가장 작은 단위로 어근, 접미사, 접두사 등의 속성을 의미한다.
  • 품사 태깅: 형태소의 뜻과 문맥을 고려하여 품사를 붙여줌, 즉 태깅하는 것을 의미한다.

koNLpy

  • 한글 자연어 처리를 위해서 개발된 파이썬 기반의 오픈 소스
  • OKt, Hannanum 등 과 같은 품사태깅 패키지를 지원한다.

koNLpy 설치

  • pip install koNLpy
  • 원래 java엔진이 필요하지만 colab에서는 설치할 필요 없다.

Twitter(Okt) 품사 태깅 패키지 사용하기

  • Okt 라이브러리
from konlpy.tag import Okt
  • 변수명=Okt(): 라이브러리를 사용하기 위한 객체 생성
  • 변수명. morphs(데이터(문자열)): 형태소 분석
  • 변수명. pos(데이터): 품사태깅 확인
  • 변수명. nouns(문자열): 명사 데이터 확인하기

자연어 처리하기

  • 형태소 분석, 품사 태깅, 명사테이터를 확인해 준다.
t = Okt()
t.morphs(text)  # 형태소 분석
t.pos(text)  # 품사태킹 (아빠 => 명사, 은,는 => 조사)
명사 = t.nouns(text)  # 명사 데이터만 추출
  • 추출한 명사들을 하나의 문자열로 저장해 준다.
strData = ''
for i in 명사:
    strData += i + " "
  • 전체 코드는 다음과 같다.
from PIL import Image
import numpy as np
from konlpy.tag import Okt #자연어 처리를 위한 라이브러리
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt

mask = np.array(Image.open('/content/heart_mask.jpg'))
path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'

t = Okt()
t.morphs(text)  # 형태소 분석
t.pos(text)  # 품사태킹 (아빠 => 명사, 은,는 => 조사)
명사 = t.nouns(text)  # 명사 데이터만 추출

strData = ''
for i in 명사:
    strData += i + " "

stopwords = STOPWORDS.union(['그', '것', '일반', '다른', '능력','등','이','및']) #불용어 처리
wc_output = WordCloud(width=500, height=500, 
                      stopwords=stopwords, 
                      mask=mask, 
                      font_path=path).generate(strData)
plt.axis("off")
plt.imshow(wc_output)
plt.show()

  • max_words=개수(정수): 최대 표시할 단어의 개수를 제한해 준다.
from PIL import Image
import numpy as np
from konlpy.tag import Okt #자연어 처리를 위한 라이브러리
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt

mask = np.array(Image.open('/content/heart_mask.jpg'))
path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'

t = Okt()
t.morphs(text)  # 형태소 분석
t.pos(text)  # 품사태킹 (아빠 => 명사, 은,는 => 조사)
명사 = t.nouns(text)  # 명사 데이터만 추출

strData = ''
for i in 명사:
    strData += i + " "

stopwords = STOPWORDS.union(['그', '것', '일반', '다른', '능력','등','이','및','사용','이용','들여쓰기']) #불용어 처리
wc_output = WordCloud(width=500, height=500, 
                      stopwords=stopwords, 
                      mask=mask, 
                      font_path=path,
                      max_words=20).generate(strData) #최대 단어를 20개로 제한함
plt.axis("off")
plt.imshow(wc_output)
plt.show()

공공 데이터와 워드 클라우드

  • 제일 먼저 데이터를 불러온다.

2021년 시도 출생아수와 혼인건수.csv
0.00MB

import pandas as pd

df=pd.read_csv("/content/2021년 시도 출생아수와 혼인건수.csv",encoding='euc-kr')
df.head()

 

서울특별시 45531 48798
부산광역시 14446 23531
대구광역시 10661 14560
인천광역시 14947 16493
광주광역시 7956 7981
  • 데이터를 딕셔너리 구조로 변경해 준다.

1. set_index와 to_dict 활용

dic1=df.set_index('행정구역별')['출생아수'].to_dict()
dic1

 

2.zip 활용

dic2={}
for i,j in zip(df['행정구역별'],df['출생아수']):
  dic2[i]=j
dic2
  • 앞에서 활용한 wordcloud를 출력하는 방법을 활용하여서 마무리하기
  • 여기에서 주의할 점은 딕셔너리를 활용하였기 때문에 빈도를 나타내는 generate_from_frequencies로 워드 클라우드를 형성해 준다.
path='/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
mask=np.array(Image.open('/content/heart_mask.jpg'))

wordcloud=WordCloud(font_path=path,
                    background_color='white',
                    mask=mask,width=1500, 
                    height=1000,max_words=20).generate_from_frequencies(dic1)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

'python study > sw와 ai 데이터 분석' 카테고리의 다른 글

지도 시각화2  (2) 2024.11.09
지도 시각화  (1) 2024.11.08
WorldCloud 시각화분석  (1) 2024.11.07
데이터 시각화2  (0) 2024.11.06
넘파이 활용하기  (0) 2024.11.04