ThinkStats (14)

ちょっと休憩。

演習問題 3-5

relay.py をコピーして relay_cdf.py を作成して main を以下に修正すればグラフが描画されました。

def main():
    results = ReadResults()
    speeds = GetSpeeds(results)
    cdf = Cdf.MakeCdfFromList(speeds, 'speeds')
    myplot.Cdf(cdf)
    myplot.Show(title='CDF of running speed',
               xlabel='speed (mph)',
               ylabel='probability')

本題はこっちじゃなくて演習問題 3-10 ですね。

演習問題 3-10

描画してみました。確率がほぼ一定だ。これは凄い。

import random
import myplot
import Cdf
import Pmf

def main():
    rands = [random.random() for i in range(1000)]
#    pmf = Pmf.MakePmfFromList(rands, 'speeds')
#    myplot.Pmf(pmf)
#    myplot.Show(title='PMF of random.random()',
#               xlabel='random.random()',
#               ylabel='probability')
    cdf = Cdf.MakeCdfFromList(rands, 'rands')
    myplot.Cdf(cdf)
    myplot.Show(title='CDF of random.random()',
               xlabel='random.random()',
               ylabel='probability')


if __name__ == '__main__':
    main()

PMF とか確率が見事に 1/1000 なんスけどここまで、ってのも如何なものかと。

演習問題 3-11

ええと、Cdf なオブジェクトには Percentile というパーセンタイル順位を受け取っておの値を戻すメソドが定義されているので簡単ですね。

def Median(Cdf):
    return Cdf.Percentile(50)

def Interquartile(Cdf):
    return Cdf.Percentile(75) - Cdf.Percentile(25)

あと、以下な手順で Cdf を作ってみましたがよく分からんな。

import survey
import Cdf

table = survey.Pregnancies()
table.ReadRecords()

birthwgt_list = []

for i in table.records:
    if i.outcome == 1:
       birthwgt_list.append(i.birthwgt_lb)

cdf = Cdf.MakeCdfFromList(birthwgt_list)

cdf.Percentile(50) ## -> 7
cdf.Percentile(75) ## -> 8
cdf.Percentile(25) ## -> 6

うーん。グラフ出力しようとしたら NA が、とか言われたぞorz
別途現実トウヒの折にはメモを出力するかも。