WordCloud 더 나아가기
2024. 11. 7. 22:54ㆍpython 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 |