You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
6.2 KiB

5 years ago
5 years ago
  1. """ coding=utf-8
  2. Analytical Skills
  3. Practicum 2: statistiek
  4. (c) 2019 Hogeschool Utrecht
  5. Bart van Eijkelenburg (bart.vaneijkelenburg@hu.nl)
  6. Tijmen Muller (tijmen.muller@hu.nl)
  7. Naam:
  8. Klas:
  9. Studentnummer:
  10. Opdracht: werk onderstaande functies uit. Elke functie krijgt als argument een
  11. (mogelijk ongesorteerde) lijst *lst* met gehele getallen (int).
  12. Je kunt je functies testen met het gegeven raamwerk door het bestand uit te voeren (of met behulp
  13. van pytest, als je weet hoe dat werkt). Lever je werk in op Canvas als alle tests slagen.
  14. Let op! Je mag voor deze opdracht geen extra modules importeren met 'import'.
  15. """
  16. def mean(lst):
  17. """ Retourneert het gemiddelde (float) van de lijst lst. """
  18. return
  19. def rnge(lst):
  20. """ Retourneert het bereik (int) van de lijst lst. """
  21. return
  22. def median(lst):
  23. """ Retourneert de mediaan (float) van de lijst lst. """
  24. return
  25. def q1(lst):
  26. """
  27. Retourneert het eerste kwartiel Q1 (float) van de lijst lst.
  28. Tip: maak gebruik van median()
  29. """
  30. return
  31. def q3(lst):
  32. """ Retourneert het derde kwartiel Q3 (float) van de lijst lst. """
  33. return
  34. def var(lst):
  35. """ Retourneert de variantie (float) van de lijst lst. """
  36. return
  37. def std(lst):
  38. """ Retourneert de standaardafwijking (float) van de lijst lst. """
  39. return
  40. def freq(lst):
  41. """
  42. Retourneert een dictionary met als keys de waardes die voorkomen in lst en
  43. als value het aantal voorkomens van die waarde.
  44. Bijvoorbeeld: freq([0, 0, 4, 5]) = {0: 2, 4: 1, 5: 1}
  45. """
  46. freqs = dict()
  47. return freqs
  48. def modes(lst):
  49. """ Retourneert een gesorteerde lijst (list) van de modi van lijst lst. """
  50. modi = []
  51. return sorted(modi)
  52. """==============================================[ HU TESTRAAMWERK ]====================================================
  53. Onderstaand staan de tests voor je code -- hieronder mag je niets wijzigen!
  54. Je kunt je code testen door deze file te runnen of met behulp van pytest.
  55. """
  56. def my_assert_arg(function, arg, expected_output):
  57. assert function(arg) == expected_output, \
  58. f"Fout: {function.__name__}({arg}) geeft {function(arg)} in plaats van {expected_output}"
  59. def test_mean():
  60. testcases = [
  61. ([4, 2, 5, 8, 6], 5.0),
  62. ([1, 3, 2, 4, 6, 2, 4, 2], 3.0)
  63. ]
  64. for case in testcases:
  65. my_assert_arg(mean, case[0], case[1])
  66. def test_rnge():
  67. testcases = [
  68. ([4, 2, 5, 8, 6], 6),
  69. ([1, 3, 2, 4, 6, 2, 4, 2], 5)
  70. ]
  71. for case in testcases:
  72. my_assert_arg(rnge, case[0], case[1])
  73. def test_median():
  74. testcases = [
  75. ([4, 2, 5, 8, 6], 5.0),
  76. ([1, 3, 4, 6, 4, 2], 3.5),
  77. ([1, 3, 4, 6, 2, 4, 2], 3.0),
  78. ([1, 3, 2, 4, 6, 2, 4, 2], 2.5)
  79. ]
  80. for case in testcases:
  81. my_assert_arg(median, case[0], case[1])
  82. def test_modes():
  83. testcases = [
  84. ([4, 2, 5, 8, 6], [2, 4, 5, 6, 8]),
  85. ([1, 3, 4, 6, 4, 2], [4]),
  86. ([1, 3, 4, 6, 2, 4, 2], [2, 4]),
  87. ([1, 3, 2, 4, 6, 2, 4, 2], [2])
  88. ]
  89. for case in testcases:
  90. my_assert_arg(modes, case[0], case[1])
  91. def test_var():
  92. testcases = [
  93. ([4, 2, 5, 8, 6], 4.0),
  94. ([1, 3, 2, 4, 6, 2, 4, 2], 2.25)
  95. ]
  96. for case in testcases:
  97. my_assert_arg(var, case[0], case[1])
  98. def test_std():
  99. testcases = [
  100. ([4, 2, 5, 8, 6], 2.0),
  101. ([1, 3, 2, 4, 6, 2, 4, 2], 1.5)
  102. ]
  103. for case in testcases:
  104. my_assert_arg(std, case[0], case[1])
  105. def test_q1():
  106. testcases = [
  107. ([4, 2, 5, 8, 6], 3.0),
  108. ([1, 3, 4, 6, 4, 2], 2.0),
  109. ([1, 3, 5, 6, 1, 4, 2], 1.0),
  110. ([1, 3, 3, 5, 6, 2, 4, 1], 1.5)
  111. ]
  112. for case in testcases:
  113. my_assert_arg(q1, case[0], case[1])
  114. def test_q3():
  115. testcases = [
  116. ([4, 2, 5, 8, 6], 7.0),
  117. ([1, 3, 4, 6, 4, 2], 4.0),
  118. ([1, 3, 5, 6, 2, 4, 1], 5.0),
  119. ([1, 3, 3, 5, 6, 2, 4, 1], 4.5)
  120. ]
  121. for case in testcases:
  122. my_assert_arg(q3, case[0], case[1])
  123. def test_freq():
  124. testcases = [
  125. ([4, 2, 5, 8, 6], {2: 1, 4: 1, 5: 1, 6: 1, 8: 1}),
  126. ([1, 3, 4, 6, 4, 2], {1: 1, 2: 1, 3: 1, 4: 2, 6: 1}),
  127. ([1, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}),
  128. ([1, 3, 3, 5, 6, 2, 4, 1], {1: 2, 2: 1, 3: 2, 4: 1, 5: 1, 6: 1})
  129. ]
  130. for case in testcases:
  131. my_assert_arg(freq, case[0], case[1])
  132. if __name__ == '__main__':
  133. try:
  134. print("\x1b[0;32m")
  135. test_mean()
  136. print("Je functie mean(lst) werkt goed!")
  137. test_rnge()
  138. print("Je functie rnge(lst) werkt goed!")
  139. test_median()
  140. print("Je functie median(lst) werkt goed!")
  141. test_q1()
  142. print("Je functie q1(lst) werkt goed!")
  143. test_q3()
  144. print("Je functie q3(lst) werkt goed!")
  145. test_var()
  146. print("Je functie var(lst) werkt goed!")
  147. test_std()
  148. print("Je functie std(lst) werkt goed!")
  149. test_freq()
  150. print("Je functie freq(lst) werkt goed!")
  151. test_modes()
  152. print("Je functie modes() werkt goed!")
  153. print("\nGefeliciteerd, alles lijkt te werken! Lever je werk nu in op Canvas...\n")
  154. def hist(freqs):
  155. v_min = min(freqs.keys())
  156. v_max = max(freqs.keys())
  157. histo = str()
  158. for i in range(v_min, v_max + 1):
  159. histo += "{:5d} ".format(i)
  160. if i in freqs.keys():
  161. histo += "" * freqs[i]
  162. histo += '\n'
  163. return histo
  164. print("\x1b[0;30m")
  165. s = input("Geef een reeks van gehele getallen (gescheiden door een spatie): ")
  166. userlst = [int(c) for c in s.split()]
  167. print("\nHet gemiddelde is {:.2f}".format(mean(userlst)))
  168. print("De modi zijn {}".format(modes(userlst)))
  169. print("De mediaan is {:.2f}".format(median(userlst)))
  170. print("Q1 is {:.2f}".format(q1(userlst)))
  171. print("Q3 is {:.2f}".format(q3(userlst)))
  172. print("Het bereik is {}".format(rnge(userlst)))
  173. print("De variantie is {:.2f}".format(var(userlst)))
  174. print("De standaardafwijking is {:.2f}".format(std(userlst)))
  175. print("\nHistogram (gekanteld):\n\n" + hist(freq(userlst)))
  176. except AssertionError as ae:
  177. print("\x1b[0;31m")
  178. print(ae)