開発環境
- macOS Mojave - Apple
- Emacs (Text Editor)
- Python 3.7 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の2章(データを統計量で記述する)、3.9(プログラミングチャレンジ)、問題3-4(百分位を求める)を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 def score(data, percentile): n = len(data) if n == 0: raise Exception('データが無い') if 0 == percentile: return data[0] if percentile == 100: return data[-1] if 0 < percentile < 100: data = sorted(data) i = n * percentile / 100 + 0.5 if i.is_integer(): return data[int(i) - 1] k = int(i) f = i - k return (1 - f) * data[k - 1] + f * data[k] raise Exception(f'百分位は0以上から100以下: {percentile}') data = [5, 1, 9, 3, 14, 9, 7] percentiles = [50, 25] for percentile in percentiles: print(f'{percentile}百分位: {score(data, percentile)}') with open('marks.txt') as f: nums = [float(line) for line in f] print(nums) while True: try: percentile = input('百分位: ') if percentile == 'q': break percentile = float(percentile) print(f'{percentile}百分位: {score(nums, percentile)}') except ValueError as err: print(err) except Exception as err: print(err)
入出力結果(Terminal, Jupyter(IPython))
$ ./sample4.py 50百分位: 7 25百分位: 3.5 [11.0, 20.0, 18.0, 18.0, 16.0, 11.0, 16.0, 18.0, 17.0, 16.5, 18.5, 19.5, 16.5, 14.5, 13.5, 12.5, 10.5, 15.5, 13.5, 16.5, 20.0, 18.0, 19.5, 15.0, 18.0] 百分位: -1 百分位は0以上から100以下: -1.0 百分位: 0 0.0百分位: 11.0 百分位: 10 10.0百分位: 11.0 百分位: 50 50.0百分位: 16.5 百分位: 100 100.0百分位: 18.0 百分位: 101 百分位は0以上から100以下: 101.0 百分位: q $
0 コメント:
コメントを投稿