MDL-41756 (2) quiz statistics : break down question stats by variant

This commit is contained in:
James Pratt 2013-11-30 18:50:15 +07:00
parent aa05ae5da3
commit 1239d28776
11 changed files with 649 additions and 483 deletions

View file

@ -1476,6 +1476,7 @@
<FIELD NAME="questionid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="slot" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="The position in the quiz where this question appears"/>
<FIELD NAME="subquestion" TYPE="int" LENGTH="4" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="variant" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="s" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="effectiveweight" TYPE="number" LENGTH="15" NOTNULL="false" SEQUENCE="false" DECIMALS="5"/>
<FIELD NAME="negcovar" TYPE="int" LENGTH="2" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>

View file

@ -2927,5 +2927,20 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2014011701.00);
}
if ($oldversion < 2014012300.01) {
// Define field variant to be added to question_statistics.
$table = new xmldb_table('question_statistics');
$field = new xmldb_field('variant', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'subquestion');
// Conditionally launch add field variant.
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
// Main savepoint reached.
upgrade_main_savepoint(true, 2014012300.01);
}
return true;
}

View file

@ -66,6 +66,7 @@ $string['lastattemptsavg'] = 'Average grade of last attempts';
$string['lastcalculated'] = 'Last calculated {$a->lastcalculated} ago there have been {$a->count} attempts since then.';
$string['median'] = 'Median grade (for {$a})';
$string['modelresponse'] = 'Model response';
$string['nameforvariant'] = 'Variant {$a->variant} of {$a->name}';
$string['negcovar'] = 'Negative covariance of grade with total attempt grade';
$string['negcovar_help'] = 'This question\'s grade for this set of attempts on the quiz varies in an opposite way to the overall attempt grade. This means overall attempt grade tends to be below average when the grade for this question is above average and vice-versa.

View file

