본문 바로가기
데이터 사이언스 코딩/Python 프로그래밍

데이터전처리 시계열데이터 기온시각화 pandas csv defaultdict

by 윤슬새벽 2025. 7. 9.
반응형

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축: 해당 날짜의 최고기온
  • 그래프가 시간에 따라 상승/하강하는 패턴 → 계절성 확인 가능
 

반응형