用python分析保存在excel学生成绩通俗讲解之一

Python处理数据是很方便的,用来分析学生成绩,生成成绩报告还是方便的。其实只要认真找一本Python科学计算的书籍,认真学一遍就知道怎么办了,但是系统学习成本太高,所以尽管网上免费的资源汗牛充栋,我还是要重复造轮子,也记录自己学习的过程。

对于数据科学家或者专业的程序员来说,处理excel这种事其实非常小儿科,但是成绩分析不在他们的业务范围内,所以面向教务员、信息技术老师的python成绩分析的教程相对比较少;学校里相当一部分办公室人员、行政人员、教务员都是信息技术教师担任的,很多数理老师学习编程能力也很强或者本身有编程基础,而数理老师担任班主任的挺多,也有成绩分析的需求,从这部分老师的使用场景出发,来分析python处理成绩应该怎么做,甚至扩展到办公自动化的需求。

成绩分析

实际上现在成绩分析已经容易多了,装备了智学网、全通等各种网络阅卷系统的学校,如果是网上阅卷,很容易就能够根据自己的需求得到需要的成绩分析报告,平均分最高分,三线一律,分数段分析等等,除了数据还能够给出丰富的图表;也有的考试系统,虽然给出了洋洋洒洒数页的分析报告,但是不能定制,不能提供学科老师关注的成绩分析的点;至于这些成绩分析,能否给出更加详细的知识点掌握情况的反馈,这个不在本文讨论之列,本文只讨论每科最终得分;有的学校是由教务员或者信息技术老师用Excel或者成绩分析软件进行分析,但是多年的成绩数据往往不能够形成数据库,相对来说比较分散。

能够购买网上阅卷系统或者成绩分析软件的学校其实还是少数,大部分都是自己用Excel进行分析,如果是单个班级单个学科,用Excel进行成绩分析并不复杂,但是如果涉及到任教的所有班级、整个年级甚至整个学校,用Excel进行成绩分析的工作就会相当繁重,大大超过了学会python再来进行成绩分析的工作量。所以无论是因为缺乏必要的软件工具,还是用Excel太复杂又或者不能胜任,学习用python来进行成绩分析和处理都是有必要的,无论是对于当前在校的老师还是还在学校的师范生。疫情当前,生活本来就很难,提高工作效率,会有更多的时间放空和养生,毕竟无论什么时候养生都是第一位呢。

当然用python来处理一个年级的成绩,需要所有的成绩表格式一致,不一致的话需要进行预处理也就是所谓的数据清洗,这样写程序会避免写一些额外的代码,毕竟大家都知道代码其实并不智能,你要写的很智能,就要增加非常度的开发量,但是这些开发量可以通过统一格式来避免;有的学校统计成绩用钉钉的在线表格或者金山在线文档,格式会一致,这样就会方便很多;很多高大上的功能,在实际中并不是很重要,甚至我们不处理异常,更多的我们写的是一次性的脚本或者程序,运行一次之后就“丢弃了”,当然了成绩分析这种事,年年有,每个学期有,花费心思定制属于自己的成绩分析软件是值得的,毕竟大部分老的教师职业生涯都要三四十年,从这个角度学习python,在现有软件不能满足需求,学校自己不足的情况下,开发自己的成绩分析软件,用的顺手的软件是很赚的。

事情做多了,手熟了,就会有自己的一套方法,把这套方法用程序表示出来,并渐渐的能够兼容很多乱七八糟的情况,属于自己的软件就成了。从这个角度,我很佩服以前工作的学校的一个体育老师,自己从零开始学习,开发了青岛市运动会管理系统,从这个角度,他比我厉害。

Python库的选择

其实用Python进行成绩分析,Pandas无疑是最强大的,然后才是其他的Excel相关的第三方库,比如xlrd&xlwt、openpyxl、xlxwriter等,但是情境的不同需要选择的库也不同。

xlrd&xlwt

xlrd的作用是读取Excel文件,xlwt是修改Excel文件。不管悲催的是,想要既要读取又修改&吸入Excel,还需要第三方库的支持。相对来说修改并保存Excel的逻辑比较复杂,所以只有仅需读取excel的时候,用xlrd。

openpyxl

这个库不支持2003版本的excel,excel 2010之后的都是支持的,现在一般电脑自带的excel版本都比较新,所以用这个库不会遇到太多的兼容性问题;即便是偏远地区,薄弱校,excel的版本大多是2007或者wps,实在不行,如果真的是excel2003,装个wps也能解决问题。

openpyxl的API设计的比xlrd合理,跟我们日常使用excel的逻辑是一致的,读取并写入excel也很优雅流程,跟我们用excel打开文件,然后保存一样简单。甚至openpyxl还支持公式等操作,但是其实,我们只需要用到数据的读取就好了。

如果是用xlrd&xlwt类似的库来读取写入excel,进行成绩分析,成绩分析的算法需要自行实现,好比你买了一套工具比较少的工具箱,能够满足基本需求,但是高级的需求要自己实现,毕竟只有一把锉刀也可以造锤子,但是如果有机床肯定更加方便。但是如果是用pandas库进行成绩分析,那么就好比从传统木工工具上升到了机床,直接数控开榫,效率大大提高。pandas求总分、平均分,六选三不同组合的分是很简单的,几乎跟用excel公式没有差别,但是相对来说openpyxl稍微麻烦点,pandas处理数据是按照矢量来的,跟openpyxl是不同的。不过对于初学者pandas更加容易理解,就像小孩子在学习小乌龟编程,宁愿复制命令,也不会主动的用循环或者函数简化代码,要么不会,要么掌握的不够熟练。

