開発環境
- 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 コメント:
コメントを投稿