일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Binary Tree
- Heap
- BST
- Newyork
- Computer Science
- 데이터 분석가
- Data Analyst
- Data Structure
- Restroom
- Data Engineer
- 빅데이터 지식
- 뉴욕 화장실
- dataStructure
- Study
- priority queue
- algorithm
- data
- Algorithms
- Preparing for the Google Cloud Professional Data Engineer Exam
- 데이터 엔지니어
- data scientist
- 빅데이터
- HEAPS
- Linked List
- 빅데이터 커리어 가이드북
- binary search tree
- hash
- exam
- 화장실 지도
- Computer Organization
- Today
- Total
Jaegool_'s log
데이터분석 종합반 2주차[스파르타 코딩]<데이터 시각화, 워드클라우드, 벡터화, 머신러닝> 본문
데이터분석 종합반 2주차[스파르타 코딩]<데이터 시각화, 워드클라우드, 벡터화, 머신러닝>
Jaegool 2022. 6. 12. 20:32https://teamsparta.notion.site/2-a3962bdb49ef4c8ba54b00c6f3e52f99#6ce87e6511a5430ea3b65fedc6c91de7
[스파르타코딩클럽] 데이터분석 종합반 - 2주차
매 주차 강의자료 시작에 PDF파일을 올려두었어요!
teamsparta.notion.site
<HW>
네이버 쇼핑 리뷰를 이용하여 긍정 워드 클라우드/ 부정 워드 클라우드 만들기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_table('https://raw.githubusercontent.com/bab2min/corpus/master/sentiment/naver_shopping.txt', names=['ratings', 'reviews'])
print(df['reviews'].nunique())
# 중복 샘플 제거
df.drop_duplicates(subset=['reviews'], inplace=True)
df['ratings'].value_counts().plot(kind = 'bar')
print(df.groupby('ratings').size().reset_index(name = 'count'))
###########################
!pip install konlpy
from konlpy.tag import Okt
tokenizer = Okt()
df['tokenized'] = df['reviews'].apply(tokenizer.nouns)
# 리뷰 점수가 4~5점이면 1, 리뷰 점수가 1~2면 0의 값을 줍니다.
df['label'] = np.select([df.ratings > 3], [1], default=0)
df.head()
positive_reviews = np.hstack(df[df['label']==1]['tokenized'].values)
negative_reviews = np.hstack(df[df['label']==0]['tokenized'].values)
############################
각각의 리스트를 하나의 리스트 형태로 리뷰들을 묶어준 뒤
from wordcloud import WordCloud
temp_positive_data = ' '.join(positive_reviews)
temp_negative_data = ' '.join(negative_reviews)
plt.figure(figsize=(15, 15))
wc = WordCloud(max_words = 2000, width = 1600, height = 800, font_path = fontpath).generate(temp_positive_data)
plt.imshow(wc, interpolation = 'bilinear')
plt.figure(figsize=(15, 15))
wc = WordCloud(max_words = 2000, width = 1600, height = 800, font_path = fontpath).generate(temp_negative_data)
plt.imshow(wc, interpolation = 'bilinear')
조인으로 묶어서 문자열로 만들어준 후 워드 클라우드로 만들어 준다.
<Colab 한글패치>
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()
<DTM>
문서 단어 행렬(Document-Term Matrix, DTM)이란
- 문서를 행으로 하고,
- 각 문서에서 등장하는 각 단어들의 등장 횟수를 행렬로 표현한 것을 말합니다.
- DTM을 통해 각 문서들의 유사도를 구할 수 있습니다.
<TF-IDF>
Term Frequency-Inverse Document Frequency는 단어의 빈도와 문서의 빈도의 역수를 사용하여 DTM 내의 각 단어들마다 중요한 정도를 가중치로 주는 방법입니다. 사용 방법은 우선 DTM을 만든 후, TF-IDF 가중치를 부여합니다.
TF-IDF는 주로 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도를 정하는 작업, 문서 내에서 특정 단어의 중요도를 구하는 작업 등에 쓰일 수 있습니다.
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
corpus = [
'you know I want your love',
'I like you',
'what should I do ',
]
vector = CountVectorizer() # DTM 벡터화를 위한 객체 생성
x_train_dtm = vector.fit_transform(corpus) # 해당 문서들을 벡터화 진행
print(x_train_dtm.toarray()) # 벡터가 어떻게 생겼는지 확인
[[0 1 0 1 0 1 0 1 1]
[0 0 1 0 0 0 0 1 0]
[1 0 0 0 1 0 1 0 0]]
사이킷런을 이용하면, DTM과 TF-IDF를 쉽게 만들 수 있습니다.
사이킷런의 CountVectorizer를 사용하면 DTM을 만들 수 있고,
TfidfTransformer를 사용하면 TF-IDF 행렬을 만들 수 있습니다.
tfidf_transformer = TfidfTransformer() # tfidf 벡터화를 위한 객체 생성
tfidfv = tfidf_transformer.fit_transform(x_train_dtm) # x_train_dtm에 대해서 벡터화 진행
print(tfidfv.toarray()) # 벡터가 어떻게 생겼는지 확인
[[0. 0.46735098 0. 0.46735098 0. 0.46735098
0. 0.35543247 0.46735098]
[0. 0. 0.79596054 0. 0. 0.
0. 0.60534851 0. ]
[0.57735027 0. 0. 0. 0.57735027 0.
0.57735027 0. 0. ]]
- fit_transform()은 생성한 객체 (vector, tfidf_transformer) 에다가 해당 문서 혹은 단어들의 벡터값을 저장하면서 벡터화를 진행하는 함수입니다. - train
- transform()은 훈련 데이터를 통해서 만들어진 벡터값을 보고, 그것에 따라 벡터화를 진행하는 함수입니다. 만약 훈련 데이터를 토대로 'a' 라는 단어에 대해서 벡터값을 [0 1 0] 이라고 생성해놓았다면, 테스트 데이터에서 등장한 'a' 에 대해서도 [0 1 0] 이라고 벡터화를 진행하는 것입니다. - test
'Development Log > Data Analytics' 카테고리의 다른 글
데이터분석 종합반 5주차[스파르타 코딩]<고객 행동 예측, 고객 행동 예측> (0) | 2022.06.28 |
---|---|
데이터분석 종합반 4주차[스파르타 코딩]<LinearRegression, 자전거 수요 예측 준비 단계> (0) | 2022.06.25 |
데이터분석 종합반 3주차[스파르타 코딩]<Data Visualization> (0) | 2022.06.18 |
Data analysis 1st week [SpartaCoding] <Kaggle, Colab, BeautifulSoup4> (0) | 2022.06.01 |