今日はChapter2に関して進めた。
例によって環境はDockerを使用。
主に使用したライブラリは以下の内容
- Numpy
- Scipy
- Pandas
- Matplotlib
Numpyメモ
基本的には前回まででNumpy自体には触っているが、チョコチョコわからない点が出てきたりしているので都度調べながら進めている
データフレームの計算になると、PandasのDataFrameを使うことが多くなるのかもしれない。そう考えると、Numpyではここの計算であったり、乱数の生成によくお世話になるんじゃないだろうか。
Numpyの乱数生成としては、ここでは
np.random.randn()
を使うことが多いように見える。
randn関数はstandard normalな乱数。つまり正規分布な数値を生成するようだ
randn
乱数の生成としては、randn以外にもいくつかあり、最後の最後にはuniformが出てくることになる。
複数の乱数を生成するときには
np.random.randn(1000)
と書くことで1000個の乱数を作成することができる。この場合、返却値は配列になる
また、順序だった数値を取得するのに
np.arrange(1000)
のような使い方もあった。上記の場合は、1〜1000までの配列を返す。
グラフを描画するときのX軸の値として使用した。
Scipyメモ
行列計算に主に使用した。
行列計算自体をかなり忘れているため、読みながら進めるものの、行列の固有値だとか逆行列だとか、確かにそういうのがあったような気がするなぁ・・・というレベル。
必要に応じてこの辺りは復讐が必要になるんだろう。
方程式の解法として、Newton法というやり方を知った。
from scipy.optimize import newton
newton(sample_function, 0)
というような記述でsample_functionが引数の0だったときの値。
つまりはf(x) = 0 だったときのxを求めてくれるというもの。
例題としては、x**2 + 2*x + 1の式。つまりはf(x)=x^2+2x+1の解をNewton関数に当てはめて答えを求めていた。
ところが、f(x)=2x^2+2x+1をNewton関数に食わせてみるとエラーになった
Failed to converge after 50 iterations, value is 0.6246914113887032
50iterationsやってみたけれどダメだったということらしい。
newton(sample_function2,0,maxiter=1000)
Newton関数は引数としてこのiterationを指定できるようなので、試しに1000回転ほどさせてみたけれど結局はダメだった。
この辺りは、Newton関数自体の特性だとかをちゃんとわかっていないからうまく行かないんだろうけれど、なかなかどうしたものか・・・という気持ちになった。
Pandasメモ
基本的んはふんふんと読んでいった。
複数のDataFrameをRDBのテーブルのように結合する方法としてmerge関数が用意されているが、Chapter場ではオートな結合しかなく、結合条件を手動で指定する方法が見当たらなかった。
これに関しては、公式のReferenceに詳しい例題付きで書かれていた。
よくよくみてみると、Chapterではpd.merge(data_frame1, data_frame2)というような呼び出し方だが、リファレンスではdata_frame1.merge(data_frame2)という呼び出し方だ。
merge関数の第1引数にはselfがあるので、書き方として双方をサポートしているということなんだろう。
調べるときにどうしても日本語訳として書かれている記事が多くHitしてしまい、そちらを参照したくなる衝動にかられてしまうのだが、公式をしっかりと読むという癖をつけたほうがいいと思うのでまずはそちらに挑戦するようにしていく。
涙を流しながら。
Matplotlibメモ
意味をちゃんと理解しているかどうかは別にして、グラフという形で描画されるものがあると少し嬉しくなるのは疲れてきているせいであろう。
import matplotlib.pyplot as plt
plt.plot(x, y, "o")
という形で描画させるのだが、この"o"部分を適当に変えてみたら、Plotされたものが変わった。"x"ではバツになったのは予想通りだったけれど、例えば"g"とかにしてみると、棒グラフになった。
Referenceをみてみると、gにすることで棒グラフになるのではなく、そもそもデフォルトが棒グラフで、gは色指定が緑という形だった。
他にもいくつかPlotのMarkersは指定できるようなので、面白がって試してみるといい
おしまい
なんとかChapter2まで終わらせることができた。
覚えればいいだけなので進められるのだが、1Chapter進めるのになかなか時間が取れないのが痛いな。
ここまでが、基本的なPythonとライブラリの使い方となり、次のChapterからは実際の統計学や分析に入っていくことになるので一気に難易度は上がっていくことになるんだろう。