- """ coding=utf-8
-
- Analytical Skills
- Practicum 2: statistiek
-
- (c) 2019 Hogeschool Utrecht
- Bart van Eijkelenburg (bart.vaneijkelenburg@hu.nl)
- Tijmen Muller (tijmen.muller@hu.nl)
-
-
- Naam:
- Klas:
- Studentnummer:
-
-
- Opdracht: werk onderstaande functies uit. Elke functie krijgt als argument een
- (mogelijk ongesorteerde) lijst *lst* met gehele getallen (int) .
-
- Je kunt je functies met het gegeven raamwerk door het bestand te uit te voeren (of met behulp
- van pytest, als je weet hoe dat werkt). Lever je werk in op Canvas als alle tests slagen.
-
- Let op! Je mag voor deze opdracht geen extra modules importeren met 'import'.
- Je krijgt in deze opdracht alleen de beschikking over de functie sqrt() om een
- wortel te kunnen trekken. Deze is al voor je geimporteerd en kun je direct aanroepen.
- Bijvoorbeeld: sqrt(16) geeft 4.0 als resultaat
- """
- from math import sqrt
-
-
- def mean(lst):
- """ Retourneert het gemiddelde (float) van de lijst lst. """
- return
-
-
- def rnge(lst):
- """ Retourneert het bereik (int) van de lijst lst. """
- return
-
-
- def median(lst):
- """ Retourneert de mediaan (float) van de lijst lst. """
- return
-
-
- def q1(lst):
- """
- Retourneert het eerste kwartiel Q1 (float) van de lijst lst.
- Tip: maak gebruik van median()
- """
- return
-
-
- def q3(lst):
- """ Retourneert het derde kwartiel Q3 (float) van de lijst lst. """
- return
-
-
- def var(lst):
- """ Retourneert de variantie (float) van de lijst lst. """
- return
-
-
- def std(lst):
- """ Retourneert de standaardafwijking (float) van de lijst lst. """
- return
-
-
- def freq(lst):
- """
- Retourneert een dictionary met als keys de waardes die voorkomen in lst en
- als value het aantal voorkomens van die waarde.
-
- Bijvoorbeeld: freq([0, 0, 4, 5]) = {0: 2, 4: 1, 5: 1}
- """
- freqs = dict()
- return freqs
-
-
- def modes(lst):
- """ Retourneert een gesorteerde lijst (list) van de modi van lijst lst. """
- modi = []
- return sorted(modi)
-
-
- """==============================================[ HU TESTRAAMWERK ]====================================================
- Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
- Je kunt je code testen door deze file te runnen of met behulp van pytest.
- """
-
-
- def my_assert_arg(function, arg, expected_output):
- assert function(arg) == expected_output, \
- f"Fout: {function.__name__}({arg}) geeft {function(arg)} in plaats van {expected_output}"
-
-
- def test_mean():
- testcases = [
- ([4, 2, 5, 8, 6], 5.0),
- ([1, 3, 2, 4, 6, 2, 4, 2], 3.0)
- ]
-
- for case in testcases:
- my_assert_arg(mean, case[0], case[1])
-
-
- def test_rnge():
- testcases = [
- ([4, 2, 5, 8, 6], 6),
- ([1, 3, 2, 4, 6, 2, 4, 2], 5)
- ]
-
- for case in testcases:
- my_assert_arg(rnge, case[0], case[1])
-
-
- def test_median():
- testcases = [
- ([4, 2, 5, 8, 6], 5.0),
- ([1, 3, 4, 6, 4, 2], 3.5),
- ([1, 3, 4, 6, 2, 4, 2], 3.0),
- ([1, 3, 2, 4, 6, 2, 4, 2], 2.5)
- ]
-
- for case in testcases:
- my_assert_arg(median, case[0], case[1])
-
-
- def test_modes():
- testcases = [
- ([4, 2, 5, 8, 6], [2, 4, 5, 6, 8]),
- ([1, 3, 4, 6, 4, 2], [4]),
- ([1, 3, 4, 6, 2, 4, 2], [2, 4]),
- ([1, 3, 2, 4, 6, 2, 4, 2], [2])
- ]
-
- for case in testcases:
- my_assert_arg(modes, case[0], case[1])
-
-
- def test_var():
- testcases = [
- ([4, 2, 5, 8, 6], 4.0),
- ([1, 3, 2, 4, 6, 2, 4, 2], 2.25)
- ]
-
- for case in testcases:
- my_assert_arg(var, case[0], case[1])
-
-
- def test_std():
- testcases = [
- ([4, 2, 5, 8, 6], 2.0),
- ([1, 3, 2, 4, 6, 2, 4, 2], 1.5)
- ]
-
- for case in testcases:
- my_assert_arg(std, case[0], case[1])
-
-
- def test_q1():
- testcases = [
- ([4, 2, 5, 8, 6], 3.0),
- ([1, 3, 4, 6, 4, 2], 2.0),
- ([1, 3, 5, 6, 1, 4, 2], 1.0),
- ([1, 3, 3, 5, 6, 2, 4, 1], 1.5)
- ]
-
- for case in testcases:
- my_assert_arg(q1, case[0], case[1])
-
-
- def test_q3():
- testcases = [
- ([4, 2, 5, 8, 6], 7.0),
- ([1, 3, 4, 6, 4, 2], 4.0),
- ([1, 3, 5, 6, 2, 4, 1], 5.0),
- ([1, 3, 3, 5, 6, 2, 4, 1], 4.5)
- ]
-
- for case in testcases:
- my_assert_arg(q3, case[0], case[1])
-
-
- def test_freq():
- testcases = [
- ([4, 2, 5, 8, 6], {2: 1, 4: 1, 5: 1, 6: 1, 8: 1}),
- ([1, 3, 4, 6, 4, 2], {1: 1, 2: 1, 3: 1, 4: 2, 6: 1}),
- ([1, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}),
- ([1, 3, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 2, 4: 1, 5: 1, 6: 1})
- ]
-
- for case in testcases:
- my_assert_arg(freq, case[0], case[1])
-
-
- if __name__ == '__main__':
- try:
- print("\x1b[0;32m")
-
- test_mean()
- print("Je functie mean(lst) werkt goed!")
-
- test_rnge()
- print("Je functie rnge(lst) werkt goed!")
-
- test_median()
- print("Je functie median(lst) werkt goed!")
-
- test_q1()
- print("Je functie q1(lst) werkt goed!")
-
- test_q3()
- print("Je functie q3(lst) werkt goed!")
-
- test_var()
- print("Je functie var(lst) werkt goed!")
-
- test_std()
- print("Je functie std(lst) werkt goed!")
-
- test_freq()
- print("Je functie freq(lst) werkt goed!")
-
- test_modes()
- print("Je functie modes() werkt goed!")
-
- print("\nGefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...\n")
-
-
- def hist(freqs):
- v_min = min(freqs.keys())
- v_max = max(freqs.keys())
-
- histo = str()
- for i in range(v_min, v_max + 1):
- histo += "{:5d} ".format(i)
- if i in freqs.keys():
- histo += "█" * freqs[i]
- histo += '\n'
-
- return histo
-
- print("\x1b[0;30m")
- s = input("Geef een reeks van gehele getallen (gescheiden door een spatie): ")
- userlst = [int(c) for c in s.split()]
-
- print("\nHet gemiddelde is {:.2f}".format(mean(userlst)))
- print("De modi zijn {}".format(modes(userlst)))
- print("De mediaan is {:.2f}".format(median(userlst)))
- print("Q1 is {:.2f}".format(q1(userlst)))
- print("Q3 is {:.2f}".format(q3(userlst)))
-
- print("Het bereik is {}".format(rnge(userlst)))
- print("De variantie is {:.2f}".format(var(userlst)))
- print("De standaardafwijking is {:.2f}".format(std(userlst)))
-
- print("\nHistogram (gekanteld):\n\n" + hist(freq(userlst)))
-
- except AssertionError as ae:
- print("\x1b[0;31m\n" + str(ae))
|