Python入门:读取成绩,计算均值和方差后绘制图形

实验目的

  1. 读入自己上个学期期末考试的各科成绩,构建一个python字典。( 注意如有五级值请转为百分成绩)
  2. 使用python的方式从1中构建的字典读取各科成绩,并计算其所有成绩的均值和方差。
  3. 使用numpy数组计算各科成绩的均值和方差
  4. 使用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表内容
在这里插入图片描述
运行结果
在这里插入图片描述
本版代码:

  • 读入任务
  • 输入任务

做完收工√

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值