python成绩统计_利用python进行学生成绩分析
import os
import pandas as pd
import numpy as np
import openpyxl
from tkinter import *
from tkinter import filedialog
import tkinter.messagebox
from tkinter import ttk
def cjtj(df_xx,tj_bt,df,nj_ks,qz):
tj = pd.DataFrame({"单位":df_xx,
},
index = df_xx,
columns = tj_bt)
#计算学校人数
df_xxs=df.groupby('单位')['班级'].count()
tj['学生数']=df_xxs
for j in nj_ks.index.values:
tj[j+'人平']=df.groupby('单位')[j].mean()
tj[j+'及格']=df[df[j]>=nj_ks[j]*0.60].groupby('单位')['班级'].count()*100/tj['学生数']
tj[j+'优秀']=df[df[j]>=nj_ks[j]*0.80].groupby('单位')['班级'].count()*100/tj['学生数']
tj[j+'低分']=df[df[j]
tj = tj.fillna(0)
for j in nj_ks.index.values:
tj[j+'得分']=tj[j+'人平']*100*qz[0]/nj_ks[j]+tj[j+'及格']*qz[1]+tj[j+'优秀']*qz[2]-tj[j+'低分']*qz[3]
tj[j+'名次']=pd.Series(tj[j+'得分']).rank(ascending = False,method = 'min')
return tj
def main():
def selectExcelfile():
sfname = filedialog.askopenfilename(title='选择Excel文件', filetypes=[('Excel', '*.xlsx'), ('All Files', '*')])
if sfname:
if text1.get():
text1.delete(0, END)
text1.insert(INSERT,sfname)
def closeThisWindow():
root.destroy()
def doProcess():
cj = text1.get()
if cj:
cjb = cj
(filepath, tempfilename) = os.path.split(cjb)
(filename, extension) = os.path.splitext(tempfilename)
tjb = filepath + '/' + filename + '统计表' + extension
#取得所有表名
df_sheets=pd.read_excel(cjb,sheet_name=None).keys()
#人平分数、及格率、优秀率、低分率计算权重
if '计算权重' in df_sheets:
df=pd.read_excel(cjb,sheet_name='计算权重',header=0)
qz = [df['人平分数'][0],df['及格率'][0],df['优秀率'][0],df['低分率'][0]]
else:
qz=[0.4,0.3,0.2,0.1]
#获取学生成绩统计表名和考试科目卷面满分
if '考试科目' in df_sheets:
ks=pd.read_excel(cjb,sheet_name='考试科目',header=0,index_col=0) #考试科目及卷面满分
ks_km=ks.columns.values #考试科目
ks_nj=ks.index.values #考试年级
ks=ks.T #便于按年级访问各考试科目分数
cj_sheets=[val for val in ks_nj if val in df_sheets]
else:
tkinter.messagebox.showinfo('提示','没有找到关于卷面满分相关设置的“考试科目”表!')
#指定用来保存统计数据的电子表格
writer = pd.ExcelWriter(tjb)
#初始化进度条
progress_bar['maximum']=len(cj_sheets)
jd_temp = 0
#逐一统计各表数据
for i in cj_sheets:
#更新进度条数据
jd_temp += 1
progress_bar['value']=jd_temp ##
progress_bar.update()
#统计考试科目总分
nj_ks=ks[i].dropna()
temp=0
for j in nj_ks:
temp = temp + j
#加载电子表格,并把第二行作为标题
df=pd.read_excel(cjb,sheet_name=i,header=1)
df['综合']=0
for j in nj_ks.index.values:
df['综合']=df['综合']+df[j]
nj_ks['综合']=temp
tj_bt = ['单位','学生数']
for j in nj_ks.index.values:
tj_bt = tj_bt + [j+'人平',j+'及格',j+'优秀',j+'低分',j+'得分',j+'名次']
#获取表格标题
df_bt=df.columns.values
if '支部' in df_bt:
df_xx=df['支部'].drop_duplicates().values
df['单位'] = df['支部']
temp = cjtj(df_xx,tj_bt,df,nj_ks,qz)
df_xx=df['支部']+df['学校']
df_xx=df_xx.drop_duplicates().values
df['单位'] = df['支部']+df['学校']
temp = temp.append(cjtj(df_xx,tj_bt,df,nj_ks,qz))
df_xx=df['学校']+df['班级'].astype('str')
df_xx=df_xx.drop_duplicates().values
df['单位'] = df['学校']+df['班级'].astype('str')
temp = temp.append(cjtj(df_xx,tj_bt,df,nj_ks,qz))
elif '学校' in df_bt:
df_xx=df['学校'].drop_duplicates().values
df['单位'] = df['学校']
temp = cjtj(df_xx,tj_bt,df,nj_ks,qz)
df_xx=df['学校']+df['班级'].astype('str')
df_xx=df_xx.drop_duplicates().values
df['单位'] = df['学校']+df['班级'].astype('str')
temp = temp.append(cjtj(df_xx,tj_bt,df,nj_ks,qz))
else:
df_xx=df['班级'].astype('str')
df_xx=df_xx.drop_duplicates().values
df['单位'] = df['班级'].astype('str')
temp = cjtj(df_xx,tj_bt,df,nj_ks,qz)
temp.to_excel(writer,sheet_name=i+'统计表',index=False)
writer.save()
tkinter.messagebox.showinfo('提示',tjb + '已经生成!')
else:
tkinter.messagebox.showinfo('提示','没有选择包含学生成绩的文件!')
#初始化
root=Tk()
#设置窗体标题
root.title('学生综合素质分析系统')
#设置窗体图标
root.iconbitmap("./image/e13.ico")
#不允许改变窗口大小
root.resizable(False, False)
#设置窗口大小和位置
#root.geometry('500x300+570+200')
#得到屏幕宽度
sw = root.winfo_screenwidth()
#得到屏幕高度
sh = root.winfo_screenheight()
#窗口宽高
ww = 500
wh = 300
#窗口居中显示
root.geometry("%dx%d+%d+%d" %(ww,wh,(sw-ww) / 2,(sh-wh) / 2))
label1=Label(root,text='请选择文件:')
text1=Entry(root,bg='white',width=45)
text2=Text(root,bg='white',width=67,height=13)
progress_bar=ttk.Progressbar(root, orient='horizontal', length=470, mode='determinate') ##进度条
progress_bar.pack(pady = 50)
button1=Button(root,text='浏览',width=8,command=selectExcelfile)
button2=Button(root,text='分析',width=8,command=doProcess)
button3=Button(root,text='退出',width=8,command=closeThisWindow)
label1.pack()
text1.pack()
text2.pack()
button1.pack()
button2.pack()
button3.pack()
label1.place(x=20,y=15)
text1.place(x=95,y=15)
text2.place(x=15,y=80)
button1.place(x=420,y=11)
button2.place(x=320,y=260)
button3.place(x=420,y=260)
text2.insert(END,"说明:\n")
text2.insert(END,"1.参照样表设计学生综合素质登记表。\n")
text2.insert(END,"2.确保学生各项数据无误。\n")
text2.insert(END,"3.正确设置检测项目卷面满分。\n")
text2.insert(END,"4.正确设置三率一平的计算权重。\n")
text2.insert(END,"5.各年级学生成绩表名与考试科目表中的班级保持一致。\n")
text2.insert(END,"6.如果不计算支部和学校总成绩,可以删除学生成绩表中的“支部”和“学校”列。\n")
text2.insert(END,"7.删除学生成绩表中的“支部”和“学校”列后,相当于是学校各班成绩计算。\n")
root.mainloop()
if __name__=="__main__":
main()
python成绩统计_利用python进行学生成绩分析相关推荐
- python做统计_利用 Python 进行统计
你将学到什么 Create and interpret data visualizations using the Python programming language and associated ...
- python闰年统计_利用Python写一个闰年计算器和每月天数计算器
闰年计算器 题目:输入年份,判断该年是否为闰年. 方法:1.能被400整除的年份 2.能被4整除,但不能被100整除 1 print('---闰年判断器kql,按q退出---') 2 while Tr ...
- 用html制作学生成绩表格代码,利用Excel制作学生成绩表.doc
利用Excel制作学生成绩表 利用Excel制作学生成绩表 制作一个学生成绩自动统计表,可以自动统计最高分.最低分.总分.平均分.名次.三率等数据信息,还可以根据自定条件以不同的颜色显示分数.自动统计 ...
- 学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计
记一次课程设计作业 学生成绩管理系统#include #include #include #include /* 学生成绩管理系统介绍 2017C语言课程设计 202160936 1.支持将数据保存 ...
- 利用python进行词频统计_利用python做词频计算(word-count)
主要针对英文文本做出词频计算,因为英文是用空格作为词语分割的.中文需要用到分词的库. 下面就用奥巴马的一片演讲做词频计算 1,分析的文本 speech_etxt = ''' My fellow cit ...
- python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合
本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...
- python音频聚类_利用python的KMeans和PCA包实现聚类算法
题目: 通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚类,聚成普通驾驶类型,激进类型和超冷静型3类 . 利用Python的scikit-learn包中的Kmeans算法 ...
- python计算信息增益_利用Python提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...
00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...
- 如何用python画心形_利用python画一颗心的方法示例
前言 Python一般使用Matplotlib制作统计图形,用它自己的说法是'让简单的事情简单,让复杂的事情变得可能'.用它可以制作折线图,直方图,条形图,散点图,饼图,谱图等等你能想到的和想不到的统 ...
- python多元非线性回归_利用Python进行数据分析之多元线性回归案例
线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...
最新文章
- 在 Azure 网站上使用 Memcached 改进 WordPress
- Wpf消息循环之消息传递
- 6月份不良与垃圾信息举报:垃圾邮件占40.4%
- 如果政府强制开发linux应用,Linux开发环境及应用-中国大学mooc-题库零氪
- go系列之利用Gin框架获取form参数
- Linux下配置DNS服务器之一--Master服务器
- Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入
- c语言字符比较思路,C语言讲解思路资料
- 判断unsigned long long乘法溢出_信息安全课程17:缓冲区溢出2
- spring boot配置对上传文件的大小限制
- Java集合框架之Collection实例解析
- python 购物车程序_Python 购物车程序(文件版)
- dell服务器系统备份到另一台,已解决: Re: Networker 备份服务器 备份软件配置文件备份? - Dell Community...
- MySQL查看和修改数据库存储目录
- 二叉树前序、中序、后序遍历(八)
- 使用hexo搭建github个人博客网站
- SQL:postgresql中使用limit ... offset ... 实现分页查询
- 《自动化技术中的进给电气传动》1.1节和1.2节读书笔记
- 如何打开屏幕坏的手机_手机屏幕坏了怎么打开usb调试
- Java生成Word的报告模板