Repository navigation
Expand file tree
/
Copy pathtest1.py
More file actions
79 lines (65 loc) · 2.32 KB
/
Copy pathtest1.py
File metadata and controls
79 lines (65 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
'''''
문제. step08_file/data/scores.csv 를 읽어 아래를 구하세요.
단, 직접 세거나 계산하지 말고 표준 라이브러리를 활용하세요.
1. statistics 로 전체 평균·중앙값·표준편차
2. collections.defaultdict 로 학년별 묶기
3. collections.Counter 로 학점 분포
4. json 으로 결과를 저장
--출력--
전체 평균 74.0 / 중앙값 76.16 / 표준편차 15.25
1학년 4명 평균 74.58
2학년 4명 평균 71.75
3학년 4명 평균 75.66
학점 분포 : [('C', 3), ('A', 3), ('F', 3), ('B', 2), ('D', 1)]
summary.json 저장 완료
'''''
import csv
import json
import statistics
from collections import Counter, defaultdict
from pathlib import Path
SUBJECTS = ['국어', '영어', '수학']
CSV_PATH = Path('..') / 'step08_file' / 'data' / 'scores.csv'
OUT_PATH = Path('output') / 'summary.json'
def grade(avg):
if avg >= 90:
return 'A'
elif avg >= 80:
return 'B'
elif avg >= 70:
return 'C'
elif avg >= 60:
return 'D'
return 'F'
with open(CSV_PATH, 'r', encoding='utf-8') as f:
rows = []
for r in csv.DictReader(f):
scores = [int(r[sub]) for sub in SUBJECTS]
avg = round(statistics.mean(scores), 2)
rows.append({'이름': r['이름'], '학년': int(r['학년']),
'평균': avg, '학점': grade(avg)})
# 1. 전체 통계
all_avg = [r['평균'] for r in rows]
print(f'전체 평균 {round(statistics.mean(all_avg), 2)} / '
f'중앙값 {round(statistics.median(all_avg), 2)} / '
f'표준편차 {round(statistics.stdev(all_avg), 2)}')
# 2. 학년별 묶기
by_grade = defaultdict(list)
for r in rows:
by_grade[r['학년']].append(r['평균'])
for g in sorted(by_grade):
print(f'{g}학년 {len(by_grade[g])}명 평균 {statistics.mean(by_grade[g]):.2f}')
# 3. 학점 분포
dist = Counter(r['학점'] for r in rows)
print('학점 분포 :', dist.most_common())
# 4. JSON 저장
OUT_PATH.parent.mkdir(exist_ok=True)
summary = {
'인원': len(rows),
'전체평균': round(statistics.mean(all_avg), 2),
'학년별평균': {str(g): round(statistics.mean(v), 2) for g, v in sorted(by_grade.items())},
'학점분포': dict(dist),
}
with open(OUT_PATH, 'w', encoding='utf-8') as f:
json.dump(summary, f, ensure_ascii=False, indent=2)
print('summary.json 저장 완료')