python助教_助教工作:关于如何使用python+excel快捷生成千帆竞发图
為什么需要這樣的功能
生成千帆競發圖需要數次作業成績列在一張總成績表中,通過人工的方式將復數張表合并為一張效率實在底下。
而合并的操作本身卻是規律性極強、重復性極強的,這通常意味著:我們可以利用程序來代替人工,從而提高效率,讓我們把時間放到做更有意義的事情上去。
所以為了提高助教工作的效率,決定制作這樣的一個python程序來快速生成總成績表,然后使用excel自帶的圖標功能來生產千帆競發圖。
碼云地址
準備
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("\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文件更名為由數字或英文組成的文件名。對于歷次作業,我們需要按照時間順序輸入參數
現在,已經獲得了一個由數次作業合并的總體成績表了。下一步則是生成千帆競發圖
生成千帆競發圖
對于生成出的總體成績表,仍然需要一些處理。首先是將所有的成績為NULL的分數,替換為0分
ctrl+F 調出查找界面,選擇替換。查找內容為NULL,替換內容為0,選擇全部替換
完成替換后,需要執行excel函數來生成數據。在原始數據不遠處選擇空閑列,輸入excel函數,例如
輸入完excel函數后,鼠標放到該單元格右下角,待鼠標變為黑色實心十字后,垂直向下拖拽至最后一個數據,例如
至此你完成了一列數據的生成。然后進行第二列數據的生成,輸入excel函數,例如
執行與上一次相同的拖拽操作,例如
你已經生成兩列數據了。在此過程中你可以發現規律,假若第一列函數是=B3,則第二列是=B3+C3,若需要第三列則是=B3+C3+D3等等,以此類推。
下面我們需要生成千帆競發圖。在你生成的數據頭部加上次數,然后選取所有你生成的數據,例如
然后選擇插入-折線圖-帶數據的折線圖,例如
你生成的數據可能如下圖所示,并非你所想要的樣式,需要調整
選擇設計-數據-切換行/列
此時生成千帆競發圖了
總結
以上是生活随笔為你收集整理的python助教_助教工作:关于如何使用python+excel快捷生成千帆竞发图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遍历文件夹进行点云格式转换 PCD转BI
- 下一篇: websocket python爬虫_p