1. Counter — 토큰/클래스 빈도 분석, 통계 기반 전처리
- 자연어 처리(NLP)에서 단어 빈도(Word Frequency) 계산
- 분류(Classification) 문제에서 클래스 불균형 확인
from collections import Counter
# 예: 토큰 빈도 계산
tokens = ["apple", "banana", "apple", "grape", "banana", "apple"]
word_freq = Counter(tokens)
print(word_freq.most_common(2)) # [('apple', 3), ('banana', 2)]
# 예: 데이터셋 클래스 비율 확인
labels = ["cat", "dog", "cat", "bird", "cat", "dog"]
label_dist = Counter(labels)
for cls, cnt in label_dist.items():
print(f"{cls}: {cnt/len(labels):.2%}")
✅ 활용 포인트
- 토큰 출현 확률(P(word)) 계산 → 언어 모델 확률분포에 사용
- 클래스 imbalance 체크 후 가중치(weighted loss) 조정
- TF-IDF 전처리 시 빈도 기반 정규화 계산
2. deque — 실시간 데이터 스트림·슬라이딩 윈도우 버퍼
- 영상/음성/센서 데이터를 최근 N개만 유지하며 스트림 처리
- 실시간 추론에서 FPS 고정 or moving average 계산
from collections import deque
import numpy as np
# 최근 30프레임만 유지하는 슬라이딩 윈도우 버퍼
window = deque(maxlen=30)
for frame in stream_generator(): # 예: 실시간 카메라 프레임
value = model.predict(frame)
window.append(value)
# 최근 30프레임 평균값으로 smoothing
smoothed = np.mean(window)
print(f"Smoothed output: {smoothed:.2f}")
✅ 활용 포인트
- O(1)로 양끝 삽입/삭제 가능 → FPS 고정 루프에서 효율적
- LSTM, RNN 등에서 시퀀스 윈도우 관리에 자주 사용됨
- 실시간 anomaly detection에서도 sliding window 기반 통계 계산
3. defaultdict — 그룹화, 임시 캐시, 파이프라인 중간 결과 저장
- 데이터셋을 특정 기준으로 그룹핑 (e.g., 클래스별 샘플)
- 전처리 단계에서 중간 캐시 생성
from collections import defaultdict
samples = [
("cat", "img001.jpg"),
("dog", "img002.jpg"),
("cat", "img003.jpg"),
("bird", "img004.jpg"),
]
grouped = defaultdict(list)
for label, path in samples:
grouped[label].append(path)
print(grouped["cat"]) # ['img001.jpg', 'img003.jpg']
✅ 활용 포인트
- 데이터 로더(DataLoader) 전 단계에서 클래스별 파일 분류
- 학습 로그나 실험 결과를 태그별로 자동 그룹핑
- json이나 yaml 구성 파싱 시 누락 키에 안전한 초기화
4. OrderedDict — 모델 레이어 순서, LRU 캐시, 설정 트래킹
- PyTorch에서 모델 레이어 순서 보존 (nn.Sequential)
- 최근 사용된 결과 캐싱(LRU)
- 실험 설정(config) 순서를 명시적으로 기록
from collections import OrderedDict
import torch.nn as nn
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(3, 16, 3, padding=1)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(16, 32, 3, padding=1)),
('relu2', nn.ReLU())
]))
print(model)
✅ 활용 포인트
- 모델 정의 순서가 정확히 일치해야 reproducibility 확보
- 학습 로그나 설정 저장 시 순서 보존이 중요할 때
- OrderedDict.move_to_end() 활용 → 캐시, 최근 접근 관리
5. ChainMap — 다중 설정(environment + config + override)
AI 프로젝트는 여러 환경(config) 파일을 계층적으로 관리
(예: defaults.yaml, local.yaml, args, env)
from collections import ChainMap
import os
defaults = {'batch_size': 32, 'lr': 0.001}
user_cfg = {'lr': 0.0005}
env_cfg = {'batch_size': int(os.getenv('BATCH', 64))}
config = ChainMap(env_cfg, user_cfg, defaults)
print(config['batch_size']) # 환경 변수 > 사용자 > 기본값 순서
✅ 활용 포인트
- 모델 학습 설정 우선순위 관리
- 실험 파라미터 병합 시 충돌 최소화
- Hydra, OmegaConf 같은 config 라이브러리의 핵심 개념과 동일
6. namedtuple — lightweight 데이터 구조 (벡터, 설정, 예측 결과)
- 딥러닝 inference 결과를 (label, score, bbox) 등으로 관리
- 벡터/포인트 데이터 구조 표현
from collections import namedtuple
Prediction = namedtuple('Prediction', ['label', 'score', 'bbox'])
preds = [
Prediction('cat', 0.97, (10, 20, 100, 200)),
Prediction('dog', 0.83, (30, 40, 120, 240))
]
for p in preds:
print(f"{p.label}: {p.score*100:.1f}%")
✅ 활용 포인트
- 객체 생성 오버헤드 없이 가벼운 구조체처럼 사용
- PyTorch Dataset/Batch 내에서 sample 구조 관리
- 불변이므로 멀티프로세싱(shared memory)에서도 안전
요약표
| 자료구조 | 활용 분야 | 대표 예시 |
| Counter | NLP, 데이터 통계 | 단어/클래스 빈도, TF-IDF |
| deque | 실시간 처리, 슬라이딩 윈도우 | FPS smoothing, stream buffer |
| defaultdict | 데이터 그룹화, 캐시 | 클래스별 샘플 분류 |
| OrderedDict | 모델 정의, 캐시 | nn.Sequential, LRU cache |
| ChainMap | 설정 병합 | config/환경변수 통합 |
| namedtuple | 경량 데이터 구조 | 예측 결과, 좌표, 설정 |
'공부 > 자료구조,알고리즘_python' 카테고리의 다른 글
| bisect 이진탐색 모듈 (0) | 2025.10.23 |
|---|---|
| [순차탐색] in 연산자 시간복잡도 비교 (0) | 2025.10.23 |
| 1. 파이썬 고급 자료구조 collections (0) | 2025.10.22 |