■ 簡介
這部分信息來自於學生通過公衆號TSINGHUAZHUOQING參與信號與系統課程教學活動,部分內容可以參見博文“ 上課玩手機 ”中的介紹。
由於今年 Coronavirus-19 疫情的影響, 信號與系統分析課程 今年就比較多的依賴於基於公衆號的課堂交互。其中包括三部分內容:
- 學生動態提問;
- 課堂討論
- 課件作業小測試
因此,分析公衆號課堂參與數據,可以在一定程度反映學生平時學習的基本數據。
01公衆號記錄數據格式
記錄文件包括:
-
PHONENAME.CFG: 微信端顯示的一些配置文件。詳細參見TEASOFT軟件說明。
-
PHONENAME.TXT:記錄公衆號等級信息,具體格式如下:
-
PHONENAME_DATA.TXT:具體格式如下:
數據記錄共有20項,這些項的定義爲:
前10項是固定的定義,在下面查詢後給出了前十項的定義:
▲ 在公衆號輸入 m 1445(查詢學生的學號後四位)顯示的內容
後10項的定義,是由PHONENAME.CFG給出定義。在TITLE中給出了定義的部分,會顯示,否則不會顯示。
02數據處理
1.形成中間格式數據
結合PHONENAME.TXT, PHONENAME_DATA.TXT兩個文件,形成如下格式的中間文件:
學號 姓名 問題(3) 正確(4) 分數(5) 獎勵(7) 時間(8)的記錄文件
□ 遇到的問題
(1) TEXT中的文字錯誤:
在PHONENAME.TXT文件存在着異常字符,如下,使得在PYTHON在讀取文字時出現錯誤報告。
查詢學生原始文件修改對應的金XX文字。
(2)原始PHONENAME格式錯誤:
(‘謝司南’, ‘自82’, ‘08768682118’) :沒有輸入學號
(‘劉澤源’, ‘自85’, ‘08148740305’) :學號與班級顛倒
(‘牛一涵’, ‘自83’, ‘02414128722’)
(‘李申奧’, ‘自83’, ‘02350336881’)
2.統計結果
處理後對於分值的統計結果
▲ 回答問題個數
▲ 回答問題正確數量
▲ 得到分數
▲ 獎勵分數
▲ 回答所使用時間
3.分數綜合
下面將 回答問題次數+得分+獎勵進行統計如下:
▲ 回答問題+得分+獎勵分數分佈
通過以上觀察,可以看到絕大部分的得分處在150~290分之間。通過線性仿射變換,將得分映射到。計分別是問題次數,得分,獎勵的累加和,最終的得分由下公式求得:
rec = [((d[0] + d[1] + d[3]) - 150)/(285-150)*50+50 for d in rec]
rect = [min(max(x,50),100) for x in rec]
plt.hist(rect, 50, alpha=0.75)
plt.grid(True)
▲ 經過映射後的得分統計情況
03生成課堂交互EXCEL
生成兩個EXCEL文件:
SSXY-WECHAT, SSAU_WECHAT。具有Wechat表單。結構如下:
▲ 記錄課堂交互的EXCEL文件結構
※ 相關子程序
1.課堂成績統計子程序
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# WCCOMB.PY -- by Dr. ZhuoQing 2020-06-23
#
# Note:
#============================================================
from head import *
pnid = 24
pndata = 25
idfile = tspgetdopfile(pnid)
datafile = tspgetdopfile(pndata)
printf(idfile, datafile)
#------------------------------------------------------------
iddim = []
namedim = []
wcdim = []
recdim = []
with open(idfile, 'r', encoding='gbk') as f:
for l in (f.readlines()):
l.rstrip('\n')
lsect = l.split()
if len(lsect) < 3: continue
iddim.append(lsect[2])
namedim.append(lsect[1])
wcdim.append(lsect[0])
recdim.append((0,0,0,0,0))
for d in zip(namedim, iddim, wcdim):
if len(d[1]) < 5:
printf(d)
#printf(iddim, namedim, wcdim)
#printf(len(iddim))
#------------------------------------------------------------
with open(datafile, 'r', encoding='gbk') as f:
for l in (f.readlines()):
l.rstrip('\n')
lsect = l.split()
if len(lsect) < 20:
printf(l)
continue
id = namedim.index(lsect[0])
if id < 0:
printf(l)
continue
recdim[id] = (int(lsect[4]), int(lsect[5]), int(lsect[6]), int(lsect[8]), int(lsect[9]))
tspsave('normalrect', name=namedim, id=iddim, rec=recdim)
printf('\a')
#------------------------------------------------------------
# END OF FILE : WCCOMB.PY
#============================================================
(2)生成EXCEL程序:
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# WC2EXCEL.PY -- by Dr. ZhuoQing 2020-06-23
#
# Note:
#============================================================
from headm import *
from inforsub import *
name, id, rec = tspload('normalrect', 'name', 'id', 'rec')
rec = [((d[0] + d[1] + d[3]) - 150)/(285-150)*50+50 for d in rec]
rect = [min(max(x,50),100) for x in rec]
wcau = tspstring2text('wcau')
wcxy = tspstring2text('wcxy')
excelfile = pd.read_excel(wcau, sheet_name='Wechat')
listdata = excelfile.values.tolist()
id = list(id)
#------------------------------------------------------------
for n,l in enumerate(listdata):
if str(l[0]) not in id:
printf('%s not in record.'%l)
continue
index = id.index(str(l[0]))
if index >= 0:
excelfile.iat[n, 2] = rect[index]
else:
excelfile.iat[n, 2] = 0
printf(l)
excelfile.to_excel(wcau, sheet_name='Wechat', index=False)
#------------------------------------------------------------
excelfile = pd.read_excel(wcxy, sheet_name='Wechat')
listdata = excelfile.values.tolist()
id = list(id)
#------------------------------------------------------------
for n,l in enumerate(listdata):
if str(l[0]) not in id:
printf('%s not in record.'%l)
continue
index = id.index(str(l[0]))
if index >= 0:
excelfile.iat[n, 2] = rect[index]
else:
excelfile.iat[n, 2] = 0
printf(l)
excelfile.to_excel(wcxy, sheet_name='Wechat', index=False)
printf('\a')
#------------------------------------------------------------
# END OF FILE : WC2EXCEL.PY
#============================================================