opendata/20210713/README.md

316 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# data_analysis
[TOC]
本项目为openct中的子项目通过分析opentc测试平台中的课程“智能计算素养”来进行数据分析。需要注意的是数据分为结果数据和过程数据两部分目前处理的为结果数据。并且参与测试的有一所初中和一所高中这里对初中和高中的数据进行分别处理。
## 数据处理
首先从后台获得的原始数据以每个学生作为索引index并且包含非常多的属性。其中有意义的属性为
| 属性名称 | 属性实例 | 属性意义 |
| ------------ | ------------------------------------------------------------ | ---------------- |
| start_time | 2021-06-24T09:44:29+08:00 | 开始填写的时间 |
| expire_time | 2021-06-24T11:44:29+08:00 | 过期时间 |
| stop_time | 2021-06-24T10:33:05+08:00 | 提交的时间 |
| school | 区二中实验初中 南溪一中(高中) | 测试学生所在学校 |
| task_answers | ["{\"frame\":{\"level\":\"easy\",\"data\":{\"successRate\":1,\"minJumps\":2,\"jumps\":2,\"path\":[2,0,1]}}}","{\"frame\":{\"level\":\"medium\",\"data\":{\"successRate\":1,\"minJumps\":2,\"jumps\":2,\"path\":[3,1,0]}}}","{\"frame\":{\"level\":\"easy\",\"data\":[\"00\",\"01\",\"02\",\"06\"]}}","{\"frame\":{\"level\":\"medium\",\"data\":[\"00\",\"01\",\"02\",\"03\"]}}","{\"frame\":{\"level\":\"easy\",\"data\":[[0,0,0,0,0,0,0],[0,0,1,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,0,0,0,1]]}}","{\"frame\":{\"level\":\"easy\",\"data\":[\"C_B\",\"A_C\"]}}","{\"frame\":{\"level\":\"medium\",\"data\":[\"B_A\",\"C_A\",\"G_F\",\"D_B\",\"E_B\"]}}","{\"frame\":{\"level\":\"easy\",\"data\":[[[0,4],[0,5],[1,5]],[[0,1],[0,2],[1,2]],[[0,6],[0,7],[1,7]],[[0,10],[0,11],[1,11]]]}}","{\"frame\":{\"level\":\"medium\",\"data\":[[[3,3],[4,3],[5,3],[5,4]],[[0,4],[1,4],[2,4],[2,5]],[[0,0],[1,0],[2,0],[2,1]],[[0,2],[1,2],[2,2],[2,3]],[[3,0],[4,0],[5,0],[5,1]]]}}","{\"frame\":{\"level\":\"easy\",\"data\":[\"06_05\",\"02_09\"]}}","{\"frame\":{\"level\":\"medium\",\"data\":[\"v_16_v_7\",\"v_2_v_6\",\"v_16_v_8\"]}}","{\"frame\":{\"level\":\"easy\",\"data\":[[{\"row\":0,\"col\":0},{\"row\":1,\"col\":2},{\"row\":2,\"col\":1},{\"row\":0,\"col\":2},{\"row\":2,\"col\":4}]]}}","{\"frame\":{\"level\":\"medium\",\"data\":[[{\"row\":2,\"col\":2},{\"row\":1,\"col\":3},{\"row\":1,\"col\":1},{\"row\":0,\"col\":4},{\"row\":2,\"col\":5}]]}}","{\"frame\":{\"level\":\"easy\",\"data\":[2,1]}}","{\"frame\":{\"level\":\"medium\",\"data\":[1,2,1,0,0,0]}}","{\"frame\":{\"level\":\"easy\",\"data\":{\"stamps\":[1,0,1,2],\"start\":1,\"end\":16,\"selected\":true}}}","{\"frame\":{\"level\":\"medium\",\"data\":{\"stamps\":[2,1,1,1],\"start\":6,\"end\":16,\"selected\":true}}}","{\"frame\":{\"level\":\"hard\",\"data\":{\"stamps\":[1,0,1,2],\"start\":1,\"end\":4,\"selected\":false}}}","{\"frame\":{\"level\":\"easy\",\"data\":{\"rotation\":[[0,2,0]],\"lowered\":null}}}","{\"frame\":{\"level\":\"medium\",\"data\":{\"rotation\":[[2,2,0,0,0,0]],\"lowered\":null}}}","{\"frame\":{\"level\":\"hard\",\"data\":{\"rotation\":[[null,null,1,1,1,0],[2,2,0,null,0,null],[null,2,null,null,0,null],[2,0,2,1,null,null]],\"lowered\":[3,3]}}}","{\"frame\":{\"level\":\"easy\",\"data\":{\"sequence\":[1,0,1,0,0,1,1],\"transformation\":[[0],[0,1]]}}}","{\"frame\":{\"level\":\"medium\",\"data\":{\"sequence\":[1,1,0,0,1,1],\"transformation\":[[0,1],[1,0]]}}}"] | 提交的数据 |
### task_answers解析
每个task_answers 由23个frame组成每个frame代表一个试题总共23道试题每个frame中包含有索引为data的主数据。其中frame的格式有以下三种情况
1. None即回话超时数据帧为空。
2. {'data':{'successRate': 1, 'minJumps': 2, 'jumps': 2, 'path': [2, 0, 1]}},即数据内容外层包了一层字典
3. {'successRate': 0, 'minJumps': 2, 'jumps': 3, 'path': [1, 2, 3, 4]}即没有data索引直接为数据内容
总共23个题目以022标号题目提交答案格式有以下几种
01为{'successRate': 1, 'minJumps': 2, 'jumps': 2, 'path': [2, 0, 1]}
23为['00', '01', '02']
4为[[0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0]]
5为['B_A', 'C_A']
6为['B_A', 'C_A', 'G_F', 'D_B', 'E_B']
7为[[[0, 1], [0, 2], [1, 2]],
[[0, 4], [0, 5], [1, 5]],
[[0, 6], [0, 7], [1, 7]],
[[0, 10], [0, 11], [1, 11]]]
8为[[[1, 0], [2, 0], [3, 0], [3, 1]],
[[2, 3], [3, 3], [4, 3], [4, 4]],
[[0, 4], [1, 4], [2, 4], [2, 5]],
[[0, 1], [1, 1], [2, 1], [2, 2]],
[[3, 2], [4, 2], [5, 2], [5, 3]]]
9为['09_02', '05_06']
10为['v_14_v_6', 'v_2_v_16', 'v_15_v_12']
1112为[[{'row': 0, 'col': 0},
{'row': 1, 'col': 2},
{'row': 2, 'col': 1},
{'row': 0, 'col': 2},
{'row': 2, 'col': 4}]]
13为 [2, 1]
14为[1, 2, 1, 2, 2, 3]
15为{'stamps': [1, 0, 1, 2], 'start': 1, 'end': 16, 'selected': True}}
16为{'stamps': [2, 1, 0, 1, 0],
'start': 1,
'end': 5,
'selected': False}
17为{'stamps': [2, 1, 0, 1], 'start': 1, 'end': 5, 'selected': False}
18为{'rotation': [[1, 0, 1]], 'lowered': [0, 0]}
{'rotation': [[2, 2, 0]], 'lowered': None}
19为{'rotation': [[0, 0, 1, 3, 0, 1]], 'lowered': None}
{'rotation': [[2, 3, 1, 0, 0, 1]], 'lowered': [0, 2]}
20为{'rotation': [[None, None, 1, 1, 1, 0],
[1, 1, 3, None, 0, None],
[None, 1, None, None, 0, None],
[1, 1, 1, 0, None, None]],
'lowered': None}
21为{'sequence': [1, 0, 1, 0, 0, 1, 1],
'transformation': [[0], [0, 1]]}
22为{'sequence': [1, 1, 0, 0, 1, 0, 1],
'transformation': [[0], [1, 0]]}
### 处理结果和输出文件
首先将task_answers中的内容提取出来剔除所有的索引文字
按照学校分为三类装在三个文件夹里:`/output/default`, `/output/junior`, `/output/senior`
default中存有初中和高中所有学生的数据
junior中存有初中的数据
senior中存有高中的数据
所有存储的excel分为两类
1. `i.xlsx`
该文件中存储第i个题目的对应用户用户答案的编码已经去除文字描述
举个例子:
<img src="README.assets/image-20210629231107880.png" alt="image-20210629231107880" style="zoom:50%;" />
只有两列数据,第一列为对应学生`index`,第二列为删去所有文字描述的回答编码。
2. `i_count.xlsx`
该文件中存储第i个题目中的各种答案的编码和对应答案的出现次数
举个例子:
<img src="README.assets/image-20210629231546839.png" alt="image-20210629231546839" style="zoom:50%;" />
有两种情况,如果计算了正确率,则有四列,如上图所示,`count`代表对应回答出现的次数,`success`表示这种回答是否正确现在只有第01题有是否回答正确的标签所以现在只有`0_count.xlsx`, `1_count.xlsx`中有`success`这一属性。0代表回答错误1代表回答正确
## 数据分析
### 做题时长
原始数据中有学生答题的开始时间和结束时间通过计算时间差得出做完23道题的时长单位为秒。
同上仍是将原始数据分为三部分进行分析全部数据all、初中学生junior、高中学生senior的分布情况并对比最终绘图为html格式需要使用浏览器查看。
对于全部数据all、初中学生junior、高中学生senior各自的分布情况存储在`plot\default\time.html`, `plot\default\time.html`, `plot\default\time.html`,如下所示:
1. 全部数据all的做题时长分布-1为超时数据
![image-20210629235156773](README.assets/image-20210629235156773.png)
2. 初中学生junior
![image-20210629235333868](README.assets/image-20210629235333868.png)
3. 高中学生senior
![image-20210629235355768](README.assets/image-20210629235355768.png)
将三类数据放在一起展示:
![image-20210629235513861](README.assets/image-20210629235513861.png)
### 每道题的编码种类
如上面所阐述的那样,编码种类和每种多少学生存储在`/output`中的excel表格中23道题的编码种类柱状图如下所示
![image-20210630000054539](README.assets/image-20210630000054539.png)
### 正确率对比
目前更新到第13题index=12
![image-20210713170927608](README.assets/image-20210713170927608.png)
该图片文件保存为`./plot/plot_problem_accuracy.html`
#### 第10题浇花1正确率
节点编码:
<img src="README.assets/9C11C850A863D265A8EBB8BF27229A5E.png" alt="img" style="zoom:50%;" />
| 正确答案: | 总数样本数(/占比) | 初中样本数(/占比) | 高中样本数(/占比) |
| ------------------------------------------------------------ | ------------------- | ------------------- | ------------------- |
| ![image-20210707131422596](README.assets/image-20210707131422596.png)02_09,05_06) | 480/72.5% | 158/59.2% | 322/84.1% |
| ![image-20210707131549816](README.assets/image-20210707131549816.png)(02_05,06_09) | 68/10.3% | 37/13.9% | 31/7.8% |
| ![image-20210707131440163](README.assets/image-20210707131440163.png)(02_06,05_09) | 39/5.9% | 4/5.6% | 24/6.1% |
![image-20210707133345761](README.assets/image-20210707133345761.png)
该图片存储为:`./plot/plot_problem_浇花1_accuracy.html`
#### 第11题浇花2正确率
节点编码为:
<img src="README.assets/FFD55D977B71720931FCB9E4A145512F.png" alt="img" style="zoom:50%;" />
| 正确答案: | 总数样本数(/占比) | 初中样本数(/占比) | 高中样本数(/占比) |
| ------------------------- | ------------------- | ------------------- | ------------------- |
| ['2_16', '6_15', '12_14'] | 225 | 63 | 162 |
| ['2_15', '6_16', '12_14'] | 60 | 19 | 41 |
| ['2_12', '6_14', '15_16'] | 51 | 26 | 25 |
| ['2_12', '6_15', '14_16'] | 29 | 4 | 25 |
| ['2_14', '6_12', '15_16'] | 25 | 15 | 10 |
| ['2_14', '6_15', '12_16'] | 22 | 7 | 15 |
| ['2_16', '6_14', '12_15'] | 15 | 4 | 11 |
| ['2_15', '6_14', '12_16'] | 15 | 6 | 9 |
| ['2_14', '6_16', '12_15'] | 8 | 2 | 6 |
| ['2_15', '6_12', '14_16'] | 7 | 2 | 5 |
| ['2_6', '12_14', '15_16'] | 3 | 0 | 3 |
| ['2_6', '12_16', '14_15'] | 2 | 0 | 2 |
| ['2_6', '12_15', '14_16'] | 0 | 0 | 0 |
| ['2_16', '6_12', '14_15'] | 0 | 0 | 0 |
| ['2_12', '6_16', '14_15'] | 0 | 0 | 0 |
![image-20210707163734355](README.assets/image-20210707163734355.png)
图片文件存储为:`./plot/plot_problem_浇花2_accuracy.html`
#### 第16供水系统1、17供水系统2题对应index=18、19
第16题供水系统1答案应为
| 正确答案: | 总数样本数(/占比) | 初中样本数(/占比) | 高中样本数(/占比) |
| ------------------- | ------------------- | ------------------- | ------------------- |
| [[[2, 2, 0]], None] | 161 | 77 | 84 |
| [[[0, 0, 2]], None] | 107 | 33 | 74 |
| [[[0, 2, 0]], None] | 89 | 24 | 65 |
| [[[2, 0, 2]], None] | 68 | 25 | 43 |
| [[[0, 2, 2]], None] | 51 | 18 | 38 |
| [[[0, 0, 0]], None] | 42 | 18 | 24 |
| [[[2, 2, 2]], None] | 41 | 18 | 23 |
| [[[2, 0, 0]], None] | 36 | 9 | 27 |
![image-20210713120142733](README.assets/image-20210713120142733.png)
图片文件存储为:`./plot/plot_problem_供水系统1_accuracy.html`
####
#### 第17题正确答案共64种
![image-20210713120113003](README.assets/image-20210713120113003.png)
图片文件存储为:`./plot/plot_problem_供水系统2_accuracy.html`
####
#### 第18题和第19题对应index=21、22
第18题只有一种正确答案
但是第19题可能具有多种正确答案
![image-20210713144119491](README.assets/image-20210713144119491.png)
将五角星编码为'0',将三角形编码为'1'
则最终的五角星三角形序列则可能有$2^9-2$种可能
$$
2^8+2^7+....+2^1=2^9-2
$$
同时将长方形编码为1圆形编码为0。五角星和三角形的编码有$2^4-2$种可能
那么遍历这些编码,找出所有的正确编码
```python
# 所有可能的五角星0,a和三角形1,b组合
seq_list = []
for i in range(8):
for j in range(int(math.pow(2,i+1))):
temp=str(bin(j))[2:].zfill(i+1).replace('0','a')
temp = temp.replace('1', 'b')
seq_list.append(temp)
# 所有可能的长方形1和圆形0组合
trans_list = []
for i in range(3):
for j in range(int(math.pow(2,i+1))):
trans_list.append(str(bin(j))[2:].zfill(i+1))
# 正确序列
verify_str = '10100010010'
right_ans = []
cnt = 0
for seq in seq_list:
for star in trans_list:
for trian in trans_list:
cnt +=1
if seq.replace('a', star).replace('b', trian) == verify_str:
right_ans.append([seq.replace('a','0').replace('b','1'), star, trian])
right_ans
```
通过遍历,得出正确答案只有两种:
[['0011010', '10', '0']
<img src="README.assets/image-20210713152150571.png" alt="image-20210713152150571" style="zoom:50%;" />
['1100101', '0', '10']]
<img src="README.assets/image-20210713152107000.png" alt="image-20210713152107000" style="zoom:50%;" />
![image-20210713154401783](README.assets/image-20210713154401783.png)
图片文件存储为:`./plot/plot_problem_对应的形状2_accuracy.html`
####