2016年8月18日木曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の3章(データを統計量で記述する)、3.9(プログラミングチャレンジ)、問題3-5(グループ度数分布表を作る)を取り組んでみる。

問題3-5(グループ度数分布表を作る)

コード(Emacs)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


def create_classes(nummbers, n):
    low = min(nummbers)
    high = max(nummbers)
    width = (high - low) / n
    classes = []
    a = low
    b = low + width
    while a < (high - width):
        classes.append((a, b))
        a = b
        b = a + width
    classes.append((a, high + 1))
    return classes


def frequency_table(numbers, n):
    classes = create_classes(numbers, n)
    d = {}
    for a, b in classes:
        numbers = sorted(numbers)
        for i, num in enumerate(numbers):
            if a <= num < b:
                d[(a, b)] = d.get((a, b), 0) + 1
            else:
                d[(a, b)] = d.get((a, b), 0)
                numbers = numbers[i:]
                break
    print('{0}{1}'.format('点数'.center(10), '頻度'.center(10)))
    for k in sorted(d.keys()):
        print('{0:5}-{1:<5}{2}'.format(k[0], k[1], str(d[k]).center(12)))


if __name__ == '__main__':
    numbers = [7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10]
    for n in range(1, 5):
        frequency_table(numbers, n)

入出力結果(Terminal, IPython)

$ ./sample5.py
    点数        頻度    
    1-11        20     
    点数        頻度    
    1-5.5       6      
  5.5-11        14     
    点数        頻度    
    1-4.0       3      
  4.0-7.0       6      
  7.0-11        11     
    点数        頻度    
    1-3.25      3      
 3.25-5.5       3      
  5.5-7.75      5      
 7.75-11        9
$ 

0 コメント:

コメントを投稿