3.9 KiB
3.9 KiB
过程性数据处理
使用过程性数据补充结果性数据中缺失的结束时间,以此可以重新进行结果性数据分析中的学生作答时长分析部分
- split.py - 从系统抓取的全部原始数据中分割出属于各答卷的部分
- get_stoptime_a.py - 使用过程性数据中补充a卷结果性数据中缺失的结束时间
- get_stoptime_z.py - 使用过程性数据中补充z卷结果性数据中缺失的结束时间
- statistic_time.py - 重新进行作答时长统计
从原始过程性数据中构造出学生的个性化特征指标数据集,对每位学生作答每页具体题目均给出6项特征值
- preprocess_processdata_A.py - 预处理原始过程性数据,增加对每个数据记录的特征标记
- getcharacter_processdata_A.py - 分析已完成预处理的过程性数据,得到学生个性化特征指标数据集
特征值
Time:在每个页面上停留时间
- 仅考虑所有“有效停留”的时间总和,“有效停留”定义为在该页面上停留时间长于1秒
- 目前只能对每个页面的用时进行区别,在少数情况下,一个页面上会放置多个题目,但此时学生很可能不按顺序作答题目,因此放弃处理,只分析学生在每个页面上停留的时间(其他特征值同理)
- 划分每道题目用时的代码逻辑:
- 新增两列page,page_time,在每页结束行的对应行(即每个page结束后第一个page改变行)标注该page的使用时长
- 若改变了用户id或task_name,则当前时间设为starttime(即第一道题的开始时间)
- 若改变了page且page!=1,即page != old_page and page!=1,则当前时间设为old_page的stoptime,和记录的starttime进行运算,记录old_page加到page列中,记录时间差加到page_time列中
Repeat:作答完成每个页面后,返回该页面查看的次数
- 指除正常按顺序查看本页面之外,学生在作答其他页面的题目时,可能希望重新查看该页面作为参考,每次回到本页面视为一次返回
- 因为答题系统不能跳跃查看题目,如作答第5页面时希望参考第3页面,这就需要在4页面上短暂停留,但这一访问4页面的动作其实是无意义的,因此在分析时在页面的停留时间大于1秒才视为1次有效的返回停留
- 可以根据上一步得到的page和pagetime列直接处理得到
Revise:在每个页面上修改次数
- 对选择题:修改答案(容易得到)
- 对填空题:将一个连续删除序列视为一次修改(不容易得到,因为是逐行读取数据,这其实需要3行数据)
- 增加edit列,标注每行是否是修改动作,对该列统计得到
Before:进入每个页面,到第一次作答的时间
- 定位每页的第一次修改和上一个动作的时间差
- 增加before列,在每页的第一次修改行、写入该行和上一行的时间差,取该列的值得到
After:第一次完成每个页面作答,到离开页面的时间
- 答题系统的设计逻辑是:只有完成前一页题目,才能进入下一页题目,因此首次进入每页题目的前一个动作,必定是前一页题目的完成动作。
- 定位某页的第一次进入和上一个动作的时间差
- 增加after列,在每页的第一次进入行、写入该行和上一行的时间差,取该列的值得到
AR:作答完成每个页面后,返回该页面修改的次数
- 答题系统的设计逻辑是:只有完成前一页题目,才能进入下一页题目,因此首次进入每页题目的前一个动作,必定是前一页题目的完成动作。
- 直接取每行对应的page(非page列)判断得到完成后返回的行,取和前文得到的edit列的交集
- 增加AR列,对该列统计得到
- 修改总次数 = 完成后修改次数 + 完成前修改次数
- 判断完成后返回行、第一次进入的动作可同时进行