openbrain/pydata-han/Process/README.md

3.9 KiB
Raw Permalink Blame History

过程性数据处理

使用过程性数据补充结果性数据中缺失的结束时间,以此可以重新进行结果性数据分析中的学生作答时长分析部分

  • 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秒
  • 目前只能对每个页面的用时进行区别,在少数情况下,一个页面上会放置多个题目,但此时学生很可能不按顺序作答题目,因此放弃处理,只分析学生在每个页面上停留的时间(其他特征值同理)
  • 划分每道题目用时的代码逻辑:
    • 新增两列pagepage_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列对该列统计得到
  • 修改总次数 = 完成后修改次数 + 完成前修改次数
  • 判断完成后返回行、第一次进入的动作可同时进行