1 collection 모듈

파이썬 표준 라이브러리에 collection 모듈이 내장(built-in)되어 있다. 자료구조 - 리스트, 튜플, 딕셔너리가 범용 데이터 사이언스 자료구조라면 다음 collection 모듈에 포함되어 있는 몇몇 자료구조는 익히게 되면 도움이 될 수 있다.

  • Counter: 해쉬객체를 개수하는 딕셔너리
  • defaultdict: 딕셔너리로 팩토리 함수를 호출할 수 있음.
  • deque
  • namedtuple
  • OrderedDict

2 Counter 빈도수 세기

collections 모듈에는 흔히 사용되는 기능 중 하나인 Counter 도구가 포함되어 있다. 예를 들어, 리스트에 들어있는 단어 중 가장 빈도가 많은 것은 무엇인지 Counter() 객체를 생성한 후에 for 루프를 돌려 간단하게 계산해 낼 수 있다.

from collections import Counter

cnt = Counter()

words = ['red', 'blue', 'red', 'green', 'blue', 'blue']

for word in words:
    cnt[word] += 1
    
cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

.most_common() 메쏘드를 사용하게 되면 가장 빈번한 단어를 내림차순으로 찾아낼 수도 있다.

cnt.most_common(1)
[('blue', 3)]

2.1 소설 단어 빈도수

윈도우 시작버튼을 누르고 Anaconda3 (64-Bit) 아래 Anacoda Prompt 터미널을 열고 python을 실행한 후에 import nltk를 입력한 후에 순차적으로 nltk.download('gutenberg') 명령어를 실행시켜 구텐베르그 프로젝트에 등록된 문학작품을 다운로드 받는다.

(base) C:\Users\사용자명> python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> nltk.download('gutenberg')
[nltk_data] Downloading package gutenberg to
[nltk_data]     C:\Users\사용자\AppData\Roaming\nltk_data...
[nltk_data]   Unzipping corpora\gutenberg.zip.
True

Free eBooks - Project Gutenberg 웹사이트에서 모비딕(melville-moby_dick.txt) 소설책을 다운로드 받는다. 그리고 나서 re.findall() 메쏘드를 사용해서 단어를 추출한다. Counter(words)를 호출해서 가장 빈도수가 높은 단어 10개를 추출해낸다.

from nltk.corpus import gutenberg
gutenberg.fileids()
['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt', 'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt', 'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt']
moby_dick = gutenberg.open('melville-moby_dick.txt').read()

import re
words = re.findall('\w+', moby_dick.lower())
Counter(words).most_common(10)
[('the', 14431), ('of', 6609), ('and', 6430), ('a', 4736), ('to', 4625), ('in', 4172), ('that', 3085), ('his', 2530), ('it', 2522), ('i', 2127)]

3 itertools 모듈

itertools 모듈도 파이썬 표준 라이브러리의 한축을 이루고 있으며 반복자(iterator)를 생성하고 사용하는데 큰 도움이 된다.

  • 조합 생성자: product, permutations, combinations
  • 유한 반복자: accumulate, chain, zip_longest
  • 무한 반복자: count, cycle, repeat
from itertools import combinations

dataframe_types = ['Integer', 'Numeric', 'Character', 'Factor']

dataframe_combo = combinations(dataframe_types, 2)

dataframe_combos = [*dataframe_combo]
print(dataframe_combos)
[('Integer', 'Numeric'), ('Integer', 'Character'), ('Integer', 'Factor'), ('Numeric', 'Character'), ('Numeric', 'Factor'), ('Character', 'Factor')]