Skip to content

Commit

Permalink
quartile
Browse files Browse the repository at this point in the history
  • Loading branch information
pde-bakk committed Oct 10, 2022
1 parent a3da7c1 commit 9a2a71c
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 39 deletions.
43 changes: 4 additions & 39 deletions module00/ex01/TinyStatistician.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def median(x: np.ndarray) -> float | None:

@staticmethod
@accepts(np.ndarray)
def quartiles(x: np.ndarray) -> list[float] | None:
def quartile(x: np.ndarray) -> list[float] | None:
arr = np.sort(x)
middle_index = arr.shape[0] // 2
if arr.shape[0] % 2 == 1:
Expand All @@ -51,12 +51,11 @@ def quartiles(x: np.ndarray) -> list[float] | None:
@accepts(np.ndarray, (int, float))
def percentile(x: np.ndarray, p: float | int) -> float | None:
arr = np.sort(x)
idx = (arr.shape[0] - 1) * p / 100
idx = (arr.shape[0] - 1) * (p / 100)
if idx.is_integer():
return arr[idx]
f, c = int(idx), int(idx + 1.0)
f_diff, c_diff = idx - f, c - idx
return c_diff * arr[f] + f_diff * arr[c]
floor, ceiling = int(idx), int(idx + 1.0)
return arr[floor] + (idx - floor) * (arr[ceiling] - arr[floor])

@staticmethod
@accepts(np.ndarray)
Expand All @@ -68,37 +67,3 @@ def var(x: np.ndarray) -> float | None:
@accepts(np.ndarray)
def std(x: np.ndarray) -> float | None:
return sqrt(TinyStatistician.var(x))


def main() -> None:
tstat = TinyStatistician()
a = np.array([1, 42, 300, 10, 59])
mean = tstat.mean(a)
print(f'{mean = }')
assert mean == 82.4
median = tstat.median(a)
print(f'{median = }')
assert median == 42.0
quartiles = tstat.quartiles(a)
print(f'{quartiles = }')
assert quartiles == [10.0, 59.0]
variance = tstat.var(a)
print(f'{variance = }')
assert variance == 15349.3
std_deviation = tstat.std(a)
print(f'{std_deviation = }')
assert std_deviation == 123.89229193133849

percentiles: dict = {
10: tstat.percentile(a, 10),
15: tstat.percentile(a, 15),
20: tstat.percentile(a, 20)
}
print(f'{percentiles = }')
assert percentiles[10] == 4.6, f'I came up with {percentiles[10]}'
assert percentiles[15] == 6.4, f'I came up with {percentiles[15]}'
assert percentiles[20] == 8.2, f'I came up with {percentiles[20]}'


if __name__ == '__main__':
main()
36 changes: 36 additions & 0 deletions module00/ex01/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from TinyStatistician import TinyStatistician
import numpy as np


def main() -> None:
tstat = TinyStatistician()
a = np.array([1, 42, 300, 10, 59])
mean = tstat.mean(a)
print(f'{mean = }')
assert mean == 82.4
median = tstat.median(a)
print(f'{median = }')
assert median == 42.0
quartiles = tstat.quartile(a)
print(f'{quartiles = }')
assert quartiles == [10.0, 59.0]
variance = tstat.var(a)
print(f'{variance = }')
assert variance == 15349.3
std_deviation = tstat.std(a)
print(f'{std_deviation = }')
assert std_deviation == 123.89229193133849

percentiles: dict = {
10: tstat.percentile(a, 10),
15: tstat.percentile(a, 15),
20: tstat.percentile(a, 20)
}
print(f'{percentiles = }')
assert abs(percentiles[10] - 4.6) < 1e-5, f'I came up with {percentiles[10]}'
assert abs(percentiles[15] - 6.4) < 1e-5, f'I came up with {percentiles[15]}'
assert abs(percentiles[20] - 8.2) < 1e-5, f'I came up with {percentiles[20]}'


if __name__ == '__main__':
main()

0 comments on commit 9a2a71c

Please sign in to comment.