7. 데이터 분석하기영문분석(22.07.16)
[영문분석 + 워드클라우드]
목표:검색한 영문 논문의 제목에서 빈도분석을 수행하여 키워드 도출
- >텍스트 분석, 전처리 , 토큰화, 불용어 및 어간 추출, 워드클라우드 구성
텍스트 분석이란?: 자연어 처리와 데이터 마이닝이 결합한 것으로, 비정형 텍스트 데이터에서 정보를 추출하여 분석
- > 텍스트 분류, 텍스트 군집화, 감성분석
전처리란?:분석의 정확도를 높이기 위해 분석에 사용할 데이터를 정리하고 변환하는 작업
- >정제, 정규화, 토큰화, 불용어제거, 어간추출, 표제어 추출
| 단어 | 어간 추출 | 표제어 추출 |
| --- | --- | --- |
| am | am | be |
| the going | the go | the going |
| having | hav | have |
워드클라우드란? 텍스트분석에서 많이 사용되는 시각화 기법으로. 키워드를 직관적으로 알 수 있게 해준다.
1.데이터 수집
한국교육학술정보원의 학술연구정보서비스 사이트에서 1000개의 해외 학술 문서 제목을 다운로드한다.
100개씩 구성되어 있는 데이터를 10개 다운로드 받아서 총 1000개의 데이터를 구성한다.
riss사이트 접속->big data 검색->해외학술논문 메뉴 선택->좌측에 작성언어를 영어로 설정후 검색->데이터 100개씩 출력 정렬->데이터 내보내기->excel로 저장+간략정보 선택
2.데이터 준비
데이터를 전처리 하기전 다양한 패키지들을 import 한다.
import pandas as pd
import glob #경로와 이름을 지정하여 파일을 다룸
import re #메타문자를 이용하여 정규식을 작성
import nltk
from functools import reduce # 2차원 리스트를 1차원 리스트로 줄임
from nltk.tokenize import word_tokenize #토큰화 작업 수행
from nltk.corpus import stopwords #불용어 정보를 제공
from nltk.stem import WordNetLemmatizer #표제어 추출을 제공
from collections import Counter # 집합에서 갯수를 계산
import matplotlib.pyplot as plt
from wordcloud import STOPWORDS, WordCloud
tmp=glob.glob('data/myCabinetExcelData*.xls')
data=[]
for i in tmp:
df=pd.read_excel(i)
data.append(df)
data=pd.concat(data,ignore_index=True)
data
[01행]: glob패키지를 이용해서 해당경로에 있는 파일 로드/
파일명이 전부 myCabinetExcelData으로 시작하므로 myCabinetExcelData*을 통해 모두 불러옴
[02~5행]: glob에 저장된 파일들을 모두 excel형태로 불러온뒤에 데이터프레임 형태로 저장.
[06행]: 각 100개씩 저장되어있는 데이터프레임을 세로축 기준으로 concat
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('wordnet')
stopWords=set(stopwords.words('english'))
lemma=WordNetLemmatizer()
[01~03행]: nltk패키지에 있는 모듈을 쓰기위해 다운받아준다.
[04행]: 불용어셋을 다운받아준다.
[05행]:lemma라는 변수에 표제어 추출을 위한 함수를 넣어준다.
all_title=data['제목']
words=[]
for title in all_title:
EnWords=re.sub(r"[^a-zA-Z]+"," ",str(title))
EnWordsToken=word_tokenize(EnWords.lower())
EnWordsTokenStop=[w for w in EnWordsToken if w not in stopWords]
EnWordsTokenStopLemma=[lemma.lemmatize(w) for w in EnWordsTokenStop]
words.append(EnWordsTokenStopLemma)
words=list(reduce(lambda x,y: x+y, words))
words
[01행]: 1000개의 데이터의 제목에 대한 키워드 분석이 목적이므로 데이터의 title만 가져온다.
[04행]:정규표현식을 이용해서 EnWords에 알파벳으로 시작하지 않는 단어는 공백으로 치환하여 제거
[05행]: 소문자화
[06행]: 불용어 집합에 없는 단어들만 추가
[07행]; 표제어 추출을 실시
[08행];2차원 리스트를 1차원 리스트로 변환
3.데이터 탐색 및 분석 모델 구축
분석모델을 적용하기 전에 단어의 빈도수를 확인해본다.
count=Counter(word)
word_count=dict()
for tag,counts in count.most_common(50):
if(len(str(tag))>1):
word_count[tag]=counts
word_count
[01행]: word에 있는단어들의 단어별 출현 빈도수 출력
[03행]: 출현횟수가 많은 상위 50개 단어를 불러들임(count.most_common)
[04,05행]: 단어의 길이가 1보다 크면 딕셔너리에 저장
단어의 빈도수를 시각적으로 쉽게 확인해보자.
sorted_keys=sorted(word_count,key=word_count.get,reverse=True)
sorted_values=sorted(word_count.values(),reverse=True)
plt.bar(range(len(word_count)),sorted_values,align='center')
plt.xticks(range(len(word_count)),list(sorted_keys),rotation='85')
plt.show()
[01행]:딕셔너리에서 x축 값으로 사용될 sorted_keys(단어) 저장
[02행]:딕셔너리에서 y축값으로 사용될 sorted_values(단어 빈도수) 저장
4.결과 시각화
시각화전 연도별 학술문서 수를 추출하여 그래프를 그려본다.
data['doc_count']=0
year=data.groupby('출판일',as_index=False)['doc_count'].count()
year
plt.figure(figsize=(12,5))
plt.xlabel('year')
plt.ylabel('doc_count')
plt.grid(True)
plt.plot(range(len(year)),[text for text in year['출판일']])
plt.show()
마지막으로 워드클라우드를 그려보자.
wc=WordCloud(background_color='ivory',stopwords=stopWords,width=800,height=600)
cloud=wc.generate_from_frequencies(word_count)
plt.figure(figsize=(8,8))
plt.imshow(cloud)
plt.axis('off')
plt.show()
[01행]:워드클라우드의 배경을 설정해주고, 불용어를 설정해줌으로써 워드클라우드 객체를 생성
[02행] :워드클라우드 객체에 데이터를 담아서 cloud라는 객체 생성
이렇게 회귀분석 모델을만든뒤에 품질을 예측하기 위해서는 독립변수인 11개의 속성에 대한 샘플데이터가 필ㅇ하다. 우선 임의의 샘플을 만들어서 예측을 해보자.
5.결과 분석
워드클라우드 생성 결과 big과 data라는 단어가 가장 많이 나왔는데, 이는 우리가 데이터를 다운받을 때 bog data라는 검색어를 통해서 1000개의 데이터를 다운받았기 때문에 어찌보면 당연한 결과이다. 따라서 big과 data라는 단어는 많이 나오는게 당연하므로 word_count 딕셔너리를 만들 때 이 두단어를 제외하면, 좀더 유익하고 실용적인 결과를 얻을 수 있을 것 같다.
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 9 (1) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 8 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 6 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 5 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 4 (0) | 2023.10.26 |