バナナでもわかる話

計量経済学・統計学が専門の大学院生です。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

【初心者向け】これからpython記事書いてきます。皆さんpython始めませんか。

少し前に、pythonについて書くようお達しを受けたので、とりあえずpython関連の記事も書いていこうと思います。

このブログ、分析は基本的にRで行っているんですけど、記事自体はどうやらpythonの方が需要あるみたいです。やっぱり最近話題だからですかねー。


ところで今回の記事ですが、pythonについて書いていきますが、pythonの入門の入門程度の内容から記事にしていくと非常にしんどいので、
その辺ははじめに参考図書をあげるにとどめておこうと思います。

昔私がpythonを始めるにあたってTwitter経由で、フォロワーのパイソニスタ(pythonに熟練した人のこと)の方々に参考図書を散々聞いて回ったので、結構良書を紹介できると思います。

是非これを機会に皆さんもpython導入してみてください!笑


pythonの入門本

【プログラミング未経験の方向け】
pythonスタートブック

多分これ以上簡単な入門本はないんじゃないかというくらい、読みやすいpythonの入門書です。私もpythonを触り始めた当初はプログラミング未経験でしたので、この本は非常に参考になりました。



・プログラミング超初心者が初心者になるためのPython入門1~3



内容も良いのですが、この本は安いのが良いですね。なんとkindleだと無料で読めるみたいですね。タダ同然でpythonの入門が出来る優れものです。


・いちばんやさしい Python入門教室

こちらもかなりわかりやすい入門書です。私は使いませんでしたが、評価も高く、わかりやすいと評判です。





【脱プログラミング入門した人向け(R含む他の言語をいじったことのある人も対象)】
・入門python3

私がスタートブックの後に読んだ本です。かなり丁寧にpythonの基本操作や概念についての説明が書いてあります。この本に従って実際にコードを打ち込んでいれば自然とpythonの感覚が身についている事間違いなしです。



それでは、Numpyの記事に戻ります。



Numpyとは

pythonでベクトル計算や行列計算をする際に簡単かつ高速に行えるというパッケージです。データ分析では結構必須だったりします。

ndarray型という特殊な型を使って大規模計算を行うことが出来ます。

ndarray型の生成

とりあえず、物は試しで色々な方法でベクトルや行列を生成していきます。

とりあえずNumpyを読み込んでおきます。

import numpy as np

別にnpと名前を付ける必要は無いのですが、所謂界隈のしきたりというか、そういうやつです。まあ実際イチイチnumpyと打つのも面倒くさいので短い名前を付けておくといいと思います。

array関数

array関数にリストやタプルを突っ込むことでndarrayを作ることが出来ます。

#数字が入ったリストを作成
data=[5,3,5.6,1]

#dataをarray関数で変換
arr=array(data)
print(arr)
#出力結果
array([5. , 3. , 5.6, 1. ])

これ、要は5,3,5.6,1が並んだベクトルだと思ってくれれば大体大丈夫です。


複数重ねればベクトルも作れます。

data2=[[3,2,1],[1,2,3]]
arr=np.array(data2)
print(arr)
[[3 2 1]
 [1 2 3]]


タプルでもいけます。

data3=(5,4,3)
arr3=np.array(data3)
print(arr3)
[5,4,3]
arange関数

考え方は元々pythonに備わっているrange関数と同じです。
使ってみるが早しということで、使って出力を見てみます。

np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
zeros関数とones関数

zeros関数で0のみの配列、ones関数で1のみの配列が作れます。

np.zeros(11)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.ones((11,3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
empty関数

タプルで次元を指定してやると適当な値の配列を生成してくれます。

np.empty((2,2))
array([[5. , 3. ],
       [5.6, 1. ]])
np.empty((3,3))
array([[3.44788773e-074, 6.45331734e-074, 3.69649234e+177],
       [5.59238927e-076, 1.61024732e-075, 1.06059841e-074],
       [1.96353574e-077, 8.34402697e-308, 3.91792476e-317]])
eye関数

単位行列を生成する関数です。

np.eye(5,5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

行列計算

このように生成したndarray型データを行列を扱うかのように簡単に計算することが出来ます。
足し算引き算掛け算割り算等々はまあ+とか-とか*とか/を使えば良くて、直感的に分かりやすいので省略します。


まず、行列を転置してみます。これは.Tとつけるだけで転置できます。

data3=[[3,2,1],[1,2,3],[5,9,7]]
arr3=np.array(data3)
print(arr3)
[[3 2 1]
 [1 2 3]
 [5 9 7]]
#転置してみる
print(arr3.T)
[[3 1 5]
 [2 2 9]
 [1 3 7]]


行列の内積計算はdot関数によって行うことが出来ます。

np.dot(arr3,arr3.T)
array([[ 14,  10,  40],
       [ 10,  14,  44],
       [ 40,  44, 155]])


他にも要素について対数をとったり、指数関数や三角関数で変換したり、ルートをとったりなどなど色々出来たりします。


大規模データを扱ったりする場合は、このNumpyを活用していかないと、スピードがまるで変ってきますので、使ったことの無い方は導入してみることをおすすめします。