@ -412,6 +412,12 @@ class quiz_statistics_report extends quiz_default_report {
foreach ($questionstats as $questionstat) {
// Output the data for these question statistics.
$this->table->add_data_keyed($this->table->format_row($questionstat));
if (count($questionstat->variantstats) > 1) {
ksort($questionstat->variantstats);
foreach ($questionstat->variantstats as $variantstat) {
$this->table->add_data_keyed($this->table->format_row($variantstat));
}
}
if (empty($questionstat->subquestions)) {
continue;
@ -419,9 +425,21 @@ class quiz_statistics_report extends quiz_default_report {
// And its subquestions, if it has any.
$subitemstodisplay = explode(',', $questionstat->subquestions);
$displayorder = 1;
foreach ($subitemstodisplay as $subitemid) {
$subquestionstats[$subitemid]->maxmark = $questionstat->maxmark;
$subquestionstats[$subitemid]->subqdisplayorder = $displayorder;
$subquestionstats[$subitemid]->question->number = $questionstat->question->number;
$this->table->add_data_keyed($this->table->format_row($subquestionstats[$subitemid]));
if (count($subquestionstats[$subitemid]->variantstats) > 1) {
ksort($subquestionstats[$subitemid]->variantstats);
foreach ($subquestionstats[$subitemid]->variantstats as $variantstat) {
$variantstat->subqdisplayorder = $displayorder;
$variantstat->question->number = $questionstat->question->number;
$this->table->add_data_keyed($this->table->format_row($variantstat));
}
}
$displayorder++;
}
}

View file

@ -136,11 +136,17 @@ class quiz_statistics_table extends flexible_table {
* @return string contents of this table cell.
*/
protected function col_number($questionstat) {
$number = $questionstat->question->number;
if ($questionstat->subquestion) {
return '';
$number = $number . '.'.$questionstat->subqdisplayorder;
}
return $questionstat->question->number;
if ($questionstat->question->qtype != 'random' && !is_null($questionstat->variant)) {
$number = $number . '.'.$questionstat->variant;
}
return $number;
}
/**
@ -180,6 +186,13 @@ class quiz_statistics_table extends flexible_table {
protected function col_name($questionstat) {
$name = $questionstat->question->name;
if (!is_null($questionstat->variant)) {
$a = new stdClass();
$a->name = $name;
$a->variant = $questionstat->variant;
$name = get_string('nameforvariant', 'quiz_statistics', $a);
}
if ($this->is_downloading()) {
return $name;
}

View file

@ -1,441 +1,441 @@
id,sumgrades,questionid,slot,maxmark,mark
39872,12,1,1,1,0
39873,12,2,2,1,0
39874,12,3,3,1,0
39875,12,4,4,1,0
39896,12,5,5,0,0
39897,12,6,6,0,0
39898,12,7,7,0,0
39899,12,8,8,8,5.5
39900,12,14,9,1,0.3
39901,12,15,10,1,0.9
39902,12,16,11,1,1
39903,12,17,12,1,0.3
39910,12,18,19,1,0
39911,12,19,20,1,1
39908,12,20,17,1,1
39909,12,21,18,1,0
39905,12,22,14,1,0
39906,12,23,15,1,0
39907,12,24,16,1,1
39904,12,25,13,1,1
39992,7.4,1,1,1,0
39993,7.4,2,2,1,0
39994,7.4,3,3,1,0
39995,7.4,4,4,1,0
40016,7.4,5,5,0,0
40017,7.4,6,6,0,0
40018,7.4,7,7,0,0
40019,7.4,8,8,8,1
40020,7.4,14,9,1,0.9
40021,7.4,15,10,1,0.9
40022,7.4,16,11,1,0.3
40023,7.4,17,12,1,0.3
40030,7.4,18,19,1,0
40031,7.4,19,20,1,1
40028,7.4,20,17,1,0
40029,7.4,21,18,1,1
40025,7.4,22,14,1,0
40026,7.4,23,15,1,0
40027,7.4,24,16,1,1
40024,7.4,25,13,1,1
40032,11.7,1,1,1,0
40033,11.7,2,2,1,0
40034,11.7,3,3,1,0
40035,11.7,4,4,1,0
40056,11.7,5,5,0,0
40057,11.7,6,6,0,0
40058,11.7,7,7,0,0
40059,11.7,8,8,8,2.5
40060,11.7,14,9,1,1
40061,11.7,15,10,1,0.9
40062,11.7,16,11,1,0.3
40063,11.7,17,12,1,1
40070,11.7,18,19,1,1
40071,11.7,19,20,1,1
40068,11.7,20,17,1,1
40069,11.7,21,18,1,1
40065,11.7,22,14,1,0
40066,11.7,23,15,1,1
40067,11.7,24,16,1,1
40064,11.7,25,13,1,0
39352,8.5,1,1,1,0
39353,8.5,2,2,1,0
39354,8.5,3,3,1,0
39355,8.5,4,4,1,0
39376,8.5,5,5,0,0
39377,8.5,6,6,0,0
39378,8.5,7,7,0,0
39379,8.5,8,8,8,4
39380,8.5,14,9,1,0.3
39381,8.5,15,10,1,0.9
39382,8.5,16,11,1,1
39383,8.5,17,12,1,0.3
39390,8.5,18,19,1,0
39391,8.5,19,20,1,1
39388,8.5,20,17,1,1
39389,8.5,21,18,1,0
39385,8.5,22,14,1,0
39386,8.5,23,15,1,0
39387,8.5,24,16,1,0
39384,8.5,25,13,1,0
37112,10.1,1,1,1,0
37113,10.1,2,2,1,0
37114,10.1,3,3,1,0
37115,10.1,4,4,1,0
37136,10.1,5,5,0,0
37137,10.1,6,6,0,0
37138,10.1,7,7,0,0
37139,10.1,8,8,8,3
37140,10.1,14,9,1,0.9
37141,10.1,15,10,1,0.3
37142,10.1,16,11,1,0.9
37143,10.1,17,12,1,1
37150,10.1,18,19,1,1
37151,10.1,19,20,1,0
37148,10.1,20,17,1,1
37149,10.1,21,18,1,1
37145,10.1,22,14,1,1
37146,10.1,23,15,1,0
37147,10.1,24,16,1,0
37144,10.1,25,13,1,0
37432,11.3,1,1,1,0
37433,11.3,2,2,1,0
37434,11.3,3,3,1,0
37435,11.3,4,4,1,0
37456,11.3,5,5,0,0
37457,11.3,6,6,0,0
37458,11.3,7,7,0,0
37459,11.3,8,8,8,4.5
37460,11.3,14,9,1,0.9
37461,11.3,15,10,1,1
37462,11.3,16,11,1,1
37463,11.3,17,12,1,0.9
37470,11.3,18,19,1,0
37471,11.3,19,20,1,0
37468,11.3,20,17,1,0
37469,11.3,21,18,1,0
37465,11.3,22,14,1,1
37466,11.3,23,15,1,1
37467,11.3,24,16,1,1
37464,11.3,25,13,1,0
37472,11.2,1,1,1,0
37473,11.2,2,2,1,0
37474,11.2,3,3,1,0
37475,11.2,4,4,1,0
37496,11.2,5,5,0,0
37497,11.2,6,6,0,0
37498,11.2,7,7,0,0
37499,11.2,8,8,8,3
37500,11.2,14,9,1,0.3
37501,11.2,15,10,1,0.3
37502,11.2,16,11,1,0.3
37503,11.2,17,12,1,0.3
37510,11.2,18,19,1,1
37511,11.2,19,20,1,1
37508,11.2,20,17,1,1
37509,11.2,21,18,1,1
37505,11.2,22,14,1,0
37506,11.2,23,15,1,1
37507,11.2,24,16,1,1
37504,11.2,25,13,1,1
37632,14.1,1,1,1,0
37633,14.1,2,2,1,0
37634,14.1,3,3,1,0
37635,14.1,4,4,1,0
37656,14.1,5,5,0,0
37657,14.1,6,6,0,0
37658,14.1,7,7,0,0
37659,14.1,8,8,8,6
37660,14.1,14,9,1,0.9
37661,14.1,15,10,1,0.9
37662,14.1,16,11,1,1
37663,14.1,17,12,1,0.3
37670,14.1,18,19,1,0
37671,14.1,19,20,1,1
37668,14.1,20,17,1,1
37669,14.1,21,18,1,0
37665,14.1,22,14,1,1
37666,14.1,23,15,1,1
37667,14.1,24,16,1,1
37664,14.1,25,13,1,0
37672,8.6,1,1,1,0
37673,8.6,2,2,1,0
37674,8.6,3,3,1,0
37675,8.6,4,4,1,0
37696,8.6,5,5,0,0
37697,8.6,6,6,0,0
37698,8.6,7,7,0,0
37699,8.6,8,8,8,0.5
37700,8.6,14,9,1,0.9
37701,8.6,15,10,1,1
37702,8.6,16,11,1,0.9
37703,8.6,17,12,1,0.3
37710,8.6,18,19,1,0
37711,8.6,19,20,1,1
37708,8.6,20,17,1,1
37709,8.6,21,18,1,1
37705,8.6,22,14,1,1
37706,8.6,23,15,1,1
37707,8.6,24,16,1,0
37704,8.6,25,13,1,0
37712,11.6,1,1,1,0
37713,11.6,2,2,1,0
37714,11.6,3,3,1,0
37715,11.6,4,4,1,0
37736,11.6,5,5,0,0
37737,11.6,6,6,0,0
37738,11.6,7,7,0,0
37739,11.6,8,8,8,5.5
37740,11.6,14,9,1,0.9
37741,11.6,15,10,1,1
37742,11.6,16,11,1,0.9
37743,11.6,17,12,1,0.3
37750,11.6,18,19,1,0
37751,11.6,19,20,1,0
37748,11.6,20,17,1,1
37749,11.6,21,18,1,0
37745,11.6,22,14,1,1
37746,11.6,23,15,1,0
37747,11.6,24,16,1,0
37744,11.6,25,13,1,1
38072,9.3,1,1,1,0
38073,9.3,2,2,1,0
38074,9.3,3,3,1,0
38075,9.3,4,4,1,0
38096,9.3,5,5,0,0
38097,9.3,6,6,0,0
38098,9.3,7,7,0,0
38099,9.3,8,8,8,2.5
38100,9.3,14,9,1,0.9
38101,9.3,15,10,1,1
38102,9.3,16,11,1,1
38103,9.3,17,12,1,0.9
38110,9.3,18,19,1,0
38111,9.3,19,20,1,1
38108,9.3,20,17,1,1
38109,9.3,21,18,1,0
38105,9.3,22,14,1,1
38106,9.3,23,15,1,0
38107,9.3,24,16,1,0
38104,9.3,25,13,1,0
38232,13.1,1,1,1,0
38233,13.1,2,2,1,0
38234,13.1,3,3,1,0
38235,13.1,4,4,1,0
38256,13.1,5,5,0,0
38257,13.1,6,6,0,0
38258,13.1,7,7,0,0
38259,13.1,8,8,8,4
38260,13.1,14,9,1,0.9
38261,13.1,15,10,1,0.3
38262,13.1,16,11,1,0.9
38263,13.1,17,12,1,1
38270,13.1,18,19,1,0
38271,13.1,19,20,1,1
38268,13.1,20,17,1,1
38269,13.1,21,18,1,1
38265,13.1,22,14,1,1
38266,13.1,23,15,1,1
38267,13.1,24,16,1,1
38264,13.1,25,13,1,0
38272,11.5,1,1,1,0
38273,11.5,2,2,1,0
38274,11.5,3,3,1,0
38275,11.5,4,4,1,0
38296,11.5,5,5,0,0
38297,11.5,6,6,0,0
38298,11.5,7,7,0,0
38299,11.5,8,8,8,4
38300,11.5,14,9,1,0.9
38301,11.5,15,10,1,0.3
38302,11.5,16,11,1,0.3
38303,11.5,17,12,1,1
38310,11.5,18,19,1,1
38311,11.5,19,20,1,0
38308,11.5,20,17,1,0
38309,11.5,21,18,1,1
38305,11.5,22,14,1,1
38306,11.5,23,15,1,1
38307,11.5,24,16,1,0
38304,11.5,25,13,1,1
38472,11.3,1,1,1,0
38473,11.3,2,2,1,0
38474,11.3,3,3,1,0
38475,11.3,4,4,1,0
38496,11.3,5,5,0,0
38497,11.3,6,6,0,0
38498,11.3,7,7,0,0
38499,11.3,8,8,8,3
38500,11.3,14,9,1,1
38501,11.3,15,10,1,1
38502,11.3,16,11,1,0.3
38503,11.3,17,12,1,1
38510,11.3,18,19,1,1
38511,11.3,19,20,1,0
38508,11.3,20,17,1,1
38509,11.3,21,18,1,1
38505,11.3,22,14,1,1
38506,11.3,23,15,1,0
38507,11.3,24,16,1,1
38504,11.3,25,13,1,0
38632,5.5,1,1,1,0
38633,5.5,2,2,1,0
38634,5.5,3,3,1,0
38635,5.5,4,4,1,0
38656,5.5,5,5,0,0
38657,5.5,6,6,0,0
38658,5.5,7,7,0,0
38659,5.5,8,8,8,1
38660,5.5,14,9,1,1
38661,5.5,15,10,1,0.9
38662,5.5,16,11,1,0.3
38663,5.5,17,12,1,0.3
38670,5.5,18,19,1,0
38671,5.5,19,20,1,0
38668,5.5,20,17,1,0
38669,5.5,21,18,1,0
38665,5.5,22,14,1,0
38666,5.5,23,15,1,1
38667,5.5,24,16,1,0
38664,5.5,25,13,1,1
38672,4.8,1,1,1,0
38673,4.8,2,2,1,0
38674,4.8,3,3,1,0
38675,4.8,4,4,1,0
38696,4.8,5,5,0,0
38697,4.8,6,6,0,0
38698,4.8,7,7,0,0
38699,4.8,8,8,8,1
38700,4.8,14,9,1,0.3
38701,4.8,15,10,1,0.3
38702,4.8,16,11,1,0.3
38703,4.8,17,12,1,0.9
38710,4.8,18,19,1,0
38711,4.8,19,20,1,1
38708,4.8,20,17,1,0
38709,4.8,21,18,1,0
38705,4.8,22,14,1,0
38706,4.8,23,15,1,0
38707,4.8,24,16,1,1
38704,4.8,25,13,1,0
38992,8.7,1,1,1,0
38993,8.7,2,2,1,0
38994,8.7,3,3,1,0
38995,8.7,4,4,1,0
39016,8.7,5,5,0,0
39017,8.7,6,6,0,0
39018,8.7,7,7,0,0
39019,8.7,8,8,8,1.5
39020,8.7,14,9,1,1
39021,8.7,15,10,1,0.3
39022,8.7,16,11,1,0.9
39023,8.7,17,12,1,1
39030,8.7,18,19,1,0
39031,8.7,19,20,1,0
39028,8.7,20,17,1,1
39029,8.7,21,18,1,0
39025,8.7,22,14,1,1
39026,8.7,23,15,1,0
39027,8.7,24,16,1,1
39024,8.7,25,13,1,1
39032,11.8,1,1,1,0
39033,11.8,2,2,1,0
39034,11.8,3,3,1,0
39035,11.8,4,4,1,0
39056,11.8,5,5,0,0
39057,11.8,6,6,0,0
39058,11.8,7,7,0,0
39059,11.8,8,8,8,4
39060,11.8,14,9,1,0.9
39061,11.8,15,10,1,1
39062,11.8,16,11,1,0.9
39063,11.8,17,12,1,1
39070,11.8,18,19,1,0
39071,11.8,19,20,1,0
39068,11.8,20,17,1,0
39069,11.8,21,18,1,1
39065,11.8,22,14,1,1
39066,11.8,23,15,1,1
39067,11.8,24,16,1,1
39064,11.8,25,13,1,0
39272,6,1,1,1,0
39273,6,2,2,1,0
39274,6,3,3,1,0
39275,6,4,4,1,0
39296,6,5,5,0,0
39297,6,6,6,0,0
39298,6,7,7,0,0
39299,6,8,8,8,2
39300,6,14,9,1,0.9
39301,6,15,10,1,0.9
39302,6,16,11,1,0.3
39303,6,17,12,1,0.9
39310,6,18,19,1,0
39311,6,19,20,1,0
39308,6,20,17,1,0
39309,6,21,18,1,0
39305,6,22,14,1,1
39306,6,23,15,1,0
39307,6,24,16,1,0
39304,6,25,13,1,0
36192,5.9,1,1,1,0
36193,5.9,2,2,1,0
36194,5.9,3,3,1,0
36195,5.9,4,4,1,0
36216,5.9,5,5,0,0
36217,5.9,6,6,0,0
36218,5.9,7,7,0,0
36219,5.9,8,8,8,1
36220,5.9,14,9,1,1
36221,5.9,15,10,1,0.3
36222,5.9,16,11,1,0.3
36223,5.9,17,12,1,0.3
36230,5.9,18,19,1,0
36231,5.9,19,20,1,0
36228,5.9,20,17,1,1
36229,5.9,21,18,1,0
36225,5.9,22,14,1,1
36226,5.9,23,15,1,1
36227,5.9,24,16,1,0
36224,5.9,25,13,1,0
36352,12.8,1,1,1,0
36353,12.8,2,2,1,0
36354,12.8,3,3,1,0
36355,12.8,4,4,1,0
36376,12.8,5,5,0,0
36377,12.8,6,6,0,0
36378,12.8,7,7,0,0
36379,12.8,8,8,8,6
36380,12.8,14,9,1,0.9
36381,12.8,15,10,1,1
36382,12.8,16,11,1,1
36383,12.8,17,12,1,0.9
36390,12.8,18,19,1,1
36391,12.8,19,20,1,1
36388,12.8,20,17,1,0
36389,12.8,21,18,1,0
36385,12.8,22,14,1,0
36386,12.8,23,15,1,0
36387,12.8,24,16,1,1
36384,12.8,25,13,1,0
36832,13.8,1,1,1,0
36833,13.8,2,2,1,0
36834,13.8,3,3,1,0
36835,13.8,4,4,1,0
36856,13.8,5,5,0,0
36857,13.8,6,6,0,0
36858,13.8,7,7,0,0
36859,13.8,8,8,8,7
36860,13.8,14,9,1,0.9
36861,13.8,15,10,1,0.3
36862,13.8,16,11,1,0.3
36863,13.8,17,12,1,0.3
36870,13.8,18,19,1,0
36871,13.8,19,20,1,0
36868,13.8,20,17,1,1
36869,13.8,21,18,1,1
36865,13.8,22,14,1,0
36866,13.8,23,15,1,1
36867,13.8,24,16,1,1
36864,13.8,25,13,1,1
id,sumgrades,questionid,slot,maxmark,mark,variant
39872,12,1,1,1,0,1
39873,12,2,2,1,0,1
39874,12,3,3,1,0,1
39875,12,4,4,1,0,1
39896,12,5,5,0,0,1
39897,12,6,6,0,0,1
39898,12,7,7,0,0,1
39899,12,8,8,8,5.5,1
39900,12,14,9,1,0.3,1
39901,12,15,10,1,0.9,1
39902,12,16,11,1,1,1
39903,12,17,12,1,0.3,1
39910,12,18,19,1,0,1
39911,12,19,20,1,1,1
39908,12,20,17,1,1,1
39909,12,21,18,1,0,1
39905,12,22,14,1,0,1
39906,12,23,15,1,0,1
39907,12,24,16,1,1,1
39904,12,25,13,1,1,1
39992,7.4,1,1,1,0,1
39993,7.4,2,2,1,0,1
39994,7.4,3,3,1,0,1
39995,7.4,4,4,1,0,1
40016,7.4,5,5,0,0,1
40017,7.4,6,6,0,0,1
40018,7.4,7,7,0,0,1
40019,7.4,8,8,8,1,1
40020,7.4,14,9,1,0.9,1
40021,7.4,15,10,1,0.9,1
40022,7.4,16,11,1,0.3,1
40023,7.4,17,12,1,0.3,1
40030,7.4,18,19,1,0,1
40031,7.4,19,20,1,1,1
40028,7.4,20,17,1,0,1
40029,7.4,21,18,1,1,1
40025,7.4,22,14,1,0,1
40026,7.4,23,15,1,0,1
40027,7.4,24,16,1,1,1
40024,7.4,25,13,1,1,1
40032,11.7,1,1,1,0,1
40033,11.7,2,2,1,0,1
40034,11.7,3,3,1,0,1
40035,11.7,4,4,1,0,1
40056,11.7,5,5,0,0,1
40057,11.7,6,6,0,0,1
40058,11.7,7,7,0,0,1
40059,11.7,8,8,8,2.5,1
40060,11.7,14,9,1,1,1
40061,11.7,15,10,1,0.9,1
40062,11.7,16,11,1,0.3,1
40063,11.7,17,12,1,1,1
40070,11.7,18,19,1,1,1
40071,11.7,19,20,1,1,1
40068,11.7,20,17,1,1,1
40069,11.7,21,18,1,1,1
40065,11.7,22,14,1,0,1
40066,11.7,23,15,1,1,1
40067,11.7,24,16,1,1,1
40064,11.7,25,13,1,0,1
39352,8.5,1,1,1,0,1
39353,8.5,2,2,1,0,1
39354,8.5,3,3,1,0,1
39355,8.5,4,4,1,0,1
39376,8.5,5,5,0,0,1
39377,8.5,6,6,0,0,1
39378,8.5,7,7,0,0,1
39379,8.5,8,8,8,4,1
39380,8.5,14,9,1,0.3,1
39381,8.5,15,10,1,0.9,1
39382,8.5,16,11,1,1,1
39383,8.5,17,12,1,0.3,1
39390,8.5,18,19,1,0,1
39391,8.5,19,20,1,1,1
39388,8.5,20,17,1,1,1
39389,8.5,21,18,1,0,1
39385,8.5,22,14,1,0,1
39386,8.5,23,15,1,0,1
39387,8.5,24,16,1,0,1
39384,8.5,25,13,1,0,1
37112,10.1,1,1,1,0,1
37113,10.1,2,2,1,0,1
37114,10.1,3,3,1,0,1
37115,10.1,4,4,1,0,1
37136,10.1,5,5,0,0,1
37137,10.1,6,6,0,0,1
37138,10.1,7,7,0,0,1
37139,10.1,8,8,8,3,1
37140,10.1,14,9,1,0.9,1
37141,10.1,15,10,1,0.3,1
37142,10.1,16,11,1,0.9,1
37143,10.1,17,12,1,1,1
37150,10.1,18,19,1,1,1
37151,10.1,19,20,1,0,1
37148,10.1,20,17,1,1,1
37149,10.1,21,18,1,1,1
37145,10.1,22,14,1,1,1
37146,10.1,23,15,1,0,1
37147,10.1,24,16,1,0,1
37144,10.1,25,13,1,0,1
37432,11.3,1,1,1,0,1
37433,11.3,2,2,1,0,1
37434,11.3,3,3,1,0,1
37435,11.3,4,4,1,0,1
37456,11.3,5,5,0,0,1
37457,11.3,6,6,0,0,1
37458,11.3,7,7,0,0,1
37459,11.3,8,8,8,4.5,1
37460,11.3,14,9,1,0.9,1
37461,11.3,15,10,1,1,1
37462,11.3,16,11,1,1,1
37463,11.3,17,12,1,0.9,1
37470,11.3,18,19,1,0,1
37471,11.3,19,20,1,0,1
37468,11.3,20,17,1,0,1
37469,11.3,21,18,1,0,1
37465,11.3,22,14,1,1,1
37466,11.3,23,15,1,1,1
37467,11.3,24,16,1,1,1
37464,11.3,25,13,1,0,1
37472,11.2,1,1,1,0,1
37473,11.2,2,2,1,0,1
37474,11.2,3,3,1,0,1
37475,11.2,4,4,1,0,1
37496,11.2,5,5,0,0,1
37497,11.2,6,6,0,0,1
37498,11.2,7,7,0,0,1
37499,11.2,8,8,8,3,1
37500,11.2,14,9,1,0.3,1
37501,11.2,15,10,1,0.3,1
37502,11.2,16,11,1,0.3,1
37503,11.2,17,12,1,0.3,1
37510,11.2,18,19,1,1,1
37511,11.2,19,20,1,1,1
37508,11.2,20,17,1,1,1
37509,11.2,21,18,1,1,1
37505,11.2,22,14,1,0,1
37506,11.2,23,15,1,1,1
37507,11.2,24,16,1,1,1
37504,11.2,25,13,1,1,1
37632,14.1,1,1,1,0,1
37633,14.1,2,2,1,0,1
37634,14.1,3,3,1,0,1
37635,14.1,4,4,1,0,1
37656,14.1,5,5,0,0,1
37657,14.1,6,6,0,0,1
37658,14.1,7,7,0,0,1
37659,14.1,8,8,8,6,1
37660,14.1,14,9,1,0.9,1
37661,14.1,15,10,1,0.9,1
37662,14.1,16,11,1,1,1
37663,14.1,17,12,1,0.3,1
37670,14.1,18,19,1,0,1
37671,14.1,19,20,1,1,1
37668,14.1,20,17,1,1,1
37669,14.1,21,18,1,0,1
37665,14.1,22,14,1,1,1
37666,14.1,23,15,1,1,1
37667,14.1,24,16,1,1,1
37664,14.1,25,13,1,0,1
37672,8.6,1,1,1,0,1
37673,8.6,2,2,1,0,1
37674,8.6,3,3,1,0,1
37675,8.6,4,4,1,0,1
37696,8.6,5,5,0,0,1
37697,8.6,6,6,0,0,1
37698,8.6,7,7,0,0,1
37699,8.6,8,8,8,0.5,1
37700,8.6,14,9,1,0.9,1
37701,8.6,15,10,1,1,1
37702,8.6,16,11,1,0.9,1
37703,8.6,17,12,1,0.3,1
37710,8.6,18,19,1,0,1
37711,8.6,19,20,1,1,1
37708,8.6,20,17,1,1,1
37709,8.6,21,18,1,1,1
37705,8.6,22,14,1,1,1
37706,8.6,23,15,1,1,1
37707,8.6,24,16,1,0,1
37704,8.6,25,13,1,0,1
37712,11.6,1,1,1,0,1
37713,11.6,2,2,1,0,1
37714,11.6,3,3,1,0,1
37715,11.6,4,4,1,0,1
37736,11.6,5,5,0,0,1
37737,11.6,6,6,0,0,1
37738,11.6,7,7,0,0,1
37739,11.6,8,8,8,5.5,1
37740,11.6,14,9,1,0.9,1
37741,11.6,15,10,1,1,1
37742,11.6,16,11,1,0.9,1
37743,11.6,17,12,1,0.3,1
37750,11.6,18,19,1,0,1
37751,11.6,19,20,1,0,1
37748,11.6,20,17,1,1,1
37749,11.6,21,18,1,0,1
37745,11.6,22,14,1,1,1
37746,11.6,23,15,1,0,1
37747,11.6,24,16,1,0,1
37744,11.6,25,13,1,1,1
38072,9.3,1,1,1,0,1
38073,9.3,2,2,1,0,1
38074,9.3,3,3,1,0,1
38075,9.3,4,4,1,0,1
38096,9.3,5,5,0,0,1
38097,9.3,6,6,0,0,1
38098,9.3,7,7,0,0,1
38099,9.3,8,8,8,2.5,1
38100,9.3,14,9,1,0.9,1
38101,9.3,15,10,1,1,1
38102,9.3,16,11,1,1,1
38103,9.3,17,12,1,0.9,1
38110,9.3,18,19,1,0,1
38111,9.3,19,20,1,1,1
38108,9.3,20,17,1,1,1
38109,9.3,21,18,1,0,1
38105,9.3,22,14,1,1,1
38106,9.3,23,15,1,0,1
38107,9.3,24,16,1,0,1
38104,9.3,25,13,1,0,1
38232,13.1,1,1,1,0,1
38233,13.1,2,2,1,0,1
38234,13.1,3,3,1,0,1
38235,13.1,4,4,1,0,1
38256,13.1,5,5,0,0,1
38257,13.1,6,6,0,0,1
38258,13.1,7,7,0,0,1
38259,13.1,8,8,8,4,1
38260,13.1,14,9,1,0.9,1
38261,13.1,15,10,1,0.3,1
38262,13.1,16,11,1,0.9,1
38263,13.1,17,12,1,1,1
38270,13.1,18,19,1,0,1
38271,13.1,19,20,1,1,1
38268,13.1,20,17,1,1,1
38269,13.1,21,18,1,1,1
38265,13.1,22,14,1,1,1
38266,13.1,23,15,1,1,1
38267,13.1,24,16,1,1,1
38264,13.1,25,13,1,0,1
38272,11.5,1,1,1,0,1
38273,11.5,2,2,1,0,1
38274,11.5,3,3,1,0,1
38275,11.5,4,4,1,0,1
38296,11.5,5,5,0,0,1
38297,11.5,6,6,0,0,1
38298,11.5,7,7,0,0,1
38299,11.5,8,8,8,4,1
38300,11.5,14,9,1,0.9,1
38301,11.5,15,10,1,0.3,1
38302,11.5,16,11,1,0.3,1
38303,11.5,17,12,1,1,1
38310,11.5,18,19,1,1,1
38311,11.5,19,20,1,0,1
38308,11.5,20,17,1,0,1
38309,11.5,21,18,1,1,1
38305,11.5,22,14,1,1,1
38306,11.5,23,15,1,1,1
38307,11.5,24,16,1,0,1
38304,11.5,25,13,1,1,1
38472,11.3,1,1,1,0,1
38473,11.3,2,2,1,0,1
38474,11.3,3,3,1,0,1
38475,11.3,4,4,1,0,1
38496,11.3,5,5,0,0,1
38497,11.3,6,6,0,0,1
38498,11.3,7,7,0,0,1
38499,11.3,8,8,8,3,1
38500,11.3,14,9,1,1,1
38501,11.3,15,10,1,1,1
38502,11.3,16,11,1,0.3,1
38503,11.3,17,12,1,1,1
38510,11.3,18,19,1,1,1
38511,11.3,19,20,1,0,1
38508,11.3,20,17,1,1,1
38509,11.3,21,18,1,1,1
38505,11.3,22,14,1,1,1
38506,11.3,23,15,1,0,1
38507,11.3,24,16,1,1,1
38504,11.3,25,13,1,0,1
38632,5.5,1,1,1,0,1
38633,5.5,2,2,1,0,1
38634,5.5,3,3,1,0,1
38635,5.5,4,4,1,0,1
38656,5.5,5,5,0,0,1
38657,5.5,6,6,0,0,1
38658,5.5,7,7,0,0,1
38659,5.5,8,8,8,1,1
38660,5.5,14,9,1,1,1
38661,5.5,15,10,1,0.9,1
38662,5.5,16,11,1,0.3,1
38663,5.5,17,12,1,0.3,1
38670,5.5,18,19,1,0,1
38671,5.5,19,20,1,0,1
38668,5.5,20,17,1,0,1
38669,5.5,21,18,1,0,1
38665,5.5,22,14,1,0,1
38666,5.5,23,15,1,1,1
38667,5.5,24,16,1,0,1
38664,5.5,25,13,1,1,1
38672,4.8,1,1,1,0,1
38673,4.8,2,2,1,0,1
38674,4.8,3,3,1,0,1
38675,4.8,4,4,1,0,1
38696,4.8,5,5,0,0,1
38697,4.8,6,6,0,0,1
38698,4.8,7,7,0,0,1
38699,4.8,8,8,8,1,1
38700,4.8,14,9,1,0.3,1
38701,4.8,15,10,1,0.3,1
38702,4.8,16,11,1,0.3,1
38703,4.8,17,12,1,0.9,1
38710,4.8,18,19,1,0,1
38711,4.8,19,20,1,1,1
38708,4.8,20,17,1,0,1
38709,4.8,21,18,1,0,1
38705,4.8,22,14,1,0,1
38706,4.8,23,15,1,0,1
38707,4.8,24,16,1,1,1
38704,4.8,25,13,1,0,1
38992,8.7,1,1,1,0,1
38993,8.7,2,2,1,0,1
38994,8.7,3,3,1,0,1
38995,8.7,4,4,1,0,1
39016,8.7,5,5,0,0,1
39017,8.7,6,6,0,0,1
39018,8.7,7,7,0,0,1
39019,8.7,8,8,8,1.5,1
39020,8.7,14,9,1,1,1
39021,8.7,15,10,1,0.3,1
39022,8.7,16,11,1,0.9,1
39023,8.7,17,12,1,1,1
39030,8.7,18,19,1,0,1
39031,8.7,19,20,1,0,1
39028,8.7,20,17,1,1,1
39029,8.7,21,18,1,0,1
39025,8.7,22,14,1,1,1
39026,8.7,23,15,1,0,1
39027,8.7,24,16,1,1,1
39024,8.7,25,13,1,1,1
39032,11.8,1,1,1,0,1
39033,11.8,2,2,1,0,1
39034,11.8,3,3,1,0,1
39035,11.8,4,4,1,0,1
39056,11.8,5,5,0,0,1
39057,11.8,6,6,0,0,1
39058,11.8,7,7,0,0,1
39059,11.8,8,8,8,4,1
39060,11.8,14,9,1,0.9,1
39061,11.8,15,10,1,1,1
39062,11.8,16,11,1,0.9,1
39063,11.8,17,12,1,1,1
39070,11.8,18,19,1,0,1
39071,11.8,19,20,1,0,1
39068,11.8,20,17,1,0,1
39069,11.8,21,18,1,1,1
39065,11.8,22,14,1,1,1
39066,11.8,23,15,1,1,1
39067,11.8,24,16,1,1,1
39064,11.8,25,13,1,0,1
39272,6,1,1,1,0,1
39273,6,2,2,1,0,1
39274,6,3,3,1,0,1
39275,6,4,4,1,0,1
39296,6,5,5,0,0,1
39297,6,6,6,0,0,1
39298,6,7,7,0,0,1
39299,6,8,8,8,2,1
39300,6,14,9,1,0.9,1
39301,6,15,10,1,0.9,1
39302,6,16,11,1,0.3,1
39303,6,17,12,1,0.9,1
39310,6,18,19,1,0,1
39311,6,19,20,1,0,1
39308,6,20,17,1,0,1
39309,6,21,18,1,0,1
39305,6,22,14,1,1,1
39306,6,23,15,1,0,1
39307,6,24,16,1,0,1
39304,6,25,13,1,0,1
36192,5.9,1,1,1,0,1
36193,5.9,2,2,1,0,1
36194,5.9,3,3,1,0,1
36195,5.9,4,4,1,0,1
36216,5.9,5,5,0,0,1
36217,5.9,6,6,0,0,1
36218,5.9,7,7,0,0,1
36219,5.9,8,8,8,1,1
36220,5.9,14,9,1,1,1
36221,5.9,15,10,1,0.3,1
36222,5.9,16,11,1,0.3,1
36223,5.9,17,12,1,0.3,1
36230,5.9,18,19,1,0,1
36231,5.9,19,20,1,0,1
36228,5.9,20,17,1,1,1
36229,5.9,21,18,1,0,1
36225,5.9,22,14,1,1,1
36226,5.9,23,15,1,1,1
36227,5.9,24,16,1,0,1
36224,5.9,25,13,1,0,1
36352,12.8,1,1,1,0,1
36353,12.8,2,2,1,0,1
36354,12.8,3,3,1,0,1
36355,12.8,4,4,1,0,1
36376,12.8,5,5,0,0,1
36377,12.8,6,6,0,0,1
36378,12.8,7,7,0,0,1
36379,12.8,8,8,8,6,1
36380,12.8,14,9,1,0.9,1
36381,12.8,15,10,1,1,1
36382,12.8,16,11,1,1,1
36383,12.8,17,12,1,0.9,1
36390,12.8,18,19,1,1,1
36391,12.8,19,20,1,1,1
36388,12.8,20,17,1,0,1
36389,12.8,21,18,1,0,1
36385,12.8,22,14,1,0,1
36386,12.8,23,15,1,0,1
36387,12.8,24,16,1,1,1
36384,12.8,25,13,1,0,1
36832,13.8,1,1,1,0,1
36833,13.8,2,2,1,0,1
36834,13.8,3,3,1,0,1
36835,13.8,4,4,1,0,1
36856,13.8,5,5,0,0,1
36857,13.8,6,6,0,0,1
36858,13.8,7,7,0,0,1
36859,13.8,8,8,8,7,1
36860,13.8,14,9,1,0.9,1
36861,13.8,15,10,1,0.3,1
36862,13.8,16,11,1,0.3,1
36863,13.8,17,12,1,0.3,1
36870,13.8,18,19,1,0,1
36871,13.8,19,20,1,0,1
36868,13.8,20,17,1,1,1
36869,13.8,21,18,1,1,1
36865,13.8,22,14,1,0,1
36866,13.8,23,15,1,1,1
36867,13.8,24,16,1,1,1
36864,13.8,25,13,1,1,1

1 id sumgrades questionid slot maxmark mark variant
2 39872 12 1 1 1 0 1
3 39873 12 2 2 1 0 1
4 39874 12 3 3 1 0 1
5 39875 12 4 4 1 0 1
6 39896 12 5 5 0 0 1
7 39897 12 6 6 0 0 1
8 39898 12 7 7 0 0 1
9 39899 12 8 8 8 5.5 1
10 39900 12 14 9 1 0.3 1
11 39901 12 15 10 1 0.9 1
12 39902 12 16 11 1 1 1
13 39903 12 17 12 1 0.3 1
14 39910 12 18 19 1 0 1
15 39911 12 19 20 1 1 1
16 39908 12 20 17 1 1 1
17 39909 12 21 18 1 0 1
18 39905 12 22 14 1 0 1
19 39906 12 23 15 1 0 1
20 39907 12 24 16 1 1 1
21 39904 12 25 13 1 1 1
22 39992 7.4 1 1 1 0 1
23 39993 7.4 2 2 1 0 1
24 39994 7.4 3 3 1 0 1
25 39995 7.4 4 4 1 0 1
26 40016 7.4 5 5 0 0 1
27 40017 7.4 6 6 0 0 1
28 40018 7.4 7 7 0 0 1
29 40019 7.4 8 8 8 1 1
30 40020 7.4 14 9 1 0.9 1
31 40021 7.4 15 10 1 0.9 1
32 40022 7.4 16 11 1 0.3 1
33 40023 7.4 17 12 1 0.3 1
34 40030 7.4 18 19 1 0 1
35 40031 7.4 19 20 1 1 1
36 40028 7.4 20 17 1 0 1
37 40029 7.4 21 18 1 1 1
38 40025 7.4 22 14 1 0 1
39 40026 7.4 23 15 1 0 1
40 40027 7.4 24 16 1 1 1
41 40024 7.4 25 13 1 1 1
42 40032 11.7 1 1 1 0 1
43 40033 11.7 2 2 1 0 1
44 40034 11.7 3 3 1 0 1
45 40035 11.7 4 4 1 0 1
46 40056 11.7 5 5 0 0 1
47 40057 11.7 6 6 0 0 1
48 40058 11.7 7 7 0 0 1
49 40059 11.7 8 8 8 2.5 1
50 40060 11.7 14 9 1 1 1
51 40061 11.7 15 10 1 0.9 1
52 40062 11.7 16 11 1 0.3 1
53 40063 11.7 17 12 1 1 1
54 40070 11.7 18 19 1 1 1
55 40071 11.7 19 20 1 1 1
56 40068 11.7 20 17 1 1 1
57 40069 11.7 21 18 1 1 1
58 40065 11.7 22 14 1 0 1
59 40066 11.7 23 15 1 1 1
60 40067 11.7 24 16 1 1 1
61 40064 11.7 25 13 1 0 1
62 39352 8.5 1 1 1 0 1
63 39353 8.5 2 2 1 0 1
64 39354 8.5 3 3 1 0 1
65 39355 8.5 4 4 1 0 1
66 39376 8.5 5 5 0 0 1
67 39377 8.5 6 6 0 0 1
68 39378 8.5 7 7 0 0 1
69 39379 8.5 8 8 8 4 1
70 39380 8.5 14 9 1 0.3 1
71 39381 8.5 15 10 1 0.9 1
72 39382 8.5 16 11 1 1 1
73 39383 8.5 17 12 1 0.3 1
74 39390 8.5 18 19 1 0 1
75 39391 8.5 19 20 1 1 1
76 39388 8.5 20 17 1 1 1
77 39389 8.5 21 18 1 0 1
78 39385 8.5 22 14 1 0 1
79 39386 8.5 23 15 1 0 1
80 39387 8.5 24 16 1 0 1
81 39384 8.5 25 13 1 0 1
82 37112 10.1 1 1 1 0 1
83 37113 10.1 2 2 1 0 1
84 37114 10.1 3 3 1 0 1
85 37115 10.1 4 4 1 0 1
86 37136 10.1 5 5 0 0 1
87 37137 10.1 6 6 0 0 1
88 37138 10.1 7 7 0 0 1
89 37139 10.1 8 8 8 3 1
90 37140 10.1 14 9 1 0.9 1
91 37141 10.1 15 10 1 0.3 1
92 37142 10.1 16 11 1 0.9 1
93 37143 10.1 17 12 1 1 1
94 37150 10.1 18 19 1 1 1
95 37151 10.1 19 20 1 0 1
96 37148 10.1 20 17 1 1 1
97 37149 10.1 21 18 1 1 1
98 37145 10.1 22 14 1 1 1
99 37146 10.1 23 15 1 0 1
100 37147 10.1 24 16 1 0 1
101 37144 10.1 25 13 1 0 1
102 37432 11.3 1 1 1 0 1
103 37433 11.3 2 2 1 0 1
104 37434 11.3 3 3 1 0 1
105 37435 11.3 4 4 1 0 1
106 37456 11.3 5 5 0 0 1
107 37457 11.3 6 6 0 0 1
108 37458 11.3 7 7 0 0 1
109 37459 11.3 8 8 8 4.5 1
110 37460 11.3 14 9 1 0.9 1
111 37461 11.3 15 10 1 1 1
112 37462 11.3 16 11 1 1 1
113 37463 11.3 17 12 1 0.9 1
114 37470 11.3 18 19 1 0 1
115 37471 11.3 19 20 1 0 1
116 37468 11.3 20 17 1 0 1
117 37469 11.3 21 18 1 0 1
118 37465 11.3 22 14 1 1 1
119 37466 11.3 23 15 1 1 1
120 37467 11.3 24 16 1 1 1
121 37464 11.3 25 13 1 0 1
122 37472 11.2 1 1 1 0 1
123 37473 11.2 2 2 1 0 1
124 37474 11.2 3 3 1 0 1
125 37475 11.2 4 4 1 0 1
126 37496 11.2 5 5 0 0 1
127 37497 11.2 6 6 0 0 1
128 37498 11.2 7 7 0 0 1
129 37499 11.2 8 8 8 3 1
130 37500 11.2 14 9 1 0.3 1
131 37501 11.2 15 10 1 0.3 1
132 37502 11.2 16 11 1 0.3 1
133 37503 11.2 17 12 1 0.3 1
134 37510 11.2 18 19 1 1 1
135 37511 11.2 19 20 1 1 1
136 37508 11.2 20 17 1 1 1
137 37509 11.2 21 18 1 1 1
138 37505 11.2 22 14 1 0 1
139 37506 11.2 23 15 1 1 1
140 37507 11.2 24 16 1 1 1
141 37504 11.2 25 13 1 1 1
142 37632 14.1 1 1 1 0 1
143 37633 14.1 2 2 1 0 1
144 37634 14.1 3 3 1 0 1
145 37635 14.1 4 4 1 0 1
146 37656 14.1 5 5 0 0 1
147 37657 14.1 6 6 0 0 1
148 37658 14.1 7 7 0 0 1
149 37659 14.1 8 8 8 6 1
150 37660 14.1 14 9 1 0.9 1
151 37661 14.1 15 10 1 0.9 1
152 37662 14.1 16 11 1 1 1
153 37663 14.1 17 12 1 0.3 1
154 37670 14.1 18 19 1 0 1
155 37671 14.1 19 20 1 1 1
156 37668 14.1 20 17 1 1 1
157 37669 14.1 21 18 1 0 1
158 37665 14.1 22 14 1 1 1
159 37666 14.1 23 15 1 1 1
160 37667 14.1 24 16 1 1 1
161 37664 14.1 25 13 1 0 1
162 37672 8.6 1 1 1 0 1
163 37673 8.6 2 2 1 0 1
164 37674 8.6 3 3 1 0 1
165 37675 8.6 4 4 1 0 1
166 37696 8.6 5 5 0 0 1
167 37697 8.6 6 6 0 0 1
168 37698 8.6 7 7 0 0 1
169 37699 8.6 8 8 8 0.5 1
170 37700 8.6 14 9 1 0.9 1
171 37701 8.6 15 10 1 1 1
172 37702 8.6 16 11 1 0.9 1
173 37703 8.6 17 12 1 0.3 1
174 37710 8.6 18 19 1 0 1
175 37711 8.6 19 20 1 1 1
176 37708 8.6 20 17 1 1 1
177 37709 8.6 21 18 1 1 1
178 37705 8.6 22 14 1 1 1
179 37706 8.6 23 15 1 1 1
180 37707 8.6 24 16 1 0 1
181 37704 8.6 25 13 1 0 1
182 37712 11.6 1 1 1 0 1
183 37713 11.6 2 2 1 0 1
184 37714 11.6 3 3 1 0 1
185 37715 11.6 4 4 1 0 1
186 37736 11.6 5 5 0 0 1
187 37737 11.6 6 6 0 0 1
188 37738 11.6 7 7 0 0 1
189 37739 11.6 8 8 8 5.5 1
190 37740 11.6 14 9 1 0.9 1
191 37741 11.6 15 10 1 1 1
192 37742 11.6 16 11 1 0.9 1
193 37743 11.6 17 12 1 0.3 1
194 37750 11.6 18 19 1 0 1
195 37751 11.6 19 20 1 0 1
196 37748 11.6 20 17 1 1 1
197 37749 11.6 21 18 1 0 1
198 37745 11.6 22 14 1 1 1
199 37746 11.6 23 15 1 0 1
200 37747 11.6 24 16 1 0 1
201 37744 11.6 25 13 1 1 1
202 38072 9.3 1 1 1 0 1
203 38073 9.3 2 2 1 0 1
204 38074 9.3 3 3 1 0 1
205 38075 9.3 4 4 1 0 1
206 38096 9.3 5 5 0 0 1
207 38097 9.3 6 6 0 0 1
208 38098 9.3 7 7 0 0 1
209 38099 9.3 8 8 8 2.5 1
210 38100 9.3 14 9 1 0.9 1
211 38101 9.3 15 10 1 1 1
212 38102 9.3 16 11 1 1 1
213 38103 9.3 17 12 1 0.9 1
214 38110 9.3 18 19 1 0 1
215 38111 9.3 19 20 1 1 1
216 38108 9.3 20 17 1 1 1
217 38109 9.3 21 18 1 0 1
218 38105 9.3 22 14 1 1 1
219 38106 9.3 23 15 1 0 1
220 38107 9.3 24 16 1 0 1
221 38104 9.3 25 13 1 0 1
222 38232 13.1 1 1 1 0 1
223 38233 13.1 2 2 1 0 1
224 38234 13.1 3 3 1 0 1
225 38235 13.1 4 4 1 0 1
226 38256 13.1 5 5 0 0 1
227 38257 13.1 6 6 0 0 1
228 38258 13.1 7 7 0 0 1
229 38259 13.1 8 8 8 4 1
230 38260 13.1 14 9 1 0.9 1
231 38261 13.1 15 10 1 0.3 1
232 38262 13.1 16 11 1 0.9 1
233 38263 13.1 17 12 1 1 1
234 38270 13.1 18 19 1 0 1
235 38271 13.1 19 20 1 1 1
236 38268 13.1 20 17 1 1 1
237 38269 13.1 21 18 1 1 1
238 38265 13.1 22 14 1 1 1
239 38266 13.1 23 15 1 1 1
240 38267 13.1 24 16 1 1 1
241 38264 13.1 25 13 1 0 1
242 38272 11.5 1 1 1 0 1
243 38273 11.5 2 2 1 0 1
244 38274 11.5 3 3 1 0 1
245 38275 11.5 4 4 1 0 1
246 38296 11.5 5 5 0 0 1
247 38297 11.5 6 6 0 0 1
248 38298 11.5 7 7 0 0 1
249 38299 11.5 8 8 8 4 1
250 38300 11.5 14 9 1 0.9 1
251 38301 11.5 15 10 1 0.3 1
252 38302 11.5 16 11 1 0.3 1
253 38303 11.5 17 12 1 1 1
254 38310 11.5 18 19 1 1 1
255 38311 11.5 19 20 1 0 1
256 38308 11.5 20 17 1 0 1
257 38309 11.5 21 18 1 1 1
258 38305 11.5 22 14 1 1 1
259 38306 11.5 23 15 1 1 1
260 38307 11.5 24 16 1 0 1
261 38304 11.5 25 13 1 1 1
262 38472 11.3 1 1 1 0 1
263 38473 11.3 2 2 1 0 1
264 38474 11.3 3 3 1 0 1
265 38475 11.3 4 4 1 0 1
266 38496 11.3 5 5 0 0 1
267 38497 11.3 6 6 0 0 1
268 38498 11.3 7 7 0 0 1
269 38499 11.3 8 8 8 3 1
270 38500 11.3 14 9 1 1 1
271 38501 11.3 15 10 1 1 1
272 38502 11.3 16 11 1 0.3 1
273 38503 11.3 17 12 1 1 1
274 38510 11.3 18 19 1 1 1
275 38511 11.3 19 20 1 0 1
276 38508 11.3 20 17 1 1 1
277 38509 11.3 21 18 1 1 1
278 38505 11.3 22 14 1 1 1
279 38506 11.3 23 15 1 0 1
280 38507 11.3 24 16 1 1 1
281 38504 11.3 25 13 1 0 1
282 38632 5.5 1 1 1 0 1
283 38633 5.5 2 2 1 0 1
284 38634 5.5 3 3 1 0 1
285 38635 5.5 4 4 1 0 1
286 38656 5.5 5 5 0 0 1
287 38657 5.5 6 6 0 0 1
288 38658 5.5 7 7 0 0 1
289 38659 5.5 8 8 8 1 1
290 38660 5.5 14 9 1 1 1
291 38661 5.5 15 10 1 0.9 1
292 38662 5.5 16 11 1 0.3 1
293 38663 5.5 17 12 1 0.3 1
294 38670 5.5 18 19 1 0 1
295 38671 5.5 19 20 1 0 1
296 38668 5.5 20 17 1 0 1
297 38669 5.5 21 18 1 0 1
298 38665 5.5 22 14 1 0 1
299 38666 5.5 23 15 1 1 1
300 38667 5.5 24 16 1 0 1
301 38664 5.5 25 13 1 1 1
302 38672 4.8 1 1 1 0 1
303 38673 4.8 2 2 1 0 1
304 38674 4.8 3 3 1 0 1
305 38675 4.8 4 4 1 0 1
306 38696 4.8 5 5 0 0 1
307 38697 4.8 6 6 0 0 1
308 38698 4.8 7 7 0 0 1
309 38699 4.8 8 8 8 1 1
310 38700 4.8 14 9 1 0.3 1
311 38701 4.8 15 10 1 0.3 1
312 38702 4.8 16 11 1 0.3 1
313 38703 4.8 17 12 1 0.9 1
314 38710 4.8 18 19 1 0 1
315 38711 4.8 19 20 1 1 1
316 38708 4.8 20 17 1 0 1
317 38709 4.8 21 18 1 0 1
318 38705 4.8 22 14 1 0 1
319 38706 4.8 23 15 1 0 1
320 38707 4.8 24 16 1 1 1
321 38704 4.8 25 13 1 0 1
322 38992 8.7 1 1 1 0 1
323 38993 8.7 2 2 1 0 1
324 38994 8.7 3 3 1 0 1
325 38995 8.7 4 4 1 0 1
326 39016 8.7 5 5 0 0 1
327 39017 8.7 6 6 0 0 1
328 39018 8.7 7 7 0 0 1
329 39019 8.7 8 8 8 1.5 1
330 39020 8.7 14 9 1 1 1
331 39021 8.7 15 10 1 0.3 1
332 39022 8.7 16 11 1 0.9 1
333 39023 8.7 17 12 1 1 1
334 39030 8.7 18 19 1 0 1
335 39031 8.7 19 20 1 0 1
336 39028 8.7 20 17 1 1 1
337 39029 8.7 21 18 1 0 1
338 39025 8.7 22 14 1 1 1
339 39026 8.7 23 15 1 0 1
340 39027 8.7 24 16 1 1 1
341 39024 8.7 25 13 1 1 1
342 39032 11.8 1 1 1 0 1
343 39033 11.8 2 2 1 0 1
344 39034 11.8 3 3 1 0 1
345 39035 11.8 4 4 1 0 1
346 39056 11.8 5 5 0 0 1
347 39057 11.8 6 6 0 0 1
348 39058 11.8 7 7 0 0 1
349 39059 11.8 8 8 8 4 1
350 39060 11.8 14 9 1 0.9 1
351 39061 11.8 15 10 1 1 1
352 39062 11.8 16 11 1 0.9 1
353 39063 11.8 17 12 1 1 1
354 39070 11.8 18 19 1 0 1
355 39071 11.8 19 20 1 0 1
356 39068 11.8 20 17 1 0 1
357 39069 11.8 21 18 1 1 1
358 39065 11.8 22 14 1 1 1
359 39066 11.8 23 15 1 1 1
360 39067 11.8 24 16 1 1 1
361 39064 11.8 25 13 1 0 1
362 39272 6 1 1 1 0 1
363 39273 6 2 2 1 0 1
364 39274 6 3 3 1 0 1
365 39275 6 4 4 1 0 1
366 39296 6 5 5 0 0 1
367 39297 6 6 6 0 0 1
368 39298 6 7 7 0 0 1
369 39299 6 8 8 8 2 1
370 39300 6 14 9 1 0.9 1
371 39301 6 15 10 1 0.9 1
372 39302 6 16 11 1 0.3 1
373 39303 6 17 12 1 0.9 1
374 39310 6 18 19 1 0 1
375 39311 6 19 20 1 0 1
376 39308 6 20 17 1 0 1
377 39309 6 21 18 1 0 1
378 39305 6 22 14 1 1 1
379 39306 6 23 15 1 0 1
380 39307 6 24 16 1 0 1
381 39304 6 25 13 1 0 1
382 36192 5.9 1 1 1 0 1
383 36193 5.9 2 2 1 0 1
384 36194 5.9 3 3 1 0 1
385 36195 5.9 4 4 1 0 1
386 36216 5.9 5 5 0 0 1
387 36217 5.9 6 6 0 0 1
388 36218 5.9 7 7 0 0 1
389 36219 5.9 8 8 8 1 1
390 36220 5.9 14 9 1 1 1
391 36221 5.9 15 10 1 0.3 1
392 36222 5.9 16 11 1 0.3 1
393 36223 5.9 17 12 1 0.3 1
394 36230 5.9 18 19 1 0 1
395 36231 5.9 19 20 1 0 1
396 36228 5.9 20 17 1 1 1
397 36229 5.9 21 18 1 0 1
398 36225 5.9 22 14 1 1 1
399 36226 5.9 23 15 1 1 1
400 36227 5.9 24 16 1 0 1
401 36224 5.9 25 13 1 0 1
402 36352 12.8 1 1 1 0 1
403 36353 12.8 2 2 1 0 1
404 36354 12.8 3 3 1 0 1
405 36355 12.8 4 4 1 0 1
406 36376 12.8 5 5 0 0 1
407 36377 12.8 6 6 0 0 1
408 36378 12.8 7 7 0 0 1
409 36379 12.8 8 8 8 6 1
410 36380 12.8 14 9 1 0.9 1
411 36381 12.8 15 10 1 1 1
412 36382 12.8 16 11 1 1 1
413 36383 12.8 17 12 1 0.9 1
414 36390 12.8 18 19 1 1 1
415 36391 12.8 19 20 1 1 1
416 36388 12.8 20 17 1 0 1
417 36389 12.8 21 18 1 0 1
418 36385 12.8 22 14 1 0 1
419 36386 12.8 23 15 1 0 1
420 36387 12.8 24 16 1 1 1
421 36384 12.8 25 13 1 0 1
422 36832 13.8 1 1 1 0 1
423 36833 13.8 2 2 1 0 1
424 36834 13.8 3 3 1 0 1
425 36835 13.8 4 4 1 0 1
426 36856 13.8 5 5 0 0 1
427 36857 13.8 6 6 0 0 1
428 36858 13.8 7 7 0 0 1
429 36859 13.8 8 8 8 7 1
430 36860 13.8 14 9 1 0.9 1
431 36861 13.8 15 10 1 0.3 1
432 36862 13.8 16 11 1 0.3 1
433 36863 13.8 17 12 1 0.3 1
434 36870 13.8 18 19 1 0 1
435 36871 13.8 19 20 1 0 1
436 36868 13.8 20 17 1 1 1
437 36869 13.8 21 18 1 1 1
438 36865 13.8 22 14 1 0 1
439 36866 13.8 23 15 1 1 1
440 36867 13.8 24 16 1 1 1
441 36864 13.8 25 13 1 1 1

View file

@ -130,10 +130,10 @@ class quiz_statistics_question_stats_testcase extends basic_testcase {
foreach ($this->qstats as $qstat) {
$value = array_shift($values);
if ($value !== null) {
$this->assertEquals($qstat->{$fieldname} * $multiplier,
$value, '', 1E-6);
$this->assertEquals($value, $qstat->{$fieldname} * $multiplier,
'', 1E-6);
} else {
$this->assertEquals($qstat->{$fieldname} * $multiplier, $value);
$this->assertEquals($value, $qstat->{$fieldname} * $multiplier);
}
}
}

View file

@ -44,6 +44,12 @@ class calculated {
public $slot = null;
/**
* @var null|integer if this property is not null then this is the stats for a variant of a question or when inherited by
* calculated_for_subquestion and not null then this is the stats for a variant of a sub question.
*/
public $variant = null;
/**
* @var bool is this a sub question.
*/
@ -103,7 +109,7 @@ class calculated {
// End of fields in db.
protected $fieldsindb = array('questionid', 'slot', 'subquestion', 's', 'effectiveweight', 'negcovar', 'discriminationindex',
'discriminativeefficiency', 'sd', 'facility', 'subquestions', 'maxmark', 'positions', 'randomguessscore');
'discriminativeefficiency', 'sd', 'facility', 'subquestions', 'maxmark', 'positions', 'randomguessscore', 'variant');
// Fields used for intermediate calculations.
@ -152,6 +158,14 @@ class calculated {
*/
public $question;
/**
* An array of calculated stats for each variant of the question. Even when there is just one variant we still calculate this
* data as there is no way to know if there are variants before we have finished going through the attempt data one time.
*
* @var calculated[] $variants
*/
public $variantstats = array();
/**
* Set if this record has been retrieved from cache. This is the time that the statistics were calculated.
*
@ -173,6 +187,12 @@ class calculated {
$toinsert->{$field} = $this->{$field};
}
$DB->insert_record('question_statistics', $toinsert, false);
if (count($this->variantstats) > 1) {
foreach ($this->variantstats as $variantstat) {
$variantstat->cache($qubaids);
}
}
}
/**

View file

@ -34,4 +34,9 @@ class calculated_for_subquestion extends calculated {
public $differentweights = false;
public $negcovar = 0;
/**
* @var int only set immediately before display in the table. The order of display in the table.
*/
public $subqdisplayorder;
}

View file

@ -73,16 +73,41 @@ class calculator {
$this->progress = $progress;
foreach ($questions as $slot => $question) {
$this->questionstats[$slot] = new calculated();
$this->questionstats[$slot]->questionid = $question->id;
$this->questionstats[$slot]->question = $question;
$this->questionstats[$slot]->slot = $slot;
$this->questionstats[$slot]->positions = $question->number;
$this->questionstats[$slot]->maxmark = $question->maxmark;
$this->questionstats[$slot]->randomguessscore = $this->get_random_guess_score($question);
$this->questionstats[$slot] = $this->new_slot_stats($question, $slot);
}
}
/**
* Set up a calculated instance ready to store a questions stats.
*
* @param $question
* @param $slot
* @return calculated
*/
protected function new_slot_stats($question, $slot) {
$toreturn = new calculated();
$toreturn->questionid = $question->id;
$toreturn->maxmark = $question->maxmark;
$toreturn->question = $question;
$toreturn->slot = $slot;
$toreturn->positions = $question->number;
$toreturn->randomguessscore = $this->get_random_guess_score($question);
return $toreturn;
}
/**
* Set up a calculated instance ready to store a randomly selected question's stats.
*
* @param $step
* @return calculated_for_subquestion
*/
protected function new_subq_stats($step) {
$toreturn = new calculated_for_subquestion();
$toreturn->questionid = $step->questionid;
$toreturn->maxmark = $step->maxmark;
return $toreturn;
}
/**
* @param $qubaids \qubaid_condition
* @return array containing two arrays calculated[] and calculated_for_subquestion[].
@ -98,21 +123,39 @@ class calculator {
// Compute the statistics of position, and for random questions, work
// out which questions appear in which positions.
foreach ($lateststeps as $step) {
$this->progress->increment_progress();
$this->initial_steps_walker($step, $this->questionstats[$step->slot], $summarks);
// If this is a random question what is the real item being used?
if ($step->questionid != $this->questionstats[$step->slot]->questionid) {
$this->progress->increment_progress();
$israndomquestion = ($step->questionid != $this->questionstats[$step->slot]->questionid);
// If this is a variant we have not seen before create a place to store stats calculations for this variant.
if (!$israndomquestion && !isset($this->questionstats[$step->slot]->variantstats[$step->variant])) {
$this->questionstats[$step->slot]->variantstats[$step->variant] =
$this->new_slot_stats($this->questionstats[$step->slot]->question, $step->slot);
$this->questionstats[$step->slot]->variantstats[$step->variant]->variant = $step->variant;
}
// Step data walker for main question.
$this->initial_steps_walker($step, $this->questionstats[$step->slot], $summarks, true, !$israndomquestion);
// If this is a random question do the calculations for sub question stats.
if ($israndomquestion) {
if (!isset($this->subquestionstats[$step->questionid])) {
$this->subquestionstats[$step->questionid] = new calculated_for_subquestion();
$this->subquestionstats[$step->questionid]->questionid = $step->questionid;
$this->subquestionstats[$step->questionid]->maxmark = $step->maxmark;
$this->subquestionstats[$step->questionid] = $this->new_subq_stats($step);
} else if ($this->subquestionstats[$step->questionid]->maxmark != $step->maxmark) {
$this->subquestionstats[$step->questionid]->differentweights = true;
}
// If this is a variant of this subq we have not seen before create a place to store stats calculations for it.
if (!isset($this->subquestionstats[$step->questionid]->variantstats[$step->variant])) {
$this->subquestionstats[$step->questionid]->variantstats[$step->variant] = $this->new_subq_stats($step);
$this->subquestionstats[$step->questionid]->variantstats[$step->variant]->variant = $step->variant;
}
$this->initial_steps_walker($step, $this->subquestionstats[$step->questionid], $summarks, false);
// Extra stuff we need to do in this loop for subqs to keep track of where they need to be displayed later.
$number = $this->questionstats[$step->slot]->question->number;
$this->subquestionstats[$step->questionid]->usedin[$number] = $number;
@ -137,10 +180,15 @@ class calculator {
$this->progress->start_progress('', count($subquestions), 1);
foreach ($subquestions as $qid => $subquestion) {
$this->progress->increment_progress();
$subquestion->maxmark = $this->subquestionstats[$qid]->maxmark;
$this->subquestionstats[$qid]->question = $subquestion;
$this->subquestionstats[$qid]->question->maxmark = $this->subquestionstats[$qid]->maxmark;
$this->subquestionstats[$qid]->randomguessscore = $this->get_random_guess_score($subquestion);
foreach ($this->subquestionstats[$qid]->variantstats as $variantstat) {
$variantstat->question = $subquestion;
$variantstat->randomguessscore = $this->get_random_guess_score($subquestion);
}
$this->initial_question_walker($this->subquestionstats[$qid]);
if ($this->subquestionstats[$qid]->differentweights) {
@ -168,12 +216,13 @@ class calculator {
// foreach ($this->questions as $qid => $question).
reset($this->questionstats);
$this->progress->start_progress('', count($this->questionstats), 1);
while (list($slot, $questionstat) = each($this->questionstats)) {
while (list(, $questionstat) = each($this->questionstats)) {
$this->progress->increment_progress();
$nextquestionstats = current($this->questionstats);
$this->initial_question_walker($questionstat);
// The rest of this loop is again to work out where randomly selected question stats should be displayed.
if ($questionstat->question->qtype == 'random') {
$randomselectorstring = $questionstat->question->category .'/'. $questionstat->question->questiontext;
if ($nextquestionstats && $nextquestionstats->question->qtype == 'random') {
@ -194,7 +243,8 @@ class calculator {
$this->progress->start_progress('', count($lateststeps), 1);
foreach ($lateststeps as $step) {
$this->progress->increment_progress();
$this->secondary_steps_walker($step, $this->questionstats[$step->slot], $summarks);
$israndomquestion = ($this->questionstats[$step->slot]->question->qtype == 'random');
$this->secondary_steps_walker($step, $this->questionstats[$step->slot], $summarks, !$israndomquestion);
if ($this->questionstats[$step->slot]->subquestions) {
$this->secondary_steps_walker($step, $this->subquestionstats[$step->questionid], $summarks);
@ -257,12 +307,13 @@ class calculator {
$questionids = array();
foreach ($questionstatrecs as $fromdb) {
if (!$fromdb->slot) {
if (is_null($fromdb->variant) && !$fromdb->slot) {
$questionids[] = $fromdb->questionid;
}
}
$subquestions = question_load_questions($questionids);
foreach ($questionstatrecs as $fromdb) {
if (is_null($fromdb->variant)) {
if ($fromdb->slot) {
$this->questionstats[$fromdb->slot]->populate_from_record($fromdb);
// Array created in constructor and populated from question.
@ -272,6 +323,22 @@ class calculator {
$this->subquestionstats[$fromdb->questionid]->question = $subquestions[$fromdb->questionid];
}
}
}
// Add cached variant stats to data structure.
foreach ($questionstatrecs as $fromdb) {
if (!is_null($fromdb->variant)) {
if ($fromdb->slot) {
$newcalcinstance = new calculated();
$this->questionstats[$fromdb->slot]->variantstats[$fromdb->variant] = $newcalcinstance;
$newcalcinstance->question = $this->questionstats[$fromdb->slot]->question;
} else {
$newcalcinstance = new calculated_for_subquestion();
$this->subquestionstats[$fromdb->questionid]->variantstats[$fromdb->variant] = $newcalcinstance;
$newcalcinstance->question = $subquestions[$fromdb->questionid];
}
$newcalcinstance->populate_from_record($fromdb);
}
}
return array($this->questionstats, $this->subquestionstats);
}
@ -313,6 +380,7 @@ class calculator {
$fields = " qas.id,
qa.questionusageid,
qa.questionid,
qa.variant,
qa.slot,
qa.maxmark,
qas.fraction * qa.maxmark as mark";
@ -339,8 +407,9 @@ class calculator {
* @param calculated $stats the question statistics we are accumulating.
* @param array $summarks of the sum of marks for each question usage, indexed by question usage id
* @param bool $positionstat whether this is a statistic of position of question.
* @param bool $dovariantalso do we also want to do the same calculations for this variant?
*/
protected function initial_steps_walker($step, $stats, $summarks, $positionstat = true) {
protected function initial_steps_walker($step, $stats, $summarks, $positionstat = true, $dovariantalso = true) {
$stats->s++;
$stats->totalmarks += $step->mark;
$stats->markarray[] = $step->mark;
@ -353,15 +422,20 @@ class calculator {
$stats->totalothermarks += $summarks[$step->questionusageid];
$stats->othermarksarray[] = $summarks[$step->questionusageid];
}
if ($dovariantalso) {
$this->initial_steps_walker($step, $stats->variantstats[$step->variant], $summarks, $positionstat, false);
}
}
/**
* Perform some computations on the per-question statistics calculations after
* we have been through all the states.
* we have been through all the step data.
*
* @param calculated $stats question stats to update.
* @param bool $dovariantsalso do we also want to do the same calculations for the variants?
*/
protected function initial_question_walker($stats) {
protected function initial_question_walker($stats, $dovariantsalso = true) {
$stats->markaverage = $stats->totalmarks / $stats->s;
if ($stats->maxmark != 0) {
@ -376,6 +450,12 @@ class calculator {
sort($stats->markarray, SORT_NUMERIC);
sort($stats->othermarksarray, SORT_NUMERIC);
if ($dovariantsalso) {
foreach ($stats->variantstats as $variantstat) {
$this->initial_question_walker($variantstat, false);
}
}
}
/**
@ -385,8 +465,9 @@ class calculator {
* @param object $step the state to add to the statistics.
* @param calculated $stats the question statistics we are accumulating.
* @param array $summarks of the sum of marks for each question usage, indexed by question usage id
* @param bool $dovariantalso do we also want to do the same calculations for the variant?
*/
protected function secondary_steps_walker($step, $stats, $summarks) {
protected function secondary_steps_walker($step, $stats, $summarks, $dovariantalso = true) {
$markdifference = $step->mark - $stats->markaverage;
if ($stats->subquestion) {
$othermarkdifference = $summarks[$step->questionusageid] - $stats->othermarkaverage;
@ -403,14 +484,19 @@ class calculator {
$stats->covariancesum += $markdifference * $othermarkdifference;
$stats->covariancemaxsum += $sortedmarkdifference * $sortedothermarkdifference;
$stats->covariancewithoverallmarksum += $markdifference * $overallmarkdifference;
if ($dovariantalso) {
$this->secondary_steps_walker($step, $stats->variantstats[$step->variant], $summarks, false);
}
}
/**
* Perform more per-question statistics calculations.
*
* @param calculated $stats question stats to update.
* @param bool $dovariantsalso do we also want to do the same calculations for the variants?
*/
protected function secondary_question_walker($stats) {
protected function secondary_question_walker($stats, $dovariantsalso = true) {
if ($stats->s > 1) {
$stats->markvariance = $stats->markvariancesum / ($stats->s - 1);
@ -449,6 +535,13 @@ class calculator {
} else {
$stats->discriminativeefficiency = null;
}
if ($dovariantsalso) {
foreach ($stats->variantstats as $variantstat) {
$this->secondary_question_walker($variantstat, false);
}
}
}
/**

View file

@ -29,7 +29,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2014012300.00; // YYYYMMDD = weekly release date of this DEV branch.
$version = 2014012300.01; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.