📈
실습 프로젝트 (Practice) · ★★★★
자동 통계 + 리포트
Lv4 · CSV 데이터 분석 CLI
CSV 파일을 받아 컬럼을 자동 감지 — 숫자는 평균/최대/최소/합계, 문자는 빈도 Top 5. 콘솔과 report.txt 양쪽에 출력합니다.
csvCounter분석
소요 시간
⏱ 3~5시간
난이도
📊 고급 응용
선수 조건
🎯 고급 8주차 (또는 중급 6주차)
결과물
표준 라이브러리만으로 데이터 분석
이 강의에서 배우는 것
- 1csv.DictReader 로 CSV 읽기
- 2컬럼별 데이터 타입 자동 감지
- 3Counter 로 문자열 빈도 집계
프로젝트 개요
- 사용법: python solution.py sales.csv
- 숫자 컬럼: 평균/최대/최소/합계
- 문자 컬럼: 빈도 Top 5
- 결과를 콘솔과 report.txt 양쪽 출력
도전 과제
- 필터 옵션 (--column price --min 10000)
- matplotlib PNG 차트
채점 체크리스트
- 타입 자동 감지
- 리포트 파일 생성
- 에러 안전
💻 예제 (examples)
실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.
solution.py— 전체 동작 코드
CODE
"""CSV 자동 분석 — 표준 csv 모듈만 사용"""
import csv
import sys
from collections import Counter
from pathlib import Path
def is_number(s):
try:
float(s); return True
except ValueError:
return False
def analyze(path):
with open(path, encoding="utf-8") as f:
reader = csv.DictReader(f)
rows = list(reader)
cols = reader.fieldnames
if not rows:
return ["(빈 파일)"]
out = [f"[행 수] {len(rows)}"]
for col in cols:
values = [r[col] for r in rows if r[col] != ""]
if not values: continue
if all(is_number(v) for v in values):
nums = [float(v) for v in values]
out.append(f"\n[숫자: {col}]")
out.append(f" 평균: {sum(nums) / len(nums):,.2f}")
out.append(f" 최대: {max(nums):,.2f}")
out.append(f" 최소: {min(nums):,.2f}")
out.append(f" 합계: {sum(nums):,.2f}")
else:
counter = Counter(values)
out.append(f"\n[문자: {col}]")
for val, cnt in counter.most_common(5):
out.append(f" {val:<20} {cnt:>6}")
return out
def main():
if len(sys.argv) != 2:
print("사용법: python solution.py <csv 파일>")
sys.exit(1)
path = Path(sys.argv[1])
if not path.exists():
print(f"파일 없음: {path}")
sys.exit(1)
result = analyze(path)
text = "\n".join(result)
print(text)
Path("report.txt").write_text(text, encoding="utf-8")
print("\nreport.txt 저장됨")
if __name__ == "__main__":
main()▶ 실행 결과
[행 수] 4
[문자: name]
Alice 1
Bob 1
Charlie 1
Dave 1
[숫자: score]
평균: 80.50
최대: 92.00
최소: 67.00
합계: 322.00
report.txt 저장됨📝 과제 (exercises)
직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.
과제 1
프로젝트 구현
목표: 위 사양대로 직접 작성한다.
요구사항
- csv.DictReader
- 타입 자동 감지
- report.txt 생성
💡 힌트
all(is_number(v) for v in values) 로 숫자 컬럼 판별
입출력 예시
report.txt 저장됨채점
- · 타입 감지
- · 리포트 생성
▶정답 코드 펼치기 / 접기
SOLUTION
# 위 solution.py 와 동일▶ 실행 결과
(예제 참고)