zoukankan      html  css  js  c++  java
  • 助教工作:关于如何使用python+excel快捷生成千帆竞发图

    为什么需要这样的功能

    生成千帆竞发图需要数次作业成绩列在一张总成绩表中,通过人工的方式将复数张表合并为一张效率实在底下。
    而合并的操作本身却是规律性极强、重复性极强的,这通常意味着:我们可以利用程序来代替人工,从而提高效率,让我们把时间放到做更有意义的事情上去。
    所以为了提高助教工作的效率,决定制作这样的一个python程序来快速生成总成绩表,然后使用excel自带的图标功能来生产千帆竞发图。

    码云地址

    https://gitee.com/weberpyth/python-script-set/tree/master/work/nsi/script/homework_Excel_craft

    准备

    python 3.5+
    excel 2010 及以上
    博客园班级导出作业excel功能

    安装

    需要安装python的第三方库xlrd,xlwt
    使用pip安装即可,指令如下
    pip install xlrd
    pip install xlwt

    数据处理思路

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

    我们发现:在导出的数据中,学号是具有唯一性的,通过按学号提取多次作业的成绩,可以形成学号-历次成绩列表的映射,形如
    '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("
    ")
    
    调用读取函数来依次处理表中的数据
    for i in books:
        print("正在处理: {}".format(i))
        book = xlrd.open_workbook(i)
        sheet = book.sheets()[0]
        dataReader(sheet)
        print("{} 处理完成!
    ".format(i))
    
    最后调用写入函数来保存结果
    print("正在链接并生成表格")
    dataWriter()
    print("完成!
    ")
    print("按回车结束...")
    input()
    
    在制作完这个简单的程序之后,需要我们去启动它。使用方法很简单,命令行启动,命令行参数为各次作业的excel文件。在这需要提醒,请务必将导出的excel文件更名为由数字或英文组成的文件名。对于历次作业,我们需要按照时间顺序输入参数

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

    生成千帆竞发图

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

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

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

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

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

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

    你已经生成两列数据了。在此过程中你可以发现规律,假若第一列函数是=B3,则第二列是=B3+C3,若需要第三列则是=B3+C3+D3等等,以此类推。
    下面我们需要生成千帆竞发图。在你生成的数据头部加上次数,然后选取所有你生成的数据,例如

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

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

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

    此时生成千帆竞发图了

  • 相关阅读:
    How to Create a site at the specified URL and new database (CommandLine Operation)
    Using Wppackager to Package and Deploy Web Parts for Microsoft SharePoint Products and Technologies
    SQL Server Monitor v0.5 [Free tool]
    How to build Web Part
    Deploy web part in a virtual server by developing a Web Part Package file(.cab)
    How to recreate "sites" link if you delete it accidentally
    SharePoint Portal Server管理匿名访问设置
    Monitor sql connection from .Net SqlClient Data Provider
    Brief installation instruction of Sharepoint Portal Server
    How to Use SharePoint Alternate URL Access
  • 原文地址:https://www.cnblogs.com/Heretic-Pangan/p/13679295.html
Copyright © 2011-2022 走看看