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 との事なんだけどやっぱあまり変わりはない、って印象ですね。もっとヤッてたいけど週末で楽しむことに。