카테고리 없음

[파이썬] 문제 : 학색 과제의 평균 Chart

오디세이99 2022. 11. 1. 14:15
728x90
반응형

 

import csv
import matplotlib.pyplot as plt

calcu = {}
with open('fake_student_records.csv', mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        total = 0
        hw_cnt = 0
        for k in row.keys():
            if '과제' in k:
                row[k] = int(row[k])
                total += row[k]
                hw_cnt += 1
        row['합계'] = total
        row['평균'] = round(total / hw_cnt,2)
        if row['학번'][:4] in calcu:
            calcu[row['학번'][:4]] += 1
        else:
            calcu[row['학번'][:4]] = 1
        # print(row)

ss = dict(sorted(calcu.items()))        
        
plt.rcParams['font.family'] = 'NanumGothic'
plt.bar(list(ss), list(ss.values()))
plt.title('입학연도별 학생 수', fontsize=16)
plt.xlabel('연도', fontsize=12)
plt.ylabel('명', fontsize=12)
plt.xticks(list(ss), list(ss), fontsize=10)
plt.show()

결과

 

 

학생별 평균 출력

import csv

with open('fake_student_records.csv', mode='r', encoding='utf-8') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader:
        total = 0
        hw_cnt = 0
        tmp = []                              # 과제 점수 보관용 임시 리스트 변수
        for k in row.keys():
            if '과제' in k:
                row[k] = int(row[k])
                total += row[k]
                hw_cnt += 1
                tmp.append(row[k])            # 과제점수 리스트에 추가
        row['합계'] = total
        row['평균'] = round(total / hw_cnt,2)
        tmp.sort()                            # 과제점수 정렬
        s_sum = sum(tmp[2:])                  # 하위 점수 2개 제외해 3번쨰부터 점수 함계
        s_avg = s_sum / len(tmp[2:])          # 합계를 과제수로 나누어 평균 계산
        # print(row['학번'], c_sum, c_sum[2:], s_sum, s_avg)     # 모니터링용 출력
        print(f"[{row['이름']}] 평균 : {round(s_avg,2)}")        # 학생별 평균 소수점 3자리에서 반올림(round)

결과

[이준범] 평균 : 91.67
[박승원] 평균 : 85.17
[박진현] 평균 : 86.5
[지윤찬] 평균 : 85.0
[이태빈] 평균 : 85.83
[김현우] 평균 : 70.33
[이재기] 평균 : 80.0
[유예윤] 평균 : 84.83
[정수훈] 평균 : 86.17
[장찬지] 평균 : 81.67
[정병혁] 평균 : 77.5
[정지빈] 평균 : 83.5
[정용진] 평균 : 75.67
[지동찬] 평균 : 80.5
[정동진] 평균 : 78.67
[김승우] 평균 : 82.0
[정원산] 평균 : 85.17
...
728x90
반응형