Python分析成绩

2023-10-26

目录

一、准备工作

二、所用到的库

1)Numpy:

2)Matplotlib:

3)Pandas:

三、代码实现

1)理科成绩分析.py

2)文理科成绩对比分析.py

四、效果展示


一、准备工作


1)某学校高三文科班一模学生成绩表.csv

2)某学校高三理科班一模学生成绩表.csv

二、所用到的库


1)Numpy:

提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

2)Matplotlib:

是一个用来绘图的python库,它的matplotlib.pyplot模块提供了一个与MATLAB非常类似的绘图系统。

3)Pandas:

一个强大的分析结构化数据的工具集;它的使用基础是numpy库,用于数据挖掘和数据分析,同时也提供数据清洗功能。

三、代码实现


1)理科成绩分析.py

# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt #绘图
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
score = pd.read_csv('某学校高三理科班一模学生成绩表.csv',encoding = 'gbk')
total_score=score.总分
num=score.学号
#统计最高分
print("========各项最高分========")
Chinese_Max = score.语文.max()
Math_Max = score.数学.max()
English_Max = score.英语.max()
LiZong_Max=score.理综.max()
total_Max=score.总分.max()
print("语文最高分为{}".format(Chinese_Max))
print("数学最高分为{}".format(Math_Max))
print("英语最高分为{}".format(English_Max))
print("理综最高分为{}".format(LiZong_Max))
print("总分最高分为{}".format(total_Max))
print("========各项最低分========")
Chinese_Min = score.语文.min()
Math_Min = score.数学.min()
English_Min = score.英语.min()
LiZong_Min=score.理综.min()
total_Min=score.总分.min()
print("语文最低分为{}".format(Chinese_Min))
print("数学最低分为{}".format(Math_Min))
print("英语最低分为{}".format(English_Min))
print("理综最低分为{}".format(LiZong_Min))
print("总分最低分为{}".format(total_Min))
##成绩平均值
print("========各项课程平均分========")
Chinese_Avg = score.数学.mean()
Math_Avg = score.数学.mean()
English_Avg = score.英语.mean()
LiZong_Avg = score.理综.mean()
print("语文平均分为{: .1f}".format(Chinese_Avg))
print("数学平均分为{: .1f}".format(Math_Avg))
print("英语平均分为{: .1f}".format(English_Avg))
print("理综平均分为{: .1f}".format(LiZong_Avg))
#成绩方差
print("========各项课程方差========")
Chinese_Var = score.语文.var()
Math_Var = score.数学.var()
English_Var = score.英语.var()
LiZong_Var = score.理综.var()
print("语文成绩的方差为{: .1f}".format(Chinese_Var))
print("数学成绩的方差为{: .1f}".format(Math_Var))
print("英语成绩的方差为{: .1f}".format(English_Var))
print("理综成绩的方差为{: .1f}".format(LiZong_Var))
#画直方图
p1=plt.figure()#创建第一块画布
a1=p1.add_subplot(2,2,1)
plt.title('学生总成绩分布直方图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.bar(num,total_score,color="#78cdd1",label='学生总分')#根据成绩画直方图
max_index=np.argmax(total_score)#最高分的下标
min_index=np.argmin(total_score)#最低分的下标
#标出最高分
plt.plot(max_index+9000,total_score[max_index],'r*',label="最高分")#学号需要加9000
#标出最低分
plt.plot(min_index+9000,total_score[min_index],'g*',label="最低分")#学号需要加9000
plt.legend()
plt.show()

a1=p1.add_subplot(2,2,2)
plt.title('每门课程最高分直方图')
plt.xlabel('课程名')
plt.ylabel('最高分')
plt.bar('语文',Chinese_Max,color='#006c54')
plt.bar('数学',Math_Max,color='#abbc54')
plt.bar('英语',English_Max,color='#aabbcc')
plt.bar('理综',LiZong_Max,color='#09aabb')
plt.show()

a1=p1.add_subplot(2,2,3)
plt.title('每门课程最低分直方图')
plt.xlabel('课程名')
plt.ylabel('最低分')
plt.bar('语文',Chinese_Min,color='#abccdd')
plt.bar('数学',Math_Min,color='#00abc1')
plt.bar('英语',English_Min,color='#ccaa00')
plt.bar('理综',LiZong_Min,color='#00c200')
plt.show()
#画箱线图
p2=plt.figure()#创建第二块画布
b1=p2.add_subplot(2,2,1)
plt.title('每门课程箱线图')
plt.xlabel('课程名')
plt.ylabel('分数')
label = ['语文','数学','英语','理综']
s = (score.语文,score.数学,score.英语,score.理综)
plt.boxplot(s,labels = label)
plt.show()
#画平均分直方图
b1=p2.add_subplot(2,2,2)
plt.title('每门课程平均分直方图')
plt.xlabel('课程名')
plt.ylabel('平均分')
plt.bar('语文',Chinese_Avg,color='#d9d6c3')
plt.bar('数学',Math_Avg,color='#6a6da9')
plt.bar('英语',English_Avg,color='#e0861a')
plt.bar('理综',LiZong_Avg,color='#33a3dc')
plt.show()
#画折线图
b1=p2.add_subplot(2,2,3)
plt.title('学生总成绩分布折线图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.plot(num,total_score,color='#77ac98')
plt.show()
#画散点图
p3=plt.figure()#创建第二块画布
c1=p3.add_subplot(2,2,1)
plt.title('学生总成绩分布散点图')
plt.xlabel('学号')
plt.ylabel('总分')
plt.scatter(num,total_score,color='#d9a6c3')
plt.show()
#画饼图
print("========预测高考上线率========")
lv1=535#一本分数线
lv2=463#二本分数线
lv3=150#专科分数线
A=sum(i>=lv1 for i in total_score) 
B=sum(i>=lv2 and i<lv1 for i in total_score) 
C=sum(i>=lv3 and i<lv2 for i in total_score)
D=sum(i<=lv3 for i in total_score)
print("预测能上一本的有{}人".format(A))
print("预测能上二本的有{}人".format(B))
print("预测能上专科的有{}人".format(C))
print("预测不能上学的有{}人".format(D))
c1=p3.add_subplot(2,2,2)
plt.title('高考上线率预测饼图',size='13')
Labels = '一本','二本','专科','不能上学'
data = [A,B,C,D]
Explode = (0.1, 0.1, 0.1, 0.1,)  
color = ['#b7ba6b', '#deab8a', '#77ac98', '#73b9a2']

plt.pie(data, explode=Explode,labels=Labels,autopct='%.2f%%',colors=color)
plt.show()

print("========总分平均分,标准差========")
#统计标准分
avgs=score.总分.mean()#全体考生的平均分
stds=np.std(score.总分,ddof=1)#总分标准差
print("全体考生的平均分:{}".format(avgs))
print("该次考试分数的标准差:{}".format(stds))
list=score.总分#将所有学生总分放到一个list里面去
#print(list) 
bzfs=[]#存放标准分
for i in list:
    bzf=float((int(i)-avgs)/stds)
    #标准分计算公示 (原始分数-全体考生的平均分)/标准差
    #标准分Z在一般情况下都带小数,而且会出现负值,
    #实际使用时不太方便,所以还要对Z分数进行线性变换(T变换):T=500+100Z
    T=500+100*bzf
    bzfs.append(T)
#print(bzfs) 
#根据标准分绘图
c1=p3.add_subplot(2,2,3)
plt.title('标准分分布图',size='10') 
plt.xlabel('学号')
plt.ylabel('标准分')
plt.plot(num,bzfs,"g.-")
plt.show()
    
    
    
    
    

2)文理科成绩对比分析.py

# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt #绘图
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#进行文件读取
score = pd.read_csv('某学校高三理科班一模学生成绩表.csv',encoding = 'gbk')
grade = pd.read_csv('某学校高三文科班一模学生成绩表.csv',encoding = 'gbk')
#统计理科最高分
print("****理科成绩各项最高分****")
Chinese_Max1 = score.语文.max()
Math_Max1 = score.数学.max()
English_Max1 = score.英语.max()
LiZong_Max=score.理综.max()
total_Max1=score.总分.max()
print("语文最高分为{}".format(Chinese_Max1))
print("数学最高分为{}".format(Math_Max1))
print("英语最高分为{}".format(English_Max1))
print("理综最高分为{}".format(LiZong_Max))
print("总分最高分为{}".format(total_Max1))
#统计文科最高分
print("****文科成绩各项最高分****")
Chinese_Max2 = grade.语文.max()
Math_Max2 = grade.数学.max()
English_Max2 = grade.英语.max()
WenZong_Max=grade.文综.max()
total_Max2=grade.总分.max()
print("语文最高分为{}".format(Chinese_Max2))
print("数学最高分为{}".format(Math_Max2))
print("英语最高分为{}".format(English_Max2))
print("文综最高分为{}".format(WenZong_Max))
print("总分最高分为{}".format(total_Max2))
#绘图对比
pl=plt.figure()#创建第一块画布
ax1=pl.add_subplot(2,2,1)
Y =[Chinese_Max1,Math_Max1,English_Max1,LiZong_Max,total_Max1]
Y1 =[Chinese_Max2,Math_Max2,English_Max2,WenZong_Max,total_Max2]
X = ['语文', '数学', '英语', '综合', '总分'] #
bar_width = 0.35
index = np.arange(len(Y))
# 绘制「理科各项最高分」的成绩
rects1 = plt.bar(index, Y, bar_width,color='#84bf96',label="理科成绩")
# 绘制「文科各项最高分」的成绩
rects2 = plt.bar(index + bar_width, Y1, bar_width, color='#78cdd1',label="文科成绩")
# X轴数据
plt.xticks(index+0.5*bar_width, X)
# X轴标题
plt.xlabel("各项成绩",color='#2e3a1f',size='10')
# Y轴标题
plt.ylabel("最高分分数",color='#2e3a1f',size='10')
# 图表标题

plt.title("文理科各项成绩最高分对比",color='#2e3a1f',size='14')
# 图例显示在图表下方
plt.legend(loc='upper center', bbox_to_anchor=(0.13, -0.06), fancybox=True, ncol=5)
# 添加数据标签
def add_labels(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x() + rect.get_width() / 2, height, height, ha='center', va='bottom')
        # 柱形图边缘用白色填充,纯粹为了美观
        rect.set_edgecolor('white')
add_labels(rects1)
add_labels(rects2)
plt.show()
#绘制文理科成绩散点图
total_score1=grade.总分#文科所有人总分成绩
total_score2=score.总分#文科所有人总分成绩
ax1=pl.add_subplot(2,2,2)
plt.title('文理科总成绩分布散点图对比')
plt.xlabel('学号')
plt.ylabel('总分')
num=np.arange(len(total_score1))#用于创建等差数组,这里使用来创建一个存取学号的数组
plt.scatter(num,total_score1,color='#acdd00',label='文科总分成绩')
plt.scatter(num,total_score2,color='#aabbcc',label='理科总分成绩')
plt.legend(loc='upper center', bbox_to_anchor=(0.8, -0.06), fancybox=True, ncol=5)
plt.show()
#统计文理科各分数段的人数
A1=sum(i>=600 for i in total_score1) 
B1=sum(i>=500 and i<600 for i in total_score1) 
C1=sum(i>=400 and i<500 for i in total_score1)
D1=sum(i<400 for i in total_score1)
A2=sum(i>=600 for i in total_score2) 
B2=sum(i>=500 and i<600 for i in total_score2) 
C2=sum(i>=400 and i<500 for i in total_score2)
D2=sum(i<400 for i in total_score2)
x = np.array([D1,C1,B1,A1])#存放文科各分数段的人数
y = np.array([D2,C2,B2,A2])#存放理科各分数段的人数
ax1=pl.add_subplot(2,2,3)
plt.title("文理科各分数段的人数对比",size='14')
rects3=plt.barh(range(len(y)), -x,color='#fedcbd',label='文科')
rects4=plt.barh(range(len(x)), y,color='#00ae9d',label='理科')
plt.xlim((-160,160))
plt.xticks((-150,-100,-50,0,50,100,150),('150','100','50','0','50','100','150'))
plt.yticks((0, 1, 2, 3),('0-400分', '400-500分', '500-600分', '600-750分'))
plt.xlabel('人数(个)')
plt.legend()
plt.show()
#根据当前分数预测文理科学生高考上线率
lv1=535#理科一本分数线
lv2=463#理科二本分数线
lv3=150#理科专科分数线
lv4=547#文科一本分数线
lv5=488#文科二本分数线
lv6=150#文科专科分数线
A_w=sum(i>=lv4 for i in total_score1) 
B_w=sum(i>=lv5 and i<lv4 for i in total_score1) 
C_w=sum(i>=lv6 and i<lv5 for i in total_score1)
A_l=sum(i>=lv1 for i in total_score2) 
B_l=sum(i>=lv2 and i<lv1 for i in total_score2) 
C_l=sum(i>=lv3 and i<lv2 for i in total_score2)
#画折线图
ax1=pl.add_subplot(2,2,4)
plt.title('文理科学生总成绩分布折线图')
plt.xlabel('等级')
plt.ylabel('人数')
xs=['一本','二本','专科']
ys1=[A_w,B_w,C_w]
ys2=[A_l,B_l,C_l]
indexs= np.arange(len(ys1))
plt.plot(indexs,ys1,color='yellow',label='文科')
plt.plot(indexs,ys2,color='red',label='理科')
plt.xticks(indexs+0.5*bar_width,xs)
plt.legend()
plt.show()









四、效果展示


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python分析成绩 的相关文章

随机推荐

  • tomcat端口号被占用

    这里有两种方法 第一个是通过命令窗口终止 第二个是使用任务管理器 1 端口被占用 可以用cmd window R 第一步 输入netstat ano 找到被占用的端口号 netstat ano 也可以输入netstat aon findst
  • matlab和stata,Stata和Matlab联合处理金融数据

    Stata是统计学专业软件 可以很方便的对数据处理 但几乎只能按照整行整列进行 而且每次只能加载一个矩阵 dta文件 如果要用到多个矩阵数据进行操作或进行复杂的循环控制 就力不从心了 而Matlab工业界广泛使用的数据分析处理工具 对矩阵支
  • 8、OpenCV调整图像对比度和亮度

    OpenCV调整图像对比度和亮度 一 学习目标 二 原理理解 三 对比度 亮度调整 四 完整代码示例 一 学习目标 理解图像对比度和亮度调整的原理 对比三种不同亮度和对比度调整方法 二 原理理解 1 对比度 对比度指的是一幅图像中明暗区域最
  • docker启动命令,docker重启命令,docker关闭命令

    一 docker服务的命令 启动 systemctl start docker 守护进程重启 systemctl daemon reload 重启docker服务 systemctl restart docker service docke
  • VS2019智能感知、代码折叠超慢问题解决实例

    CUDA Nsight VS 插件引起的智能感知问题解决 今天使用VS2019的时候 发现智能感知 代码折叠都莫名的慢 也不是一点都不会来 就是超慢 感觉要10秒以上才会显示 点个点需要等上好久才会出来 怎么重置都没用 换新用户也没用 想想
  • eclipse打开new新建没有java project

    自己通过上网学习安装了eclipse 在安装和使用过程中遇到的问题及解决办法会进行记录 希望可以帮助跟我遇到相同问题的你们哦 这些解决办法 也是我百度找到的 分享给大家 我的eclipse之前已经装过了 昨天在学习接口测试要用到eclips
  • ELK通过logstash采集java日志(多图演示)

    ELK 不是一款软件 而是 Elasticsearch Logstash 和 Kibana 三种软件产品的首字母缩写 这三者都是开源软件 通常配合使用 而且又先后归于 Elastic co 公司名下 所以被简称为 ELK Stack 根据
  • 大牛总结超详细的RabbitMQ入门,看这篇文章就够了!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 ack机制回顾 三 ack机制实现原理 delivery tag 四 RabbitMQ如何感知仓储服务实例宕机 五 仓储服务处理失败时的消息重
  • VS异常:文件乱码:文件加载,使用Unicode(UTF-8)编码加载文件xxx时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。

    参考 https blog csdn net bugang4663 article details 110408633 今天在使用vs打开一个项目的时候发现部分文件突然乱码了 上午打开的时候还没发现 点击部分cs文件的时候出现下面异常提醒
  • SD卡两种操作模式在项目中应用的比较

    1 SDIO接口传输速度比SPI接口传输速度快 2 STM32的SDIO口还真的不好用 特别是4BIT的方式 我都纠结了好久了 用1BIT的方式倒是可以 速度大概可以到读2M字节每秒 STM32F205 SDIO DMA 因为项目要最低5M
  • linux入门系列11--Centos7网络服务管理

    通过前面文章的学习已经掌握了Linux系统配置管理的知识 本文讲解Centos7网络配置知识 Linux要对外提供服务 需要保证网络通信正常 因此需要正确配置网络参数 本文将讲解如何使用Network Manager配置网络参数 管理网络会
  • 短视频dy(某音)高版本最新最全4种抓包方案,第1种让你秒破QUIC协议,破解抓包难题,看我这一篇就够了!

    一 前言 一般大多数网站 APP最常用的是http https协议 而某两款最火的短视频dy 某音 ks 某手 最新版使用的是quic协议 见附录1 导致fiddler和charles无法直接抓到包 某音app 13 5版本以下可以直接抓到
  • Hive性能调优策略

    利用分区表优化 场景 在业务环境中 以某个字段为筛选条件的需求增加 解决方法 建立以这个字段为分区的分区表 这样进行查询时只需要指定这个分区就不再需要进行全表扫描 利用分桶表优化 场景 需要频繁进行采样 解决方法 分桶表会使用hash算法将
  • matlab 层次聚类

    MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法 1 层次聚类 hierarchical clustering 2 k means聚类 这里用最简单的实例说明以下层次聚类原理和应用发法 层次聚类是基于距离的聚类方法 MAT
  • Mysql最大连接数,TimeOut配置

    Mysql连接数配置 1 MySQL的max connections参数用来设置最大连接 用户 数 每个连接MySQL的用户均算作一个连接 max connections的默认值为100左右 1 1查看数据库配置的最大连接数 show va
  • java核心技术卷 之单选按钮

    在前一个例子中 对于两个复选框 用户既可以选择一个 两个 也可以两个都不选 在很多情况下 我们需要用户只选择几个选项当中的 一个 与用户选择另一项的时候 前一项就自动地取消选择 这样一组选框通常称为单选按钮组 Radio Button Gr
  • 关于mapper接口注入spring容器

    mapper是接口 而接口时不能注入spring容器的 要注入就需要接口有对应的实现类 注入的应该是实现类而不是接口 而在spring中 导入MyBatis Spring包之后 MyBatis Spring中间件把mapper接口和mapp
  • 新文件创建inode分配路径

    0 ext4 new inode handle 0x0
  • java数组工具类(遍历(display)、添加(append)、删除(remove)、查找(indexOf) 、排序(sort))

    设计一个类 用于数组操作 1 成员变量为一个一维数组 数组元素是int型 2 构造方法中包含以一维数组为参数的构造方法 3 成员方法包括数组遍历 display 添加 append 删除 remove 查找 indexOf 排序 sort
  • Python分析成绩

    目录 一 准备工作 二 所用到的库 1 Numpy 2 Matplotlib 3 Pandas 三 代码实现 1 理科成绩分析 py 2 文理科成绩对比分析 py 四 效果展示 一 准备工作 1 某学校高三文科班一模学生成绩表 csv 2