A2 - Beskrivande statistik
Ett projekt för denna uppgift hittar du i din privata grupp under kursens grupp på GitLab.
Examination A2 (provmoment 2002) är en examination där du lämnar in genom att göra en “merge request”. Mer information om hur du kommer igång med uppgiften hittar du under Examinationsuppgifter->Om->Kom igång.
- Deadline 2026-10-09 17.00
- Deadline 2026-11-13 17.00 (omexamination)
- Deadline 2027-01-08 17.00 (omexamination)
- Deadline 2027-06-11 17.00 (omexamination, sista tillfället denna kursomgång)
Poängrapportering i Ladok
Section titled “Poängrapportering i Ladok”Detta är ett examinerande, poängsatt moment i kursen. Examinationens resultat rapporteras in i Ladok senast 15 arbetsdagar efter deadline.
Introduktion
I denna examinationsuppgift ska du slutföra ett påbörjat projekt som syftar till att presentera beskrivande statistik över stora datamängder.
Beskrivande statistik (eller deskriptiv statistik; eng. "descriptive statistics") är ett sätt att reducera stora datamängder för att presentera en sammanfattning av datamängden.
Uppgift
Din uppgift är att slutföra implementationen av modulen statistics.js vars exporterade funktioner kan användas för att reducera den datamängd som skickas som argument, i form av en array med värden av typen number, till dem.
Det är viktigt att du följer anvisningarna för src/statistics.js då modulerna src/app.js och test/statistics.test.js använder sig av den enligt beroendediagrammet nedan.
src/statistics.js
Modulen ska exportera funktioner som kan bestämma maximum- och minimumvärden, variationsbredd ("range"), medelvärde ("average"), median, standardavvikelse ("standard deviation") samt typvärde ("mode", som kan vara en array med värden). Det ska även finnas en funktion som returnera ett objekt innehållande samtliga värden. Objektets egenskapers namn och typ framgår av JSDOC-kommentaren av den egendefinierade typen StatisticalSummary, som du finner i modulen.
/**
* Module for obtaining statistical analysis about a set of data.
*
* @author Johan Leitet <johan.leitet@lnu.se>
* @author Mats Loock <mats.loock@lnu.se>
* @author // TODO: YOUR NAME <YOUR EMAIL>
* @version 2.0.0
*/
// ------------------------------------------------------------------------------
// Type definitions
// ------------------------------------------------------------------------------
/**
* Represents statistical summary.
*
* @typedef {object} StatisticalSummary
* @property {number} average - The average value.
* @property {number} maximum - The maximum value.
* @property {number} median - The median value.
* @property {number} minimum - The minimum value.
* @property {number[]} mode - The mode value.
* @property {number} range - The range value.
* @property {number} standardDeviation - The standard deviation value.
*/
// ------------------------------------------------------------------------------
// Public interface
// ------------------------------------------------------------------------------
// TODO: Write your code here.
/**
* Returns several descriptive statistics (average, maximum, median, minimum,
* mode, range and standard deviation) from a set of numbers.
*
* @param {number[]} numbers - The set of data to be analyzed.
* @throws {TypeError} The passed argument is not an array.
* @throws {Error} The passed array contains no elements.
* @throws {TypeError} The passed array may only contain valid numbers.
* @returns {StatisticalSummary} An object whose properties correspond to the descriptive statistics from the data set.
*/
export function summary (numbers) {
// TODO: Write your code here.
}
Funktionerna average (#1), maximum (#2), median (#3), minimum (#4), mode (#5), range (#6) och standardDeviation (#7), ska exporteras varför dessa måste skapas och implementeras. Funktionen summary (#8) är påbörjad och exporteras men måste även den implementeras.
Exporterade funktioner i modulen statistics.js får inte ha några som helst sidoeffekter, utan ska var så kallade "pure functions". (#10) De exporterade funktionerna måste vidare klara av att hantera arrayer med ett stort antal element. (#15)
De exporterade funktionerna ska validera indatat som skickas som argument och kasta undantag om indatat inte uppfyller ställda krav (#9). Ingen av de exporterade funktionerna får fånga några undantag (#14).
- Anropas någon av funktionerna med ett argument som inte är en array ska ett undantag av typen
TypeErrorkastas innehållande meddelandetThe passed argument is not an array.. - Anropas någon av funktionerna med ett argument som refererar till en tom array, ska ett undantag av typen
Errorkastas innehållande meddelandetThe passed array contains no elements.. - Anropas någon av funktionerna med ett argument som refererar till en array vars element innehåller annat än bara värden av typen
Number, ska ett undantag av typenTypeErrorkastas innehållande meddelandetThe passed array may only contain valid numbers.. OBS! VärdetNumber.NaNska inte räknas som ett godkänt värde trots att det är av typenNumber.
Icke funktionella krav
Gör tillräckligt många "commits", minst 15, för att det ska vara möjligt att följa hur applikationen vuxit fram över tid. (#16)
All källkod måste följa kursens kodstandard. (#13)
Undvik om lämpligt att upprepa kod och bryt därför inte mot principen DRY ("Don't Repeat Yourself"). (#12)
Dokumentera alla funktioner genom att använda JSDOC-kommentarer. Använd även radkommentarer inuti funktioner i de fall det är befogat. (#11)
Tips
- Medelvärde, median, typvärde och variationsbredd, http://www.matteboken.se/lektioner/matte-1/sannolikhet-och-statistik/medelvarde-median-typvarde-och-variationsbredd
- Standardavvikelse, http://www.matteboken.se/lektioner/matte-2/statistik/standardavvikelse
- Genom att köra enhetstesterna som kommer med examinationsuppgiften kan du undersöka om koden du skrivit löst uppgiften (i alla fall enligt bifogade enhetstester...).
Inlämning av uppgiften
Section titled “Inlämning av uppgiften”Innehåll otillgängligt (HTTP 404). Öppna originalet.