소개
collections 모듈은 데이터 처리에 유용한 여러 객체를 제공합니다. 이 부분에서는 이러한 기능 중 일부를 간략하게 소개합니다.
collections 모듈은 데이터 처리에 유용한 여러 객체를 제공합니다. 이 부분에서는 이러한 기능 중 일부를 간략하게 소개합니다.
각 주식의 총 주식 수를 표로 만들고 싶다고 가정해 봅시다.
portfolio = [
('GOOG', 100, 490.1),
('IBM', 50, 91.1),
('CAT', 150, 83.44),
('IBM', 100, 45.23),
('GOOG', 75, 572.45),
('AA', 50, 23.15)
]
이 목록에는 두 개의 IBM 항목과 두 개의 GOOG 항목이 있습니다. 주식 수를 어떻게든 합쳐야 합니다.
해결책: Counter를 사용합니다.
from collections import Counter
total_shares = Counter()
for name, shares, price in portfolio:
total_shares[name] += shares
total_shares['IBM'] ## 150
문제: 키를 여러 값에 매핑하고 싶습니다.
portfolio = [
('GOOG', 100, 490.1),
('IBM', 50, 91.1),
('CAT', 150, 83.44),
('IBM', 100, 45.23),
('GOOG', 75, 572.45),
('AA', 50, 23.15)
]
이전 예제와 마찬가지로, 키 IBM은 대신 두 개의 서로 다른 튜플을 가져야 합니다.
해결책: defaultdict를 사용합니다.
from collections import defaultdict
holdings = defaultdict(list)
for name, shares, price in portfolio:
holdings[name].append((shares, price))
holdings['IBM'] ## [ (50, 91.1), (100, 45.23) ]
defaultdict는 키에 접근할 때마다 기본값을 얻도록 보장합니다.
문제: 마지막 N 개의 항목에 대한 기록을 원합니다. 해결책: deque를 사용합니다.
from collections import deque
history = deque(maxlen=N)
with open(filename) as f:
for line in f:
history.append(line)
...
collections 모듈은 표 작성 및 인덱싱과 같은 특수 목적의 데이터 처리 문제를 다루는 데 가장 유용한 라이브러리 모듈 중 하나일 수 있습니다.
이 연습에서는 몇 가지 간단한 예제를 살펴보겠습니다. 대화형 모드에서 주식 포트폴리오가 로드되도록 report.py 프로그램을 실행하여 시작합니다.
$ python3 -i report.py
각 주식의 총 주식 수를 표로 만들고 싶다고 가정해 봅시다. Counter 객체를 사용하면 쉽습니다. 시도해 보세요:
>>> portfolio = read_portfolio('portfolio.csv')
>>> from collections import Counter
>>> holdings = Counter()
>>> for s in portfolio:
holdings[s['name']] += s['shares']
>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>>
portfolio에서 MSFT와 IBM에 대한 여러 항목이 어떻게 여기에 단일 항목으로 결합되는지 주의 깊게 살펴보세요.
개별 값을 검색하기 위해 Counter 를 사전처럼 사용할 수 있습니다:
>>> holdings['IBM']
150
>>> holdings['MSFT']
250
>>>
값을 순위별로 정렬하려면 다음과 같이 하세요:
>>> ## Get three most held stocks
>>> holdings.most_common(3)
[('MSFT', 250), ('IBM', 150), ('CAT', 150)]
>>>
다른 주식 포트폴리오를 가져와서 새로운 Counter 를 만들어 봅시다:
>>> portfolio2 = read_portfolio('portfolio2.csv')
>>> holdings2 = Counter()
>>> for s in portfolio2:
holdings2[s['name']] += s['shares']
>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>>
마지막으로, 간단한 연산을 수행하여 모든 보유 주식을 결합해 봅시다:
>>> holdings
Counter({'MSFT': 250, 'IBM': 150, 'CAT': 150, 'AA': 100, 'GE': 95})
>>> holdings2
Counter({'HPQ': 250, 'GE': 125, 'AA': 50, 'MSFT': 25})
>>> combined = holdings + holdings2
>>> combined
Counter({'MSFT': 275, 'HPQ': 250, 'GE': 220, 'AA': 150, 'IBM': 150, 'CAT': 150})
>>>
이것은 Counter 가 제공하는 기능의 작은 맛보기일 뿐입니다. 하지만 값을 표로 만들어야 할 경우, Counter 사용을 고려해야 합니다.
collections 모듈은 Python 전체에서 가장 유용한 라이브러리 모듈 중 하나입니다. 사실, 이에 대한 확장된 튜토리얼을 진행할 수도 있습니다. 하지만 지금 그렇게 하는 것은 또한 주의를 산만하게 할 것입니다. 지금은 collections를 나중에 읽을 취침 전 독서 목록에 추가해 두세요.
축하합니다! Collections Module 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.