qcoding

[데이터분석실습]기사 댓글 텍스트 마이닝 본문

Python 데이터분석

[데이터분석실습]기사 댓글 텍스트 마이닝

Qcoding 2022. 6. 27. 23:19
반응형

https://github.com/youngwoos/Doit_Python/tree/main/Data

 

GitHub - youngwoos/Doit_Python: <Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소

<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.

github.com

## 기사 댓글 텍스트 마이닝

#방탄소년단이 '빌보드 핫 100 차느' 1위에 오른 소식을 다룬 네이버 뉴스 기사 댓글을 사용

 

1) 기사댓글불러오기

import pandas as pd
import numpy as np
import seaborn as sns

df=pd.read_csv('./news_comment_BTS.csv',encoding='UTF-8')
df

# 데이터 확인하기
df.info()

 

2)  불필요한 문자 제거하기

-> reply 에서 한글을 제외한 문자를 제거함.

## reply에서 불필요한 문자제거하기
df['reply']=df['reply'].str.replace('[^가-힣]','',regex=True)
df['reply'].head()

 

3)  명사추출하기

-> 꼬꼬마 형태소 분석기는 띄어쓰기 오류가 있는 문장에서도 형태소를 잘 추출하는 장점이 있으므로 댓글처럼 정제되지 않은 텍스트를 분석할 때 적합함.

## 꼬꼬마 (Kkma) 형태소 분석기를 사용하여 명사 추출하기
import konlpy
kkma=konlpy.tag.Kkma()
## 명사추출하기
nouns=df['reply'].apply(kkma.nouns)
nouns

4)  단어 빈도표 만들기

-> 위에서 [국보,국보소년단,소년단] 과 같이 list 형태로 여러 단어가 들어있으므로 각 행마다 한단어 들어가도록

list를 전개하기 위해서 df.explode() 사용함.

nouns=nouns.explode(ignore_index=True)
nouns

 

# 두글자 이상으로 된 단어만 남기고 단어 빈도표를 만듦
df_word=pd.DataFrame({'word' : nouns})
df_word

 

# 글자 수 추가
df_word['count']=df_word['word'].str.len()

# 두글자 이상 단어만 남기기
df_word=df_word.query('count>=2')
df_word

 

# 빈도표 만들기
df_word=df_word.groupby('word',as_index=False).agg(count_word=('word','count')).sort_values('count_word',ascending=False)
df_word

 

 

5)  단어 빈도 막대 그래프 만들기

#단어 빈도 상위 20개 추출
top20=df_word.head(20)
top20

 

 

## colab 에서 font 설치하기
## 설치후 런타임 재시작 후진행
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
import matplotlib.pyplot as plt

import matplotlib 
matplotlib.font_manager._rebuild()


plt.rcParams.update({
    'font.family' :'NanumBarunGothic',
    'figure.dpi' : '120',
    'figure.figsize' : [6.5,6] 
})


# 막대 그래프 만들기
sns.barplot(data=top20, x='count_word', y='word')

6)  wordcloud 만들기

# 데이터 프레임을 딕셔너리로 변환
dic_word=df_word.set_index('word').to_dict()['count_word']
dic_word

# word cloud 만들기
## 워드 클라우드 모양 바꾸기
import PIL
icon=PIL.Image.open('./cloud.png')

# 불러온 이미지 파일 -> mask를 만듦
import numpy as np
img=PIL.Image.new('RGB',icon.size,(255,255,255))
img.paste(icon,icon)
img=np.array(img)

# mask를 활용하도록 설정
from wordcloud import WordCloud

wc=WordCloud(
      random_state=1234,
      font_path='DoHyeon-Regular.ttf',
      width=400,
      height=400,
      background_color='white',
      mask=img
)

## word cloud 만들기
img_wordcloud=wc.generate_from_frequencies(dic_word)

# word cloud 출력
plt.figure(figsize=(10,10))
plt.axis('off')
plt.imshow(img_wordcloud)

 

 

반응형
Comments