openpyxl的安装

安装非常简单,只需要在python中的命令行提示符中

python -m pip install openpyxl

或者更简单一点

pip install openpyxl

pandas

pandas无疑是强大的,坦白的讲,我自己也不熟悉,当然这也是我写文章的原因,记录自己学习的过程,健身学习印象。

处理excel

文件的打开和关闭

其实,分析成绩最常见的工作流就是:打开文件,编辑excl文件,保存文件。这个流程用excel来做旧比较简单。

from openpyxl import load_workbook

# 打开excel文件
wb = load_workbook('iamhappy.xlsx')

# 选择第1个工作表sheet
ws = wb.active 

# 修改A1单元格的值
ws['A1'] = '苟日新,日日新'

# 保存文件
wb.save('iamhappy.xlsx') 

首先从openpyxl库中导入加载(打开)excel文件要用到的方法(工具)load_workbook,然后调用,相当于在excel通过打开菜单,打开文件;而wb.active其实就是选择默认激活的工作表,在excel中默认激活的excel一般是第一个,当然你修改了就不是了,这个在处理excel的时候是需要注意的。

选择工作簿中激活的工作表

这个是用wps创建的默认只有一个sheet,而excel老版本创建的工作簿默认有3个sheet(工作表),现在最新的excel 365也是一个了。而运行ws = wb.active就相当于,用鼠标单击了Sheet1,意味着要在这个工作表中处理数据。

注意我们平时说的excel文件术语是工作簿,也就是英文的worksheet,习惯性缩写为wb;而工作表就是sheet,也就是worksheet这个词,习惯性缩写为ws;日常生活中一般很少用工作簿或者工作表,除非是写书,一般说excel文件和sheet。**还需要注意的是,在excel打开的情况下,python程序无法操纵excel文件的,需要在文件关闭的状态下进行。

文件的修改

打开关闭文件只是准备工作,对数据修改才是核心,也就是数据的插入、修改、删除、复制、计算、格式等操作,我们慢慢讲来。

在这里需要赘述下excel中的基本概念,单元格,单元格的值,单元格的行标和列标,以及单元格的格式,单元格值的修改;然后是行的概念,列的概念,表头;然后是公式;这是一些基础的概念,想要用python处理excel,就要知道在python的第三方库xlrd、openpyxl以及pandas,这些操作是如何完成的,掌握了这些知识,就可以愉快的用python进行数据处理了。所以从这个角度来看,python处理数据其实很简单的。

以前陪朋友去咨询古筝课程,说学习古筝有两种学习方法,一种是为了考级那就非常系统的学习,一种是老头老太太,学会弹奏一两首就行了,这两种学习目的不同的人,教学方式也不同,就像有人看了陈情令,买了笛子就只想学会不羁是一样的。

单元格值的读取和修改

可以说无论是什么水平的excel使用者,大部分时间都花在了跟单元格打交道上,夸张点说,只要我们知道了如何读取单元格,如何设置、修改单元格的值,我们就已经可以使用excel了,同样可以用python处理excel了,因为无非是python读取数据,编写处理数据处理的程序,然后把处理的结果输出到excel,所以学会处理excel的值是最重要的。

而openpyxl的API显然是经过了非常良好的设计,可以方便的读取工作簿(英文单词是哪个?)中工作表中的单元格的值。


选中B4单元格

日常使用excel的时候,描述一个单元格,往往会说B4单元格,在excel中,行的序号是字母以及字母的组合,列的序号是阿拉伯数字。而openpyxl库的作者利用python提供的一些魔术方法,使得我们在用这个库访问excel单元格的数据的时候,跟我们日常习惯相同。所以从语法上看ws["A1"]是在访问字典ws中键为A1的元素,实际上,得益于魔术方法,访问的是ws中第1列第1行的数据,ws在openpyxl中,可以看做是一个具有二维数组特性的类,当然扩展了很多属性,这种实现是很妙的,得益于python良好的语言架构,如果你读过《流畅的Python》这本书就更能领会优雅精妙之处了,由于python提供的魔术方法,我们可以像操作python自带的数据结构一样操作自定义的类,比如这个中括号运算,真的是非常的方便了。

既然知道了怎么修改了,其实读取值也是一样的,还是ws["A1"].value或者ws["B4"].value,如果想要输出单元格的值,只要

from openpyxl import load_workbook

# 打开excel文件
wb = load_workbook('iamhappy.xlsx')

# 选择第1个工作表sheet
ws = wb.active 

# # 修改A1单元格的值
# ws['A1'] = '苟日新,日日新'

# 读取单元格的值
print(ws["A1"].value)
# 保存文件
wb.save('iamhappy.xlsx') 

小结

所以到这里,我们已经理解了如何打开、保存excel,读取和修改单元格的值,这就可以用excel处理需求了,可以这是用python处理excel数据需要学习的最简单的技巧了。写这些一方面是想学习,一方面也是打发时间,还有一些说不清道不明的原因,反正就是写点总比不写好。虽然我打算写的是针对学校场景中的信息技术老师、教务员以及想用python分析成绩的学科老师的内容,但是其他应用场景下的无产阶级兄弟们也是可以学习借鉴,只不过力求通俗(懒)所以写的很是臃肿啰嗦,近乎于培训讲座的逐字稿。

练习

你可以试着安装下openpyxl库,然后用openpyxl打开(这里不用读取用打开其实是为了与日常使用excel的体验一致)一个已有的excel文件,

  • 读取单元格的数据,用print函数打印出来,显示在命令行中;
  • 修改excel中某个单元格的值
  • 打开一个成绩表,求几个学生的总分,当然所有学生的总分需要用到循环
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269