实验目的
- 读入自己上个学期期末考试的各科成绩,构建一个python字典。( 注意如有五级值请转为百分成绩)
- 使用python的方式从1中构建的字典读取各科成绩,并计算其所有成绩的均值和方差。
- 使用numpy数组计算各科成绩的均值和方差
- 使用matplotlib绘制均值和方差的图形
实验学习
基础内容与语法
Python 3 基础教程.
关于numpy
Python Numpy 求均值,方差,标准差.
关于matplotlib
Python–Matplotlib(基本用法).
Python的Matplotlib简易教程(速查详细版)——非常全,目录清晰,建议收藏.
关于pandas
使用pandas将Excel转换为字典
实验内容
第一版设计:
使用字典存储科目名称及对应分数
使用列表读取分数
使用numpy数组计算均值与方差
使用matplotlib绘制图形
第一版代码
tinydict={} #初始化字典
list_2=[]#分数
list_3=[]#课程
num=0 #用于计数
num_2=0 #用于计算总和
num_3=0
num_4=0
str = input("请输入课程:")
while str!="EOF":
list_3.append(str)
str_2=input("请输入分数或评级:")
tinydict[str]=str_2
str = input("请输入课程:")
print ("====list=====")
for key in tinydict:
num+=1
value = tinydict[key]
print (key,':',value)
if value=="优":
value=95
if value=="良":
value=85
if value=="中":
value=75
if value=="及格":
value=65
if value=="不及格":
value=0
value=float(value)
list_2.append(value)
num_2+=value
print ("==calculate==")
average=num_2/num
for number in list_2:
num_3+=(number-average)**2
#print(num_3)
variance=num_3/num
print ("你的平均分是 ", average)
print ("你的分数方差是 ", variance)
print ("====numpy====")
import numpy as np
list_2 = np.array(list_2,dtype=np.float64)
list_2_mean=np.mean(list_2)
print ("你的平均分是 ", list_2_mean)
list_2_var=np.var(list_2)
print ("你的分数方差是 ", list_2_var)
print ("========")
import matplotlib.pyplot as plt
import matplotlib
#显示中文 SimHei是黑体
matplotlib.rcParams['font.family'] = 'SimHei'
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(num)
plt.ylim(0, 100)
plt.xticks(x, list_3)
for number in list_2:
x=list_3[num_4]
num_4+=1
y=number
plt.scatter(x, y)
plt.plot([0,num-1],[list_2_mean,list_2_mean],color='red',linewidth=2)
fig = plt.figure()
print ("==variance===")
plt.plot([list_2_mean+0.01,list_2_mean-0.01], [list_2_var+0.01,list_2_var-0.01], color='red', linewidth=4)
plt.xlim(0, 100)
plt.ylim(0, 2500)
plt.ylabel("variance") #y轴名字
plt.xlabel("average") #x轴
plt.show()
第一版实验结果
很容易发现,本版代码:
-
读入任务 - 输入任务
于是,我们写入第二版代码
第二版设计:
使用字典存储科目名称及对应分数
使用列表读取分数
使用numpy数组计算均值与方差
使用matplotlib绘制图形
使用pandas读入Excel
第二版代码
tinydict={} #初始化字典
list_2=[]#分数
list_3=[]#课程
num=0 #用于计数
num_2=0 #用于计算总和
num_3=0
num_4=0
#str = input("请输入课程:")
#while str!="EOF":
# list_3.append(str)
# str_2=input("请输入分数或评级:")
# tinydict[str]=str_2
# str = input("请输入课程:")
import pandas as pd
test=pd.read_excel(r"D:\test\235.xlsx",sheet_name="Sheet1")#第二个参数表示选择的Excel表格名
#t=test.values
tinydict=test.set_index("课程").to_dict()["成绩"]#直接将课程与成绩两行内容写入字典
print ("====list=====")
for key in tinydict:
num+=1
list_3.append(key)
value = tinydict[key]
print (key,':',value)
if value=="优":
value=95
if value=="良":
value=85
if value=="中":
value=75
if value=="及格":
value=65
if value=="不及格":
value=0
value=float(value)
list_2.append(value)
num_2+=value
print ("==calculate==")
average=num_2/num
for number in list_2:
num_3+=(number-average)**2
#print(num_3)
variance=num_3/num
print ("你的平均分是 ", average)
print ("你的分数方差是 ", variance)
print ("====numpy====")
import numpy as np
list_2 = np.array(list_2,dtype=np.float64)
list_2_mean=np.mean(list_2)
print ("你的平均分是 ", list_2_mean)
list_2_var=np.var(list_2)
print ("你的分数方差是 ", list_2_var)
print ("========")
import matplotlib.pyplot as plt
import matplotlib
#显示中文 SimHei是黑体
matplotlib.rcParams['font.family'] = 'SimHei'
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(num)
plt.ylim(0, 100)
plt.xticks(x, list_3)
for number in list_2:
x=list_3[num_4]
num_4+=1
y=number
plt.scatter(x, y)
plt.plot([0,num-1],[list_2_mean,list_2_mean],color='red',linewidth=2)
fig = plt.figure()
print ("==variance===")
plt.plot([list_2_mean+0.01,list_2_mean-0.01], [list_2_var+0.01,list_2_var-0.01], color='red', linewidth=4)
plt.xlim(0, 100)
plt.ylim(0, 2500)
plt.ylabel("variance") #y轴名字
plt.xlabel("average") #x轴
plt.show()
第二版实验结果
Excel表内容
运行结果
本版代码:
- 读入任务
- 输入任务
做完收工√