-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstats_calculations.py
More file actions
91 lines (73 loc) · 2.89 KB
/
stats_calculations.py
File metadata and controls
91 lines (73 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
""" This module implements simple statistics functions. """
from math import sqrt
from collections import Counter
import statistics
def getNumbers():
"""This function gets numbers from a user and returns it in a list."""
while True:
try:
numbers = input("Enter a list of numbers separated by spaces: ")
num_list = [float(num) for num in numbers.split()]
if not num_list:
print("Please enter a valid list of numbers.")
return num_list
except ValueError as e:
print("Please enter a valid list of numbers.")
def mean(numbers):
"""This function takes a list of numbers as a parameter
and returns the mean."""
return round(sum(numbers) / len(numbers), 2)
def variance(numbers):
"""This function takes a list of numbers as a parameter
and returns the variance."""
xbar = mean(numbers)
sumDevSq = 0.0 # initialize the sum of deviation squares to 0
for num in numbers:
dev = xbar - num # deviation from mean
sumDevSq = sumDevSq + dev * dev # increment
return round(sumDevSq / (len(numbers) - 1), 3)
def stdDev(numbers):
"""This function takes a list of numbers and a mean as parameters
and returns the sample standard deviation."""
return round(sqrt(variance(numbers)), 3)
def quick_select(numbers, k):
"""This function takes a list of numbers and an index k as parameters
and returns the kth smallest element in the list."""
if len(numbers) == 1:
return numbers[0]
pivot = numbers[len(numbers) // 2]
less = [i for i in numbers if i < pivot] # all elements less than the pivot
greater = [i for i in numbers if i > pivot] # 3 all elements greater than the pivot
equal = [i for i in numbers if i == pivot] # all elements equal to the pivot
if k < len(less):
return quick_select(less, k)
elif k < len(less) + len(equal):
return equal[0]
else:
return quick_select(greater, k - len(less) - len(equal))
def median(numbers):
"""This function takes a list of numbers as a paremeter
and returns the median."""
size = len(numbers)
if size == 0:
raise ValueError("list is empty, median requires at least one data point")
if size % 2 == 1:
return quick_select(numbers, size // 2)
else:
return (
quick_select(numbers, size // 2 - 1) + quick_select(numbers, size // 2) / 2
)
def mode(numbers):
"""This function takes a list of numbers as a parameter
and returns the mode."""
try:
return statistics.mode(numbers)
except statistics.StatisticsError:
return "No unique mode found"
def geometricMean(numbers):
"""This function takes a list of numbers as a parameter
and returns the geometric mean."""
product = 1
for num in numbers:
product *= num
return round(product ** (1 / len(numbers)), 3)