17. 데이터 분석하기 코로나 뉴스 토픽분석(22.08.03)
[토픽 분석 + LDA 토픽 모델]
목표: 뉴스에서 코로나 관련 토픽을 분석하고 결과 시각화
1. 데이터 수집
이전에 사용한 네이버에서 크롤링한 코로나 뉴스에서 명사만을 추출한 단어 상태의 리스트를 준비
저번시간에 "코로나navernews.csv" 파일을 사용하면 된다.
2.데이터 준비 및 탐색
train데이터부터 데이터 전처리를 해볼 것이다.
data=pd.read_csv("../data/Corona/코로나_naver_news.csv",encoding='euc-kr')
description=data['description']
description_noun_tk=[]
for d in description:
description_noun_tk.append(okt.nouns(d))
description_noun_tk2=[]
for d in description_noun_tk:
item=[i for i in d if len(i) >1]
description_noun_tk2.append(item)
description_noun_tk
3. 분석 모델 구축
토픽분석을 하기위해 파이썬의 gensim패키지에서 제공하는 LDA토픽 모델을 사용.
import gensim
import gensim.corpora as corpora
dictionary=corpora.Dictionary(description_noun_tk2)
corpus=[dictionary.doc2bow(word) for word in description_noun_tk2]
corpus
[03행]: descriptionnountk2에 포함된 단어에 대한 사전을 생성
[04행]: 단어사전의 단어에 대해 bow를 구하여 단어뭉치를 생성
[05행]: 단어뭉치를 출력하여 (wordid,wordcount)의 BoW구성을 확인
k=4
lda_model=gensim.models.ldamulticore.LdaMulticore(corpus,iterations=12,num_topics=k,id2word=dictionary,passes=1,workers=10)
[01행]: 사용자가 직접 토픽의 수를 정해준다,
[02행]: 토픽의 모델을 4로하는 lda객체를 생성
4. 결과 확인 및 시각화
lda_model.print_topics(num_topics=k,num_words=15)
[01행]: num_words=15로 설정해서 토픽을 구성하는 주요단어 15개와 각각의 토픽에 대한 영향력 비율과 출력
| 토픽 번호 | 주요. 단어(15개) | |
| --- | --- | --- |
| 0 | '0.072"코로나" + 0.010"위해" + 0.010"신종" + 0.010"바이러스" + 0.008"감염증" + 0.006"확산" + 0.006"지역" + 0.006"의료" + 0.005"사태" + 0.004"이번" + 0.004"진자" + 0.004"방역" + 0.004"시대" + 0.004"온라인" + 0.004*"기업"' | 지역 확산 사태 |
| 1 | '0.064"코로나" + 0.013"바이러스" + 0.011"신종" + 0.010"감염증" + 0.007"확산" + 0.007"위해" + 0.006"사태" + 0.005"이번" + 0.004"지역" + 0.004"방역" + 0.004"극복" + 0.004"진행" + 0.003"지난" + 0.003"최근" + 0.003*"감염"' | 지역 확산 사태 |
| 2 | '0.050"코로나" + 0.009"위해" + 0.007"바이러스" + 0.007"감염증" + 0.006"이번" + 0.006"지역" + 0.005"확산" + 0.005"신종" + 0.004"방역" + 0.004"어려움" + 0.004"진자" + 0.004"통해" + 0.004"사회" + 0.004"대응" + 0.004*"예방"' | 코로나 예방 |
| 3 | 0.058"코로나" + 0.011"신종" + 0.011"바이러스" + 0.011"감염증" + 0.008"위해" + 0.006"의료" + 0.004"서울" + 0.004"장기" + 0.004"시대" + 0.004"방역" + 0.003"어려움" + 0.003"확산" + 0.003"지역" + 0.003"진행" + 0.003*"지난" | 지역 확산 사태 |
하지만 따로 이렇게 결과를 표현해주지는 않기때문에 표로 정리해야 한 눈에 알아볼 수 있다.
os.environ["PYTHONIOENCODING"]="utf-8"
import pyLDAvis.gensim_models
lda_vis=pyLDAvis.gensim_models.prepare(lda_model,corpus,dictionary)
pyLDAvis.display(lda_vis)
pyLDAvis를 통해서 시각화를 진행한다. 왼쪽에는 토픽 간 거리 지도가 표시되고, 오른쪽에는 관련성 높은 단어 30개가 보인다.
.
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 16 (0) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 15 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 14 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 13 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 12 (1) | 2023.10.26 |