public function test_spread() { $stats = new stats(); $data_array = array(10, 20); $this->assertEquals(round($stats->spread($data_array), 2), 7.07); $data_array = array(1); #Single element, will divide by 0 $this->assertEquals($stats->spread($data_array), 0); $data_array = array(); #Empty array, ??? $this->assertEquals($stats->spread($data_array), 0); }
} $sumPgMark = array_sum($v); array_push($out, $sumPgMark); array_push($totalScore, $sumPgMark); fputcsv($output, $out); next($sids); } /**Statistics array. At end is 1 row mean of pages and everything, 2nd row is std-dev of pages and everything more specifically, use the booklet_id as row name e.g. this row is "mean" thus 5 rows in total: Mean, Median, Spread, Maximum, Minimum. */ $stats = array("mean" => array("", "Mean"), "median" => array("", "Median"), "spread" => array("", "Spread"), "max" => array("", "Maximum"), "min" => array("", "Minimum")); /** puts into the respective statistics arrays the total page marks. */ foreach ($pagemarks as $each) { array_push($stats["mean"], $calc->mean($each)); array_push($stats["median"], $calc->median($each)); array_push($stats["spread"], $calc->spread($each)); array_push($stats["max"], $calc->max($each)); array_push($stats["min"], $calc->min($each)); } /** Stats for total marks of entire class appended at the very end of the statistics arrays. */ array_push($stats["mean"], $calc->mean($totalScore)); array_push($stats["median"], $calc->median($totalScore)); array_push($stats["spread"], $calc->spread($totalScore)); array_push($stats["max"], $calc->max($totalScore)); array_push($stats["min"], $calc->min($totalScore)); /** actually write the statistics into the CSV. */ foreach ($stats as $s) { fputcsv($output, $s); } fclose($output); ?>
/** Function that draws the statistics onto the page and provides a link to the downloadable CSV. */ function create_stats_page($crs, $yr) { global $DB; $calc = new stats(); //$mform->addElement('header', 'year_sem', get_string('stats_title','local_memplugin')); echo '<h1>Results for ' . $yr . '</h1><br>'; /** The SQL query to retrieve all the totatl marks for each booklet for a specific year and course. */ /* $mark_sql = $GLOBALS['DB']->get_records_sql('SELECT {mem_mark_stats}.booklet_id, total_booklet_score, total_booklet_score_max FROM {mem_booklet_data}, {mem_mark_stats} WHERE course_id=? and year_semester_origin=? and {mem_mark_stats}.booklet_id={mem_booklet_data}.booklet_id and {mem_mark_stats}.exam_hash={mem_booklet_data}.exam_hash', array($crs, $yr)); */ // get hash $recBk = $DB->get_records_sql('SELECT {mem_booklet_data}.booklet_id, student_id, exam_hash, max_pages FROM {mem_booklet_data} WHERE {mem_booklet_data}.course_id=? and year_semester_origin=? ', array($crs, $yr)); $student_totals = 0; $raw_data_score = array(); $max_score = 0; foreach ($recBk as $bk) { $pageMarks = 0; $pageTotals = 0; for ($i = 1; $i <= $bk->max_pages; $i++) { $recPg = $DB->get_record_sql('SELECT page_id, page_marks, page_marks_max FROM {mem_pages} WHERE {mem_pages}.page_num=? AND {mem_pages}.exam_hash=? AND {mem_pages}.booklet_id=? ', array($i, $bk->exam_hash, $bk->booklet_id)); $pageMarks += $recPg->page_marks; $pageTotals += $recPg->page_marks_max; } $student_totals += $pageMarks; $max_score = $pageTotals; array_push($raw_data_score, $pageMarks); } $total_mark = $student_totals; $raw_marks = $raw_data_score; var_dump($total_mark); echo "</br>"; var_dump($raw_marks); echo "</br>"; //$percentage_interval = floor(100/$total_mark); $percentage_interval = 5; echo $calc->graph($raw_marks, $percentage_interval, $total_mark); echo get_string('stats_mean', 'local_memplugin') . number_format($calc->mean($calc->to_percentage_array($raw_marks, $total_mark)), 2) . '%<br>'; echo get_string('stats_median', 'local_memplugin') . number_format($calc->median($calc->to_percentage_array($raw_marks, $total_mark)), 2) . '%<br>'; echo get_string('stats_spread', 'local_memplugin') . number_format($calc->spread($calc->to_percentage_array($raw_marks, $total_mark)), 2) . '%<br>'; echo get_string('stats_max', 'local_memplugin') . $calc->max($calc->to_percentage_array($raw_marks, $total_mark)) . '%<br>'; echo get_string('stats_min', 'local_memplugin') . $calc->min($calc->to_percentage_array($raw_marks, $total_mark)) . '%<br>'; /** This link generates the CSV by calling csv_generate.php */ echo '<a href="csv_generate.php?semester=' . $yr . '&course=' . $crs . '" alt="download csv">' . get_string('stats_download', 'local_memplugin') . '</a></br>'; }