엘리스에서 제공하는 파이썬 실전 데이터 분석 강의 중
두 번째 주제인 영어 단어 모음으로 시작하는 텍스트 파일 분석 리뷰 하겠습니다.
1. 주제
- 두 번째 프로젝트에서는 영어 단어와 그 빈도수를 정리한 British National Corpus 단어 모음을 분석하고 시각화해봅니다.
- corpus.txt를 이용해 가장 많이 사용된 영어 단어 분석
- matplotlib을 이용해 단어 별 사용 빈도를 보여주는 막대그래프 작성
- 가장 많이 등장하는 단어의 분포
- 불용어를 제외하고 가장 많이 사용된 단어
2. 필자가 해야 하는 것
- import_corpus(filename) 함수 구현
- create_corpus(filenames) 함수 구현
- filter_by_prefix(corpus, prefix) 함수 구현
- most_frequent_words(corpus, number) 함수 구현
3. import_corpus(filename) 세부 구현 사항
- 목적 : 코퍼스 파일을 읽어 리스트로 변환하는 함수
- 단어와 빈도수 데이터가 담긴 파일 한 개를 불러온 후, (단어, 빈도수) 꼴의 튜플로 구성된 리스트를 반환합니다.
def import_corpus(filename):
# 튜플을 저장할 리스트를 생성합니다.
corpus = []
with open(filename) as file: # 파일 한개 처리
for line in file:
split = line.strip().split(',') # 줄바꿈 제거(strip)과 ,를 기준으로 split
word = split[0] # 단어 저장
freq = split[1] # 빈도수 저장
newtuple = (word,int(freq)) # 빈도수는 나중에 최고 빈도수를 찾기 위해서
# sort를 하는데 문자열로 되어있으면 sort가 잘 되지 않아서 int형으로 바꿔준다.
corpus.append(newtuple)
# 텍스트 파일의 각 줄을 (단어, 빈도수) 꼴로 corpus에 저장한다.
return corpus
- 실행 예시
import_corpus(filename)
- 결과
실행 예시 결과
- filename이라는 파일에서 (단어, 빈도수) 형태의 튜플로 이뤄진 리스트를 반환받는다.
4. create_corpus(filenames) 세부 구현 사항
- 목적 : 텍스트 파일 여러 개를 한 번에 불러온 후, (단어, 빈도수) 꼴의 튜플로 구성된 리스트를 반환합니다.
즉, 텍스트 파일을 읽어 들여 튜플 꼴의 리스트 형태로 만드는 함수입니다.
def create_corpus(filenames):
# 단어를 저장할 리스트를 생성한다.
words = []
# 여러 파일에 등장하는 모든 단어를 모두 words에 저장한다.
for filename in filenames:
with open(filename) as file:
content = file.read()
# 문장부호를 포함한 모든 특수기호를 제거한다.
for symbol in punctuation:
content = content.replace(symbol,"") # 특수기호 삭제
words = words + content.split() # 특수문자가 지워진 content에 공백을 기준으로 split 하면 단어들이 출력
# words 리스트의 데이터를 corpus 형태로 변환합니다. 카운터 함수 부가 설명 필요
corpus = Counter(words)
return list(corpus.items())
- 실행 예시
create_corpus(filenames)
- words 결과
- corpus 결과
- words의 결과를 보면 여러 파일에 들어가 있는 단어들을 모두 존재하는 리스트로 반환된다.
- corpus의 경우 Counter함수를 통해 단어:단어의 빈도수 형태로 딕셔너리로 반환된다.
- Counter 함수
from collections import Counter
Counter('hello world') # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
5. filter_by_prefix(corpus, prefix) 세부 구현 사항
- 목적 : (단어, 빈도수) 꼴의 튜플들을 담고 있는 리스트의 형태로 주어지는 corpus의 데이터 중 특정 문자열 prefix로 시작하는 단어 데이터만 추린 리스트를 반환합니다.
def filter_by_prefix(corpus, prefix):
return [n for n in corpus if n[0].startswith(prefix)] # 리스트 컴프리헨션을 사용한 연산이다.
# n[0]는 문자열을 나타내고 startswith 함수를 통해 문자열에 prefix로 시작하는 문자열과 빈도수만 반환하는 함수이다.
- 실행 예시
filter_by_prefix(corpus, "qu")
- 결과(if prefix = "qu")
- 리스트 컴프리헨션과 startswith를 사용하면 쉽게 조건문에 해당하는 항목들을 출력할 수 있다.
6. most_frequent_words(corpus, number) 세부 구현 사항
- 목적 : corpus의 데이터 중 가장 빈도가 높은 number개의 데이터만 추립니다.
def most_frequent_words(corpus, number):
corpus = sorted(corpus, key = lambda x : x[1], reverse=True) # corpus[1](-> 빈도수)를 기준으로 내림차순 정렬 후
# 인덱스 슬라이싱을 이용해 number만큼 반환한다.
return corpus[:number]
- 실행 예시
most_frequent_words(corpus, 3)
- 결과(if number = 3)
- sorted 함수(lambda의 활용)와 리스트 슬라이싱을 이용하면 가장 높은 빈도순으로 출력할 수 있다.
7. 결과
![]() |
![]() |
![]() |
※ 엘리스가 제공한 학습 자료, 콘텐츠의 저작권은 엘리스에 있습니다.
※ COPYRIGHT 2016-2022. ELICE ALL RIGHTS RESERVED.
'Data Projects > mini 데이터 분석 프로젝트' 카테고리의 다른 글
[데이터 분석 스터디/항공사 고객 만족도 예측] 항공사 고객 만족도 예측 보충 EDA + 전처리 + 학습 (0) | 2022.02.11 |
---|---|
[데이터 분석 스터디/항공사 고객 만족도 예측] 항공사 고객 만족도 예측 EDA (0) | 2022.02.08 |
[데이터 분석 스터디] 03 넷플릭스 시청 데이터로 알아보는 데이터형 변환 (0) | 2022.01.29 |
[데이터 분석 스터디] 01 트럼프 대통령 트윗으로 시작하는 데이터 처리 (0) | 2022.01.28 |
댓글