데이터분석 워드클라우드 정리

전윤환·2022년 6월 15일
0

데이터분석종합반

목록 보기
6/7

1) 기본세팅
2) 모듈 임포트, 한글세팅
3) 데이터파일 로드
4) 중복데이터 제거
5) 텍스트마이닝(불필요한 데이터 제거)
6) 형태소 분석(명사 토큰화)
7) 불용어 제거(필요없는 단어, 조사, 접사 등)
8) 토큰화된 결과로부터 불용어 제거(리스트 컴프리헨션)
9) 단어의 빈도 파악(Counter)
10) 머신러닝(나이브베이즈, 로지스틱 회귀, SVM 등)

1단계

코랩에서 한글사용을 위한 세팅

import matplotlib as mpl
import matplotlib.pyplot as plt
 
%config InlineBackend.figure_format = 'retina'
 
!apt -qq -y install fonts-nanum
 
import matplotlib.font_manager as fm
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic') 
mpl.font_manager._rebuild()

2단계

판다스로 데이터프레임 생성

import pandas as pd
# csv 파일을 읽습니다.
df = pd.read_table('csv파일', sep=',')

pd.read_table : pd_read_csv와 유사함. 현실적으로 큰 차이 없음
csv파일의 경로 혹은 주소를 적어도 됨

3단계

텍스트 마이닝(불필요한 데이터 제거)

# 중복 샘플 제거
df.drop_duplicates(subset=['컬럼명'], inplace=True)

# 세로막대차트로 개수 확인
df['컬럼명'].value_counts().plot(kind = 'bar')

형태소 분석 (명사 토큰화)

!pip install konlpy

# 아래 코드는 konlpy라는 패키지 안에 tag 모듈 안에 있는 Okt라는 모듈을 임포트 합니다.
# konlpy 안에 tag 안에 Okt가 있는 이런 상하 관계는 누가 정했냐구요? konlpy 개발자가 그렇게 정했고,
# 저는 지금 konlpy 홈페이지에 적혀져 있는 사용법대로 사용하고 있는 겁니다.
# konlpy 홈페이지 : https://konlpy-ko.readthedocs.io/ko/v0.4.3/

# from 패키지.모듈 import 하위모듈
# 이것은 패키지를 임포트하는 전형적인 방식입니다.

from konlpy.tag import Okt

tokenizer = Okt()
# 테스트용 변수선언
kor_text = '밤에 귀가하던 여성에게 범죄를 시도한 대 남성이 구속됐다서울 제주경찰서는 \
            상해 혐의로 씨를 구속해 수사하고 있다고 일 밝혔다씨는 지난달 일 피해 여성을 \
            인근 지하철 역에서부터 따라가 폭행을 시도하려다가 도망간 혐의를 받는다피해 \
            여성이 저항하자 놀란 씨는 도망갔으며 신고를 받고 주변을 수색하던 경찰에 \
            체포됐다피해 여성은 이 과정에서 경미한 부상을 입은 것으로 전해졌다'

# 명사 토큰화 or 명사 추출(100% 정확하진 않아요!)
print(tokenizer.nouns(kor_text))

불용어 제거
많이 등장하지만 필요없는 단어, 조사, 접사 등

# 뉴스에 크롤링 후 워드클라우드 작성에 제외할 불용어 목록
stop_words = ['기자', '제공', '무단', '배포', '무단배포', '배포금지', '이번', '위해', '라며', '금지', '뉴스', '통해', '오늘', '지난달', '지난', '대한', '경우', '관련', '뉴시스', '현재', '지난해', '때문', '지금', '또한', '만큼', '최근', '당시', '올해', '대해', '다시', '모두']

데이터프레임이름['열의 이름'].apply(동작 코드)
위 방법을 사용하면 동작 코드를 데이터프레임의 특정 열 전체. 다시 말해 해당 열에 있는 각 행에 전부 적용하는 효과를 가집니다.
- 데이터프레임의 news열에 tokenized.nouns라는 함수를 모두 적용하고 나서
- tokenized 열에 새로 저장하라! 라는 의미가 됩니다

불용어들을 토큰화된 결과로부터 제외 -> 리스트 컴프리헨션!

test_list = ['경찰서', '상해', '혐의', '씨', '구속', '수사', '일']
remove_word_list = ['경찰서', '구속']
test_list = [item for item in test_list if item not in remove_word_list and len(item) > 1]

print(test_list)

불용어 제거 코드
df['tokenized'] = df['tokenized'].apply(lambda x: [item for item in x if item not in stop_words and len(item) > 1])

등장하는 단어의 빈도 파악
Counter 함수 사용

from collections import Counter

워드클라우드 생성
기초 코드

from wordcloud import WordCloud

# 사용하고자 하는 폰트의 경로. Colab에서는 이 경로를 사용하시면 됩니다.
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'

plt.figure(figsize = (15,15))

wc = WordCloud(max_words = 사용할 단어의 수 , width = 가로, height = 세로, font_path = fontpath).generate('입력 문자열')
plt.imshow(wc, interpolation = 'bilinear')
profile
코딩 연습장. 발전하고 싶습니다. 모든 방향에서의 비판 부탁드립니다.

0개의 댓글