7.38905609893584
上級マクロ経済学
第5回 pythonライブラリの利用
1 ライブラリの利用
Pythonで用いるライブラリ
Pythonは基本的な演算以外、多くの計算などはライブラリに依存している。 ここではこの講義で主に用いるライブラリを以下に記載する。
- Numpy
- 数学的な計算に用いるライブラリ。多くの数学的操作を提供している。
- Matplotlib
- グラフなどを描写するためのライブラリ。計算結果を表示して確認するなどのためにも、ほとんどの場合マスト。
- Pandas
- データフレームと呼ばれる形式で表データを扱うのが得意なライブラリ。ExcelやCSVファイルをデータフレームとして読み込んだり、データフレームをExcelやCSVファイルに書き出したりすることができる。
- Scipy
- Numpyで提供されていない特殊な関数や、統計分布の関数などの少し高度な科学技術計算の際に利用することが多い。 余談だが、スパース行列なども扱える。
Pythonでの計算例
例えばネイピア数eを用いて、 e^{2}
を計算するためには、e \approx 2.71828182846を使って、
と計算する必要があります。
- ライブラリ(Numpy)を使えば、いちいちe \approx 2.71828182846を調べる必要がなくなる。
ライブラリのimport
Numpyを利用してみよう。 利用したいライブラリは、
import <パッケージ名>
でインポートする。
- インポートした後、
<パッケージ名>.<関数名>
の形でライブラリ内の関数を利用できる。 - ネイピア数の乗数e^{x}を計算する関数は
exp(x)
です。 - e^2は次のように計算します。
. . .
x
は引数と言われます。
パッケージの名前付け
ライブラリ(あるいはパッケージやモジュール)をインポートする際には、別名をつけることができます。
省略名をつけると、パッケージの利用がしやすくなります。
- 別名は、
import <パッケージ名> as <別名>
としてつけます。
2 Numpy
インポート
で利用。
- 数学的な操作などを行う場合には必須ライブラリ
- Pythonのネイティブの関数よりも計算が早いことがほとんど。
指数関数と対数関数
- 指数関数(e^{x})
-
np.exp(x)
- 対数関数(\log x)
-
np.log(x)
ndarray
Numpyをインポートすれば、ndarray
形式を扱える。
- N-dimentional array形式
- N次元配列、という意味。
- 「Numpyバージョンのリスト」と言えるだろう。
- ベクトルや行列などとして扱うことができる。
- 計算ができる。
. . .
np.array(<数値のリスト>)
とすると、ndarray形式にできる。
ndarrayで行列を表現する
Pythonリストで、リストのリストを作ることができる。
これをndarrayに変換することができる。
これを、行列として扱うことができる。
さらに、行列のうちi
行j
列目の要素を、
<ndarray行列>[i][j]
<ndarray行列>[i,j]
で取得できる。(カウントは0
からであることに注意!)
ndarrayの注意点
- 中のリストは、すべてが同じ要素数でないとndarrayにできない。
- ndarrayは、要素の全てが同じデータ型になる。
ndarrayの作成
0
からn
より小さい整数までのリストを作成する。
m
からn
より小さい整数までのリストを作成する。
m
からn
より小さい数まで、s
刻みのリストを作成する。
- 最小値を
a
、最大値をb
として、等間隔になるようにn
だけの点を取るリストを作成する。
reshape
reshape
で、データの行列数を変える。
ndarrayの演算
ここでは主にベクトルの演算を扱う。
行列の演算については、今後必要に応じて補足します。
(array([0, 1, 2]), array([3, 4, 5]))
ndarrayの関数
- 以下の関数は、
<ndarray>
だけでなく、pythonリストにも使える。
ランダム変数を使う
Numpyはランダム変数を生成できる。
Numpyライブラリ内のrandomモジュールを用いる。
- ライブラリ内のモジュールの使用は
<ライブラリ名>.<モジュール名>
とする。 - モジュール内の関数を使う場合は、
<ライブラリ名>.<モジュール名>.<関数名>
とする。
いくつかのランダム生成の関数
choice関数
choice()
を使うと、くじ引きを作ることもできる。
seedの設定
ランダム変数は、引くたび変化してしまうため、結果が一致するかどうかを確認する時などにはむしろ不便になりがち。
seed()
を指定すると、引く数が固定される。
seed
のイメージ
- ランダムに引かれる変数は、実は疑似乱数表というような表を使って選ばれてきているとイメージして欲しい。
- 疑似乱数表は順にランダムに引かれた変数が記されていっている。
- seedを指定しない場合は、疑似乱数表1、疑似乱数表2、疑似乱数表3…というものから毎度どの表を使うかをランダムに選んでいるイメージ。
- seedを指定すると「疑似乱数表2を使う」ことが固定され、その後ずっと疑似乱数表2の乱数が使われる感じ。
次のコードを数回実行してください。
次のコードを数回実行してください。
3 Matplotlib
インポート
色々なグラフ描写のためのライブラリ。
基本的には、pyplot
モジュールしか使わない。
したがって、次のようにインポートする。
その後、plt.<関数名>
で描写を行う。
基本のラインプロット
y=x^2 をプロットしよう。
x = np.arange(-3,4) # -3から3
y = x**2
plt.plot(x,y, marker="o") # markerの指定
plt.show() # plotを表示する # notebook形式のファイルだと必要ないこともある
x = np.arange(-3,4) # -3から3
y = x**2
plt.plot(x,y, marker="o",
markersize=16, # マーカーのサイズ
markerfacecolor="red", # マーカーの塗りつぶしの色
markeredgecolor="green", # マーカーの縁の色
markeredgewidth=3 # マーカーの縁の太さ
)
plt.show() # plotを表示する # notebook形式のファイルだと必要ないこともある
マーカーの種類はこちら
複数のラインの描写
f(x)=x^2 g(x)=-2x を描写する。
- 2本以上描写する時には、ラインの違いがわかるように色、ラインの種類などを工夫する。
- 凡例をつける。
プロット周りのレイアウト
x = np.arange(-3,4) # -3から3
f = x**2 # fの値を計算する。
g = -2*x # gの値を計算する。
## ここからプロット用のコード
plt.figure(figsize=(6,8)) # 図の枠の大きさを調整する。
## ラインのプロット
plt.plot(x,f,
label="f(x)") # 凡例用の名前(=f(x))をつける
plt.plot(x,g,
label="g(x)") # 凡例用の名前(=g(x))をつける
plt.xlim(-2,4) # x軸のプロット範囲を-2から4にする
plt.ylim(-1,6) # y軸のプロット範囲を-1から6にする
## ラベル
plt.xlabel("x", fontsize=20) # x軸のラベルをサイズ20で
plt.ylabel("f(x), g(x)", fontsize=14) # y軸のラベルをサイズ14で
plt.title("functions of x") # タイトル。基本は日本語が使えない。
plt.legend() # 凡例をプロットに入れる
plt.show()
散布図
散布図はscatter()
関数を用いる。
y = x + u
でyを作ろう。
ただし、uは正規分布に従ってランダムに生成する。
棒グラフ
棒グラフはbar()
関数を用いる。
4 Scipy
インポート
次のようにインポート。
おそらく経済系の人は、
scipy.stats
scipy.optimize
のモジュールがScipyでも圧倒的に利用頻度が高いだろう。
- ただし、
scipy
の利用方法は、今後必要に応じて解説します(やれることが多すぎる)。
まとめ
- すごいスピードで紹介をしています。
- 全てをすぐにできるようになる必要はありません。
たいていの場合、
- ある必要な処理が出てくる。
- その処理をしてくれるパッケージ(あるいはそれを含むライブラリ)やその関数を検索する(Googleは神)
- 検索して出てきた解説記事等を参考にして関数を用いる。
- バグの対応も同様で、検索してみるのが一番。