開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- Python 3.5 (プログラミング言語)
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 コメント:
コメントを投稿