ThinkStats (4)
thinkstat.py の中身確認。というか Python のお勉強か。
例えば最初に Mean という手続きが定義されてるんですが、中身は以下のみ。
return float(sum(t)) / len(t)
引数はコメントに t: sequence of numbers という記載があり、sum とか len は標準で用意されてる手続きなのかな、と言いつつ REPL で確認してみるに以下。
>>> sum([1, 2, 3, 4, 5]) 15 >>> len([1, 2, 3, 4, 5]) 5 >>> sum((1, 2, 3, 4, 5)) 15
成程。ええと定義されてる手続きは以下なカンジなのかな。
- Mean : 算術平均
- Var : 分散
- MeanVar : 算術平均と分散
むむ。Python で平方根ってどうやるんだろ。sqrt ではなさげ。あ、math を import して 以下なのか。
>>> import math >>> mqth.sqrt <built-in function sqrt>
つーことは、以下なのかな。
$ cat pumpkin.py import math import thinkstats def Pumpkin(t): mu = thinkstats.Mean(t) var = thinkstats.Var(t, mu) sd = math.sqrt(var) return mu, var, sd
一応 python な REPL でも動作確認。
>>> import pumpkin >>> pumpkin.Pumpkin([1, 2, 3, 4, 5]) (3.0, 2.0, 1.4142135623730951)
もう少し時間あるので 2-2 にも着手。以下がでっちあがりました。
# -*- coding: utf-8 -*- import survey import thinkstats import math table = survey.Pregnancies() table.ReadRecords() first_p = [] other_p = [] for i in table.records: if i.outcome == 1: if i.birthord == 1: first_p.append(i.prglength) else: other_p.append(i.prglength) print u' 第一子の妊娠期間の標準偏差:', math.sqrt(thinkstats.Var(first_p)) print u' 第二子以降の妊娠期間の標準偏差:', math.sqrt(thinkstats.Var(other_p))
実行してみると以下な出力。
$ python sd.py 第一子の妊娠期間の標準偏差: 2.79158506982 第二子以降の妊娠期間の標準偏差: 2.61557611068
むむ。ばらつきがない場合は 0 との事なんだけどやっぱあまり変わりはない、って印象ですね。もっとヤッてたいけど週末で楽しむことに。