반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- React
- ReactNative
- 데이터분석
- 정치인
- 카트폴
- redux
- 클론코딩
- clone coding
- Instagrame clone
- 딥러닝
- 조코딩
- 머신러닝
- coding
- App
- Ros
- 강화학습
- 사이드프로젝트
- kaggle
- 크롤링
- selenium
- FirebaseV9
- 강화학습 기초
- 앱개발
- 리액트네이티브
- TeachagleMachine
- python
- 전국국밥
- pandas
- JavaScript
- expo
Archives
- Today
- Total
qcoding
[데이터분석실습]기사 댓글 텍스트 마이닝 본문
반응형
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)
반응형
'Python 데이터분석' 카테고리의 다른 글
[데이터분석실습]인터랙티브 그래프 (0) | 2022.06.28 |
---|---|
[데이터분석실습]지도 시각화 (0) | 2022.06.28 |
[데이터분석실습]텍스트 마이닝_대통령 연설문 분석 (0) | 2022.06.26 |
[데이터분석정리_2] 그래프 그리기 (0) | 2022.06.24 |
[데이터분석_정리_1]query() / sort_values() / assign() / groupby() / agg() / merge() / concat() (0) | 2022.06.21 |
Comments