반응형
10-2 기사 댓글 텍스트 마이닝
가장 많이 사용된 단어 알아보기
1. 기사 댓글 불러오기
# 데이터 불러오기
df = pd.read_csv('news_comment_BTS.csv', encoding = 'UTF-8')
# 데이터 살펴보기
df.info()
"""
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1200 entries, 0 to 1199
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 reg_time 1200 non-null object
1 reply 1200 non-null object
2 press 1200 non-null object
3 title 1200 non-null object
4 url 1200 non-null object
dtypes: object(5)
memory usage: 47.0+ KB
"""
2. 불필요한 문자 제거하기
# 불필요한 문자 제거하기
df['reply'] = df['reply'].str.replace('[^가-힣]', ' ', regex = True)
df['reply'].head()
"""
0 국보소년단
1 아줌마가 들어도 좋더라
2 팩트체크 현재 빌보드 위 방탄소년단 위 ...
3 방탄소년단이 한국사람이라 너무 자랑스러워요 우리오래오래 함께하자
4 대단한 월드 클래스는 다르네 좋은 소식 응원해요
Name: reply, dtype: object
"""
3. 명사 추출하기
# kkma 만들기
import konlpy
kkma = konlpy.tag.Kkma()
# 명사 추출 - apply() 활용
nouns = df['reply'].apply(kkma.nouns)
nouns
"""
0 [국보, 국보소년단, 소년단]
1 [아줌마]
2 [팩트, 팩트체크, 체크, 보드, 위, 방탄, 방탄소년단, 소년단]
3 [방탄, 방탄소년단, 소년단, 한국, 한국사람, 사람, 자랑, 우리, 하자]
4 [월드, 클래스, 소식, 응원]
...
1195 []
1196 [우리, 탄, 자랑, 사랑]
1197 [애, 군대]
1198 [군, 군면제급, 면제, 급]
1199 [자랑, 축하, 김, 김남, 남, 김석진, 민, 민윤기, 윤기, 정, 정호석, 호석...
Name: reply, Length: 1200, dtype: object
"""
4. 단어 빈도표 만들기
# 한 행에 한 단어가 들어가도록 구성
nouns = nouns.explode()
nouns
"""
0 국보
0 국보소년단
0 소년단
1 아줌마
2 팩트
...
1199 박지민
1199 김태형
1199 전
1199 전정국
1199 정국
Name: reply, Length: 9353, dtype: object
"""
# 데이터 프레임 만들기
df_word = pd.DataFrame({'word' : nouns})
# 글자 수 추가
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(n = ('word', 'count')) \
.sort_values('n', ascending = False)
df_word
# 단어 빈도 상위 20개 추출
top20 = df_word.head(20)
top20
5. 단어 빈도 막대 그래프 만들기
# 가로 세로 크기 설정
plt.rcParams.update({'figure.figsize': [6.5, 6]})
# 막대 그래프 만들기
sns.barplot(data = top20, y = 'word', x = 'n')
워드 클라우드 만들기
# 데이터 프레임을 딕셔너리로 변환
dic_word = df_word.set_index('word').to_dict()['n']
# wc 만들기
wc = WordCloud(random_state = 1234, # 난수 고정
font_path = font, # 폰트 설정
width = 400, # 가로 크기
height = 400, # 세로 크기
background_color = 'white', # 배경색
mask = img) # mask 설정
# 워드 클라우드 만들기
img_wordcloud = wc.generate_from_frequencies(dic_word)
# 워드 클라우드 출력하기
plt.figure(figsize = (10, 10)) # 가로, 세로 크기 설정
plt.axis('off') # 테두리 선 없애기
plt.imshow(img_wordcloud) # 워드 클라우드 출력
※ 해당 내용은 <Do it! 파이썬 데이터 분석>의 내용을 토대로 학습하며 정리한 내용입니다.
반응형
'데이터 분석 학습' 카테고리의 다른 글
11장 지도 시각화 (2) (0) | 2023.05.04 |
---|---|
11장 지도 시각화 (1) (0) | 2023.05.03 |
10장 텍스트 마이닝 (2) (1) | 2023.05.01 |
10장 텍스트 마이닝 (1) (0) | 2023.04.30 |
9장 데이터 분석 프로젝트 - 한국인의 삶을 파악하라! (9) (0) | 2023.04.29 |