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进行学生成绩分析相关推荐

  1. python做统计_利用 Python 进行统计

    你将学到什么 Create and interpret data visualizations using the Python programming language and associated ...

  2. python闰年统计_利用Python写一个闰年计算器和每月天数计算器

    闰年计算器 题目:输入年份,判断该年是否为闰年. 方法:1.能被400整除的年份 2.能被4整除,但不能被100整除 1 print('---闰年判断器kql,按q退出---') 2 while Tr ...

  3. 用html制作学生成绩表格代码,利用Excel制作学生成绩表.doc

    利用Excel制作学生成绩表 利用Excel制作学生成绩表 制作一个学生成绩自动统计表,可以自动统计最高分.最低分.总分.平均分.名次.三率等数据信息,还可以根据自定条件以不同的颜色显示分数.自动统计 ...

  4. 学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计

    记一次课程设计作业 学生成绩管理系统#include #include #include #include /* 学生成绩管理系统介绍 2017C语言课程设计  202160936 1.支持将数据保存 ...

  5. 利用python进行词频统计_利用python做词频计算(word-count)

    主要针对英文文本做出词频计算,因为英文是用空格作为词语分割的.中文需要用到分词的库. 下面就用奥巴马的一片演讲做词频计算 1,分析的文本 speech_etxt = ''' My fellow cit ...

  6. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  7. python音频聚类_利用python的KMeans和PCA包实现聚类算法

    题目: 通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚类,聚成普通驾驶类型,激进类型和超冷静型3类 . 利用Python的scikit-learn包中的Kmeans算法 ...

  8. python计算信息增益_利用Python提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...

    00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...

  9. 如何用python画心形_利用python画一颗心的方法示例

    前言 Python一般使用Matplotlib制作统计图形,用它自己的说法是'让简单的事情简单,让复杂的事情变得可能'.用它可以制作折线图,直方图,条形图,散点图,饼图,谱图等等你能想到的和想不到的统 ...

  10. python多元非线性回归_利用Python进行数据分析之多元线性回归案例

    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...

最新文章

  1. 在 Azure 网站上使用 Memcached 改进 WordPress
  2. Wpf消息循环之消息传递
  3. 6月份不良与垃圾信息举报:垃圾邮件占40.4%
  4. 如果政府强制开发linux应用,Linux开发环境及应用-中国大学mooc-题库零氪
  5. go系列之利用Gin框架获取form参数
  6. Linux下配置DNS服务器之一--Master服务器
  7. Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入
  8. c语言字符比较思路,C语言讲解思路资料
  9. 判断unsigned long long乘法溢出_信息安全课程17:缓冲区溢出2
  10. spring boot配置对上传文件的大小限制
  11. Java集合框架之Collection实例解析
  12. python 购物车程序_Python 购物车程序(文件版)
  13. dell服务器系统备份到另一台,已解决: Re: Networker 备份服务器 备份软件配置文件备份? - Dell Community...
  14. MySQL查看和修改数据库存储目录
  15. 二叉树前序、中序、后序遍历(八)
  16. 使用hexo搭建github个人博客网站
  17. SQL:postgresql中使用limit ... offset ... 实现分页查询
  18. 《自动化技术中的进给电气传动》1.1节和1.2节读书笔记
  19. 如何打开屏幕坏的手机_手机屏幕坏了怎么打开usb调试
  20. Java生成Word的报告模板

热门文章

  1. 高等数学|微积分(上)知识点总结
  2. css怎么实现三角形边框,css border实现的三角形图案
  3. 不用百度网盘客户端直接下载大文件
  4. 华为交换机配置时区_华为交换机设置时间问题
  5. 东芝服务器报错误代码维修,实战维修 东芝复印机故障维修详解
  6. Squid代理服务器
  7. my top visited webs
  8. 深度学习与传统机器学习的区别
  9. Xposed框架分析
  10. Netlog中数据库演变过程(转载)