강의노트 05. 절차지향 방식 Data analysis
05 Apr 2017 |패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
절차지향 프로그래밍 방식으로 프로그램 작성하기
개요
작성할 프로그램
- 학생들의 점수 데이터를 통해 평균과 표준편차를 구하고,
- 이를 기준으로 평가를 내린다.
데이터
- class_A.bin
- 상기 파일은 pickle.dump를 통해서 데이터 입력이 이루어졌으며, 딕셔너리 자료형을 갖고 있음 (pickle로 데이터를 저장하거나 불러올때는 파일을
바이트형식
으로 읽거나 써야한다. (wb, rb)) - lass_A.bin 파일 내용
{'greg': 95},
{'john': 25},
{'yang': 50},
{'timothy': 15},
{'melisa': 100},
{'thor': 10},
{'elen': 25},
{'mark': 80},
{'steve': 95},
{'anna': 20}
코드작성
import pickle
import math
from functools import reduce
# 평균
def average(scores):
return reduce(lambda a, b: a + b, scores)/len(scores)
# 분산
def variance(scores, avrg):
return reduce(lambda a, b: a + b, map(lambda s:(s-avrg)**2, scores))/len(scores)
# 평가
def evaluateClass(avrg, std_dev):
if avrg <50 and std_dev >20:
print("성적이 너무 저조하고 학생들의 실력 차이가 너무 크다.")
elif avrg > 50 and std_dev >20:
print("성적은 평균이상이지만 학생들 실력 차이가 크다. 주의 요망!")
elif avrg < 50 and std_dev <20:
print("학생들간 실력차는 나지 않으나 성적이 너무 저조하다. 주의 요망!")
elif avrg > 50 and std_dev <20:
print("성적도 평균 이상이고 학생들의 실력차도 크지 않다.")
# 파일에서 원하는 점수 데이터만 리스트로 만들기
f = open("class_A.bin", "rb")
# with open("class_A.bin", "rb") as f: 방식이 더 좋다
items = []
while 1:
try:
data = pickle.load(f)
except EOFError:
break
items.append(data)
print(items)
scores = []
# normal way
'''
for item in items:
for value in item.values():
scores.append(value)
'''
#pythonic way??
scores = list(map(lambda x: x[0] , map(lambda item:list(item.values()),items)))
print(scores)
avrg = average(scores) # 평균
variance = round(variance(scores, avrg), 1) # 분산
standard_deviation = round(math.sqrt(variance), 1) # 표준편차
print("\n")
print('*' * 50)
print("A반 성적 분석 결과")
print('*' * 50)
print("A반의 평균은 {0}점이고 분산은 {1}이며, 따라서 표준편차는 {2}이다".format(avrg, variance, standard_deviation))
print('*' * 50)
print("A반 종합 평가")
print('*' * 50)
print('\n')
evaluateClass(avrg, standard_deviation)
f.close()