Python3.4(Miniconda3)でThink Statsの演習問題1を行う

Think Stats――プログラマのための統計入門」の演習問題1を、Python3系でおこなう。

この本のサンプルコードはPython2系で書かれている。
それをPython3系で演習していく。

Python3環境はMacにMinicondaをインストールしPythonのデータ分析環境構築を参照。

目次

  1. Think Stats演習問題1

1. Think Stats演習問題1

Think Statsの演習問題用のthikstatsディレクトリを作成する。

mkdir ~/work/thinkstats

サンプルコードは以下のサイトからダウンロードする。

Think Stats: Probability and Statistics for Programmers

解凍して、配置する。

mv ./thinkstats.code ~/work/thinkstats/thinkstats.code

今回の演習ではサンプルコードのsurvey.pyを使用する。
thinkstatsディレクトリ直下にコピー。

cp ~/thinkstats/thinkstats.code/survey.py ~/thinkstats/survey.py

Python3.4で進めるため、miniconda3を有効化。

source /Users/runble1/.pyenv/versions/miniconda3-3.8.3/envs/test01/bin/activate test01

早速つかってみる。

(test01)runble1Pro:thinkstats runble1$ python survey.py
# いかが表示された
File "survey.py", line 190
print 'Number of respondents', len(resp.records)
^
SyntaxError: invalid syntax

190行目でシンタックスエラー。
サンプルコードは以下。

def main(name, data_dir='.'):
    resp = Respondents()
    resp.ReadRecords(data_dir)
    print 'Number of respondents', len(resp.records)

    preg = Pregnancies()
    preg.ReadRecords(data_dir)
    print 'Number of pregnancies', len(preg.records)

Python3系ではprint文は()で囲まなければならない。
190行目(と194行目)をいかに変更。

def main(name, data_dir='.'):
    resp = Respondents()
    resp.ReadRecords(data_dir)
    print ('Number of respondents', len(resp.records))

    preg = Pregnancies()
    preg.ReadRecords(data_dir)
    print ('Number of pregnancies', len(preg.records))

もう一度実行してみた。

(test01)runble1Pro:thinkstats runble1$ python survey.py

またエラーが表示された。

# いかが表示された
Traceback (most recent call last):
File "survey.py", line 198, in <module>
main(*sys.argv)
File "survey.py", line 189, in main
resp.ReadRecords(data_dir)
File "survey.py", line 111, in ReadRecords
self.ReadFile(data_dir, filename, self.GetFields(), Respondent, n)
File "survey.py", line 45, in ReadFile
fp = gzip.open(filename)
File "/Users/runble1/.pyenv/versions/miniconda3-3.8.3/envs/test01/lib/python3.4/gzip.py", line 52, in open
binary_file = GzipFile(filename, gz_mode, compresslevel)
File "/Users/runble1/.pyenv/versions/miniconda3-3.8.3/envs/test01/lib/python3.4/gzip.py", line 181, in __init__
fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
FileNotFoundError: [Errno 2] No such file or directory: './2002FemResp.dat.gz'

そういえばデータセットを配置してなかった。

からダウンロードする。

mv ./2002FemResp.dat.gz ~/work/thinkstats/
mv ./2002FemPreg.dat.gz ~/work/thinkstats/

もう一度する。

(test01)runble1Pro:thinkstats runble1$ python survey.py

いかが表示され、期待通りに実行されたことが確認できた。

Number of respondents 7643
Number of pregnancies 13593

一日一問のペースでやっていくぞ!

参考

Think Stats――プログラマのための統計入門

Python 2.7.x と 3.x の決定的な違いを例とともに | POSTD

8. エラーと例外

 

コメント

タイトルとURLをコピーしました