데이터 분석/왕초보를 위한 머신러닝
[머신러닝 기초] 텍스트분석 - Clustering (Opinion Review 데이터)
ai-creator
2021. 11. 27. 10:28
반응형
1. 텍스트 분석 - Clustering
앞에서 배운 분류와 마찬가지로, input 데이터의 최초 형태만 다른 것이지 input feature로 만들면 동일하게 clustering 알고리즘을 적용하여 분석할 수 있다.
2. 군집화 실습 (Opinion Review)
실습 : 문집 군집화 실습
- 소스 코드 : (Link)
- 데이터셋 : (Link)
2.1) 데이터 설명
- 51개의 텍스트 파일로 구성
- 각 파일은 Tripadvisor(호텔), Edmunds.com(자동차), Amazon.com(전자제품) 사이트에서 가져온 리뷰 문서
- 문서유형을 크게 보면, 전자제품 / 자동차 / 호텔로 되어 있음
- 전자제품은 네비게이션 / 에어팟 / 킨들 / 랩탑 컴퓨터 등
- Amazon.com에서 Garmin nuvi라는 차량용 네비게이션 모델에 대한 리뷰
2.2) 소스코드
2.2.1) 파일읽기
- 지정된 경로의 .data 파일을 모두 읽음
- filename과 opinion_text를 컬럼으로하는 dataframe을 생성함
import pandas as pd
import glob ,os
# 아래는 제 컴퓨터에서 압축 파일을 풀어 놓은 디렉토리이니, 여러분의 디렉토리를 설정해 주십시요
path = './OpinosisDataset1.0/OpinosisDataset1.0/topics'
# path로 지정한 디렉토리 밑에 있는 모든 .data 파일들의 파일명을 리스트로 취합
all_files = glob.glob(os.path.join(path, "*.data"))
filename_list = []
opinion_text = []
# 개별 파일들의 파일명은 filename_list 리스트로 취합,
# 개별 파일들의 파일내용은 DataFrame로딩 후 다시 string으로 변환하여 opinion_text 리스트로 취합
for file_ in all_files:
# 개별 파일을 읽어서 DataFrame으로 생성
df = pd.read_table(file_,index_col=None, header=0,encoding='latin1')
# 절대경로로 주어진 file 명을 가공. 만일 Linux에서 수행시에는 아래 \\를 / 변경. 맨 마지막 .data 확장자도 제거
filename_ = file_.split('\\')[-1]
filename = filename_.split('.')[0]
#파일명 리스트와 파일내용 리스트에 파일명과 파일 내용을 추가.
filename_list.append(filename)
opinion_text.append(df.to_string())
# 파일명 리스트와 파일내용 리스트를 DataFrame으로 생성
document_df = pd.DataFrame({'filename':filename_list, 'opinion_text':opinion_text})
document_df.head()
결과
2.2.2) 전처리
- TF-IDF로 피처 벡터화
from nltk.stem import WordNetLemmatizer
import nltk
import string
remove_punct_dict = dict((ord(punct), None) for punct in string.punctuation)
lemmar = WordNetLemmatizer()
def LemTokens(tokens):
return [lemmar.lemmatize(token) for token in tokens]
def LemNormalize(text):
return LemTokens(nltk.word_tokenize(text.lower().translate(remove_punct_dict)))
#################
## 벡터화
#################
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer(tokenizer=LemNormalize, stop_words='english' , \
ngram_range=(1,2), min_df=0.05, max_df=0.85 )
#opinion_text 컬럼값으로 feature vectorization 수행
feature_vect = tfidf_vect.fit_transform(document_df['opinion_text'])
2.2.3) 군집화 수행 (k=3)
from sklearn.cluster import KMeans
# 3개의 집합으로 군집화
km_cluster = KMeans(n_clusters=3, max_iter=10000, random_state=0)
km_cluster.fit(feature_vect)
cluster_label = km_cluster.labels_
# 소속 클러스터를 cluster_label 컬럼으로 할당하고 cluster_label 값으로 정렬
document_df['cluster_label'] = cluster_label
document_df.sort_values(by='cluster_label')
결과
Cluster #0 : _______________
Cluster #1 : _______________
Cluster #2 : _______________
ㅁ Reference
- [책] 파이썬 머신러닝 완벽가이드
- [블로그] 파이썬 머신러닝 완벽가이드 정리본 (Link)
- [소스코드 출처] : https://github.com/wikibook/pymldg-rev
반응형