on
[Python] 테스트빈도 분석1 - 영어단어분석 프로젝트(불용어(stopword...
[Python] 테스트빈도 분석1 - 영어단어분석 프로젝트(불용어(stopword...
728x90
1. 영어 단어 분석에 필요한 패키지 준비
- 자바 설치
- Jpype , KoNLPy, Tweepy, wordcloud 라이브러리 설치
import pandas as pd
import glob
import re
from functools import reduce
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 WordCloud, STOPWORDS
2. 데이터 준비
2.1)엑셀 파일 여러개를 병합하기.
뒤에 붙은 숫자만 다른 파일 여러개를 한번에 병합해서 영어단어를 분석해보겠습니다.
# glob 라이브러리를 사용하면 사용자가 지정한대로 파일을 가져올 수 있음
# *는 임의의 길이의 모든 문자열을 뜻하기때문에 숫자가 다른 파일을 한번에 가져올수 있음.
all_files = glob.glob('./8장_data/myCabinetExcelData*.xls')
all_files 출력해보면 아래와 같이 파일을 리스트 형태로 가져옴.
['./8장_data/myCabinetExcelData (4).xls', './8장_data/myCabinetExcelData (8).xls', './8장_data/myCabinetExcelData (9).xls', './8장_data/myCabinetExcelData (5).xls', './8장_data/myCabinetExcelData (2).xls', './8장_data/myCabinetExcelData (3).xls', './8장_data/myCabinetExcelData (1).xls', './8장_data/myCabinetExcelData (6).xls', './8장_data/myCabinetExcelData.xls', './8장_data/myCabinetExcelData (7).xls']
2.2) 리스트로 담긴 파일들을 데이터 프레임 형태로 읽어서 리스트에 저장하기
all_files_data = []
for file in all_files:
data_frame = pd.read_excel(file)
all_files_data.append(data_frame)
all_files_data[0]
3. nltk 라이브러리 사용해서 불용어 제거, 표제어 추출하기
StopWord (불용어) 갖고 있는 데이터에서 유의미한 단어 토큰만을 선별하기위해서 큰 의미가 없는 단어는 제거하는 작업. 큰 의미가 없다는 것은 자주 등장하지만 의미를 분석하는데 큰 영향을 미치지않는 것들. NLTK에서는 100개이상의 영어단어들을 불용어로 패키지내에서 정의해놓았음.
(불용어)
3.1) 불용어를 확인하는 방법
['Family', 'is', 'not', 'an', 'important', 'thing', '.', 'It', "'s", 'everything', '.'] 불용어 제거후: ['Family', 'important', 'thing', '.', 'It', "'s", 'everything', '.']
3.2) 표제어 추출
표제어 추출은 단어들이 다른 형태를 가지더라도, 그 뿌리 단어를 찾아가서 단어의 개수를 줄일 수 있는지 판단하는것.
am,are,is는 서로 다른 스펠링이지만 뿌리 단어는 be 이고, 이 단어들의 표제어가 be이다.
# 단어를 표제어로 바꿔주는 예제
['policy', 'doing', 'organization', 'have', 'going', 'love', 'life', 'fly', 'dy', 'watched', 'ha', 'starting']
이제 방법을 익혔으니 프로젝트에 적용해보겠습니다.
엑셀 파일 데이터 중 제목을 단어 토큰화, 표제어로 바꾸고 불용어를 제거해보겠습니다.
all_title = all_files_data_concat['제목']
stopWords = set(stopwords.words("english"))
lemma = WordNetLemmatizer()
알파벳이 아닌 단어는 공백으로 치환
- re.sub(r"[^a-xA-Z]+"," ",str(title))
소문자로 정규화하고, 문장형태인 제목 데이터를 단어형식으로 토큰화
- word_tokenize(Enwords.lower())
불용어 제거
- [w for w in EnWordsToken if w not in stopWords]
표제어로 바꾸기
- [lemma.lemmatize(w) for w in EnWordsTokenStop]
이렇게 데이터를 담게되면 2차원 리스트로 담긴다.
2 차원 리스트를 1차원으로 바꿔주기 위해 아래 코드를 실행한다.
words2 = list(reduce(lambda x, y: x+y,words))
4. 데이터 탐색
4.1) 단어 빈도 검색
출력해보면 단어 : 카운트값 으로 출력이 된다.
이걸 딕셔너리 형태로 바꿔주기위해 아래 코드 실행
word_count = dict()
4.2) 출력 횟수 많은 상위 50개 단어
이제 그래프로 표현해볼껀데 데이터가 가장 많은 단어는 제거해주기
del word_count['big']
del word_count['data']
5. 단어 빈도 히스토그램 그리기
6. 단어 빈도수를 가지고 워드 클라우드 그리기
generate_from_frequencies : 미리 정의된 단어의 빈도수 를 이용하여 워드 클라우드를 그림.
실행할때마다 단어의 위치는 바뀜!
# 워드클라우드 파일로 저장하기
cloud.to_file("8장_data/riss_bigdata_wordCloud.jpg")
from http://eungu25.tistory.com/73 by ccl(A) rewrite - 2021-12-11 11:01:35