開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- Python 3.5 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の3章(データを統計量で記述する)、3.9(プログラミングチャレンジ)、問題3-4(百分位を求める)を取り組んでみる。
問題3-4(百分位を求める)
コード(Emacs)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
def percentile_number(numbers, percentile):
data = sorted(numbers)
n = len(data)
i = n * percentile / 100 + 0.5
if i.is_integer():
return data[int(i)]
k = math.floor(i)
f = int(i - k)
return (1 - f) * data[k - 1] + f * data[k]
def get_numbers(filename):
with open(filename) as f:
numbers = [float(line.strip()) for line in f]
return numbers
if __name__ == '__main__':
filename = 'marks.txt'
numbers = get_numbers(filename)
print('numbers: {0}'.format(', '.join(map(str, numbers))))
for percentile in range(5, 100, 5):
n = percentile_number(numbers, percentile)
print('{0}百分位: {1}'.format(percentile, n))
入出力結果(Terminal, IPython)
$ ./sample4.py numbers: 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 5百分位: 10.5 10百分位: 12.5 15百分位: 12.5 20百分位: 13.5 25百分位: 13.5 30百分位: 15.5 35百分位: 15.5 40百分位: 16.0 45百分位: 16.0 50百分位: 16.5 55百分位: 16.5 60百分位: 17.0 65百分位: 18.0 70百分位: 18.0 75百分位: 18.0 80百分位: 18.0 85百分位: 18.5 90百分位: 20.0 95百分位: 20.0 $
0 コメント:
コメントを投稿