当前位置:   article > 正文

python助教酱酱_助教工作:关于如何使用python+excel快捷生成千帆竞发图

python酱酱

为什么需要这样的功能

生成千帆竞发图需要数次作业成绩列在一张总成绩表中,通过人工的方式将复数张表合并为一张效率实在底下。

而合并的操作本身却是规律性极强、重复性极强的,这通常意味着:我们可以利用程序来代替人工,从而提高效率,让我们把时间放到做更有意义的事情上去。

所以为了提高助教工作的效率,决定制作这样的一个python程序来快速生成总成绩表,然后使用excel自带的图标功能来生产千帆竞发图。

码云地址

准备

python 3.5+

excel 2010 及以上

博客园班级导出作业excel功能

安装

需要安装python的第三方库xlrd,xlwt

使用pip安装即可,指令如下

pip install xlrd

pip install xlwt

数据处理思路

在博客园可以通过作业的导出excel功能快速获取某次作业的成绩。

以下是由博客园导出的某次作业的成绩

2141142-20200917145351928-443640204.png

我们发现:在导出的数据中,学号是具有唯一性的,通过按学号提取多次作业的成绩,可以形成学号-历次成绩列表的映射,形如

'201879123761xxx':[9,8,...,14]

而且通过学号归纳成绩,可以避免粗暴的提取列造成的一些错误。

代码及方法

首先引入所需的库,以及声明的全局变量Data

import xlrd,sys,os,xlwt

Data = {}

然后设置读取函数,引入全局变量Data,读取过程中将学号作为字典的key,而字典的value则是list类型的数据,将各个表同样位置上的成绩依次录入到对应的list中

def dataReader(sheet):

global Data

for i in range(1,sheet.nrows):

try:

Data[sheet.row_values(i)[0]].append(sheet.row_values(i)[5])

except:

Data[sheet.row_values(i)[0]] = [ sheet.row_values(i)[5] ]

设置写入函数,处理全局变量Data中的数据,将其写入到另一个excel表中

def dataWriter():

global Data

workbook = xlwt.Workbook(encoding = 'utf-8')

worksheet = workbook.add_sheet('Final')

worksheet.col(0).width = 4000

worksheet.write(1,0, label = '学号')

row = 2

for k in Data.keys():

worksheet.write(row,0, label = k)

for i in range( len(Data[k]) ):

worksheet.write(row,i+1, label = Data[k][i])

row += 1

workbook.save('final.xls')

至此,程序的静态部分完成。

为了方便起见,程序从命令行启动时可以接收不定长的参数,这些参数就是各次成绩数据表的文件名。需要使用sys.argv来访问命令行启动时程序接受的参数

books = []

for i in range(1, len(sys.argv) ):

print("正在加载: {}".format(sys.argv[i]))

books.append(sys.argv[i])

print("\n")

调用读取函数来依次处理表中的数据

for i in books:

print("正在处理: {}".format(i))

book = xlrd.open_workbook(i)

sheet = book.sheets()[0]

dataReader(sheet)

print("{} 处理完成!\n".format(i))

最后调用写入函数来保存结果

print("正在链接并生成表格")

dataWriter()

print("完成!\n")

print("按回车结束...")

input()

在制作完这个简单的程序之后,需要我们去启动它。使用方法很简单,命令行启动,命令行参数为各次作业的excel文件。在这需要提醒,请务必将导出的excel文件更名为由数字或英文组成的文件名。对于历次作业,我们需要按照时间顺序输入参数

2141142-20200917150112979-161661045.png

现在,已经获得了一个由数次作业合并的总体成绩表了。下一步则是生成千帆竞发图

生成千帆竞发图

对于生成出的总体成绩表,仍然需要一些处理。首先是将所有的成绩为NULL的分数,替换为0分

ctrl+F 调出查找界面,选择替换。查找内容为NULL,替换内容为0,选择全部替换

完成替换后,需要执行excel函数来生成数据。在原始数据不远处选择空闲列,输入excel函数,例如

2141142-20200916152531183-865282144.png

输入完excel函数后,鼠标放到该单元格右下角,待鼠标变为黑色实心十字后,垂直向下拖拽至最后一个数据,例如

2141142-20200916152747347-1625851962.png

至此你完成了一列数据的生成。然后进行第二列数据的生成,输入excel函数,例如

2141142-20200916152904068-462503007.png

执行与上一次相同的拖拽操作,例如

2141142-20200916153005810-1683971184.png

你已经生成两列数据了。在此过程中你可以发现规律,假若第一列函数是=B3,则第二列是=B3+C3,若需要第三列则是=B3+C3+D3等等,以此类推。

下面我们需要生成千帆竞发图。在你生成的数据头部加上次数,然后选取所有你生成的数据,例如

2141142-20200916153247894-1757673055.png

然后选择插入-折线图-带数据的折线图,例如

2141142-20200916153426923-713027317.png

你生成的数据可能如下图所示,并非你所想要的样式,需要调整

2141142-20200916153551029-1377467691.png

选择设计-数据-切换行/列

2141142-20200916153701311-987348944.png

此时生成千帆竞发图了

2141142-20200916154108650-202934587.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/940250
推荐阅读
相关标签
  

闽ICP备14008679号