「Think Stats――プログラマのための統計入門」の演習問題1を、Python3系でおこなう。
この本のサンプルコードはPython2系で書かれている。
それをPython3系で演習していく。
Python3環境はMacにMinicondaをインストールしPythonのデータ分析環境構築を参照。
目次
- 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'
そういえばデータセットを配置してなかった。
からダウンロードする。Think Stats Data from NSFG
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
一日一問のペースでやっていくぞ!
参考
Python 2.7.x と 3.x の決定的な違いを例とともに | POSTD
コメント