2016年8月17日水曜日

開発環境

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 コメント:

コメントを投稿