Pythonで統計学を学ぼうとして関数型に打ちのめされる。

開発

この記事を書いてるのは12/23ですが、カレンダー埋めのため11月で投稿します。

ども、根っからのJavaプログラマー、とのです。

…正確に言うとJavaもまともに書けないへっぽこプログラマーです。

Pythonもやりたいし統計学も学びたい

そんな俺ですが、2014年に向けてなにか新しいことしなきゃですね。

新しい言語としてPython、新しい分野として統計学(ひいては金融工学へ)を学ぼうと思っています。

いきさつはテスト手法から

ところで、最近EA作ったりしてたのですが、そのやり方に手探り感が強いんですよ。
適当にロジック引っ張ってきてバックテストやって一喜一憂…
これじゃまるで素人。

じゃあどうすればいいかと考えて、以前買ってほっぽりっぱなしだったアルゴリズムトレーディング入門とか読んでました。

この本ではウォークフォワードテストを推奨していて、じゃあそれで検証やってみるかーとか思ってたんですが、
いかんせん2002年の本なので今はどういう評価なのだろうと「ウォークフォワードテスト」で検索すると、
こんな記事が2番めに出てきて見事にディスられてる…

自分の学のなさに呆れる

んで、じゃあこの記事で出てくるレジームスイッチモデルとかはなんぞやと検索するとこんなのが出てきますが、
正直読んでも全く分からん。

だってこんなんですよ。

siki

もはやコピペすらできない。

わざわざ画像貼りましたわ。

この前月1000円でサブスクリプション契約したPhotoshopCCが大活躍ですよ。

別にこんな式が一発で分かるようになりたいというわけではないんですけど、
そもそも数学が苦手だったおかげでこういう領域には全く踏み込んでいなかったので、
もうちょいここらへんの議論が分かるようになりたい。

この領域の基礎となるのはやっぱ統計学だよね、ということで冒頭に戻るわけです。

Python使って統計学

そんで統計学関連のページを漁っていたのですが、
どうも統計学の入門はExcelとか使って話を進めていく。

俺Excel持ってないし(LibreOffice使ってますが)。

最近はデータサイエンティストとかが一躍脚光を浴びてるし、
Rとかで解析するのも流行っているから、
どうせ始めるならそういうので始めたいなぁ。
自分でハードルをかってに上げていきながら再び検索を続けてると、

こういう記事を見つける。

へぇ、Pythonかぁ。

RがPythonに置き換わるっていうのははてブのブコメでも否定されてたけど、
プログラマにとってやりやすいのがRよりPythonっていうのを聞くと、
ちょっとPythonに興味が出てきますよね。

で、今度はPythonで統計学を学ぶ本はないかなーと検索してまして、
するとThink Stats ―プログラマのための統計入門っていうちょうどドストライクな感じの書籍が見つかりました。

まぁ、即購入ですよね。

ちょうどボーナスが入ってなにか買いたいと思っていたところなんですよ。

脱線:ボーナスで買いたいもの

ところで、会社の評価制度が変わって月収が上がった代わりにボーナスガン下がりで旨味はないのですが、
それでももらってはいるのでなんか買いたいなぁと物欲がフツフツと湧いているんですよ。

購入最右翼はPanasonicの DMC-GM1Kだったんですが、
そもそもX20買って1年も経ってないし、
そこそこ人気あるのでまだ値下がりしていないのでお預け。

次点はLil’ Night Trainでしたが、
欲しいなぁ欲しいなぁと思いながら自作エフェクターいじってたらなんか満足してやめました。
そもそも最近ロックスミス2014でしかやってないから買ってもあんま意味ないし。

で、結局今一番足りてない革靴でも買ってお茶を濁そうかなぁという次第。
最近ずっと履いていた靴がボロボロになって底に穴が開き始めているくらいなので…

話は戻ってThink Stats

さて、アフィ地獄な脱線から戻りまして、
購入したThink Statsの話です。

目次を見てみると、分布、確率、検定、推定と、統計学の基礎っぽいところを学んでいく模様。
これならいけるかも?

そうは問屋がおろさない

さっそくPython2.7とPyScripterをダウンロード。

ちょろっとPythonの文法をチェックして、その簡潔にかける文法に感心しつつ、Think Statsの本文へ。

そしてその5ページ目

演習問題1-1
NSFGはこれまでに7回の調査を実施していますが、縦断的な調査ではありませ
ん。Wikipediaのページ(http://wikipedia.org/wiki/Cross-sectional_studyhttp://
wikipedia.org/wiki/Longitudinal_study
)を読み、なぜ縦断的な調査ではないのかを
考えましょう

うわあああ英語だああああ/(^o^)\

そりゃそうだ、訳書なんだもの。
しかしWikipediaなのに日本語の記事すらないマイナートピック。
これ5ページ目に出してきますか…

でも話の本筋に深く関わってはなさげなので、ざっと読んで次へ。

演習ではhttp://thinkstats.com/nsfg.htmlから出生に関する動向調査を取得して、

を基礎として統計分析をしていくようです。

おー、とうとうPythonでプログラミングする時が!

関数型の壁

しかし、そこはさっきPythonダウンロードしたばかりの俺。
簡単なソースなんでしょうけど全然わかりません

文法とか調べつつなんとかsurvey.pyはおぼろげにわかってきたところで9ページ目。

1. survey.pyとデータファイルを保存したディレクトリ内に、first.pyという
名前のファイルを作成し、以下のプログラムを入力してください。
# -*- coding: utf-8 -*-
import survey
table = survey.Pregnancies()
table.ReadRecords()
print u’ 妊娠レコードの総数: ‘, len(table.records)
結果は13,593となるはずです。

単にコピペ余裕でした。なるなる。

2. tableの内容を繰り返し読み込み、生児出生数を数えるループを記述してく
ださい。outcomeのドキュメントを読み、結果がドキュメントと一致してい
ることを確認してください。

…分からん。

テーブル取得してループ回して生児出生数足せばいいだけの話なんですが、
文法がうろ覚えすぎてまずもってどうやって書けばいいのかわからない。

でも、ここでやめたら何も始まらない。
とりあえず最初の最初なんだから「学ぶは真似ぶ」と恥を忍んで答えを見よう。

この演習問題の答えはhttp://thinkstats.com/first.pyからダウンロードできます。

ダウンロードして読んでみました。

書けるかいこんなん(;´Д`)

ただ、ちゃんと読んでみるとそれほど大したことはやっていない模様。

じゃあ何が引っかかっているんだろう。

よくよく見てみるとこれだけのソースに関数宣言が7つ
これの行ったり来たりが慣れない。

そこで気づいたのですが、これが関数型言語の書き方なのか、と。

今までJavaでオブジェクト指向の書き方しかやってきてなかったもんで、
そりゃこの書き方に慣れないわけです。

じゃあまずはこれに慣れなきゃお話にならない。
じゃなきゃロジック分かっても書けないんですもん。

というわけで、関数型初心者の俺は答えを書き写すことで関数型の書き方を指に覚えこませることから始めるのでした…

(続く?)

コメント

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