반응형
defaultdict(list)의 활용을 중심으로 한 CSV 데이터 처리와 시각화 기초입니다. 아래에 핵심 개념, 사용 이유, 활용 예제, 결과 해석, 그리고 실무 응용 포인트를 강조해 정리해 드릴게요.
✅ 오늘 학습의 핵심 요약: defaultdict(list)와 기온 데이터 분석
✅ 1. 핵심 개념: collections.defaultdict(list)
- 정의: 키가 없을 경우 자동으로 [](빈 리스트)를 기본값으로 생성하는 딕셔너리
- 형식:
from collections import defaultdict
data = defaultdict(list)
- 중요 이유:
- 일반 딕셔너리에서는 키가 존재하지 않으면 KeyError 발생
- defaultdict는 키가 없을 때 자동으로 생성 → 예외 처리 필요 없음
- 리스트를 값으로 사용하는 경우, 데이터 그룹핑이 매우 간편
✅ 2. 실습 목표: 날짜별 최고 기온(TMAX)을 묶고 시각화
✔ CSV 예시 데이터 (sitka_weather_2021_simple.csv)
DATET | MAX |
2021-01-01 | 44 |
2021-01-02 | 44 |
... | ... |
✔ defaultdict(list)로 처리하면 다음과 같은 구조가 됨:
{
datetime.date(2021, 1, 1): [44.0],
datetime.date(2021, 1, 2): [44.0],
...
}
✅ 3. 핵심 코드 흐름
from collections import defaultdict
tmax_by_date = defaultdict(list)
# 파일 읽고, 날짜별 최고기온 누적
for row in reader:
date = datetime.strptime(row['DATE'], '%Y-%m-%d')
tmax = float(row['TMAX'])
tmax_by_date[date].append(tmax)
- tmax_by_date[date].append(tmax)
👉 같은 날짜가 여러 번 등장해도 자동으로 리스트에 추가됨
✅ 4. 시각화 결과: matplotlib
plt.plot(sorted_dates, tmax_values)
- x축: 날짜
- y축: 평균 TMAX 값
- 시계열 데이터가 잘 정렬되어 기온의 추세 확인 가능
📈 결과: S자형, 계절성 있는 곡선 → 기온 변화가 시각적으로 확인됨
✅ 5. 실무 응용 포인트
분야 | 적용 방식 |
데이터 분석 | 특정 키(날짜, 지역 등)별로 값 그룹화 |
기상 데이터 | 날짜별 기온, 강수량 등 다중 값 정리 |
로그 분석 | 사용자별, 시간대별 이벤트 수집 및 그룹핑 |
웹 크롤링 | 카테고리별 기사, 태그별 게시물 수집 |
머신러닝 전처리 | 라벨별 데이터 분할, K-fold 샘플 분리 등 |
✅ 예제 코드: defaultdict(list)를 활용한 날짜별 TMAX 정리 및 시각화
import csv
from collections import defaultdict
from datetime import datetime
import matplotlib.pyplot as plt
- 필요한 모듈 불러오기:
- csv: CSV 파일 파싱
- defaultdict: 리스트 자동 생성 딕셔너리
- datetime: 문자열을 날짜로 변환
- matplotlib.pyplot: 시각화 도구
file_path = 'weather_data/sitka_weather_2021_simple.csv'
- CSV 파일 경로 정의
tmax_by_date = defaultdict(list)
- 날짜(date)를 키로 하고, 그 날짜의 TMAX 값들을 리스트로 저장하는 딕셔너리
- 키가 없어도 자동으로 빈 리스트 생성됨
with open(file_path, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
- csv.DictReader는 각 행을 딕셔너리(dict) 형태로 반환해줍니다.
예: {'DATE': '2021-01-01', 'TMAX': '44', ...}
with open(file_path, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
- 날짜를 문자열 → datetime 객체로 변환 (strptime)
- TMAX 값을 float으로 바꾸고, 해당 날짜에 추가
- 오류 있는 행은 무시 (ValueError 처리)
# 시각화를 위한 정렬
sorted_dates = sorted(tmax_by_date.keys())
tmax_values = [sum(tmax_by_date[date])/len(tmax_by_date[date]) for date in sorted_dates]
- 날짜 기준 정렬
- 각 날짜의 최고기온 평균값을 계산하여 리스트로 변환
plt.figure(figsize=(12, 5))
plt.plot(sorted_dates, tmax_values, label='TMAX (°F)', color='tomato')
plt.title('📈 2021년 날짜별 최고기온(TMAX)', fontsize=14)
plt.xlabel('날짜')
plt.ylabel('최고기온 (°F)')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
- 그래프 크기 설정, 선 그래프 그리기
- 제목, 축 라벨, 범례, 그리드, 여백 조정
- 최종적으로 그래프 출력
🔍 결과 예시: 그래프 설명
- x축: 2021년의 날짜들
- y축: 해당 날짜의 최고기온
- 그래프가 시간에 따라 상승/하강하는 패턴 → 계절성 확인 가능
반응형
'데이터 사이언스 코딩 > Python 프로그래밍' 카테고리의 다른 글
정규분포 통계 머신러닝 표준정규분포 확률밀도함수 평균 표준편차 시각화 데이터샘플링 히스토그램 (0) | 2025.07.09 |
---|---|
이터레이터(iterator) 메모리 효율성과 속도 스트리밍 처리 대규모 데이터 다루기 (0) | 2025.07.03 |
.format() 포멧 python 파이썬 print 프린트 (0) | 2025.06.19 |
얕은복사 깊은복사 참조변수 사본전달 원본전달 shallow copy deep copy (1) | 2025.06.18 |
python 파이썬 변수 데이터 타입 확장형for문 pop remove append insert (0) | 2025.06.18 |