pandasでFama-Frenchの3ファクターを取ってみた
pandasで、Franch教授のデータライブラリーからデータがインポートできるときいたので、実際にやってみた。
ファイナンスでは、Fama-Frenchの3ファクターという有名なファクターがある。
それぞれのファクターのざっくりとした説明はこちら。
Mkt-RF:リスクフリーレートで借り入れて時価加重のマーケットポートをロングするロングショートポート
SMB:小型株をロングして大型株をショートするロングショートポート
HML:バリュー株をロングしてグロース株をショートするロングショートポート
詳細は、French教授のHPを読みましょう。
Kenneth R. French - Data Library
もしくは超有名な原論文を読みましょう。
FF(1992)
http://www.bengrahaminvesting.ca/Research/Papers/French/The_Cross-Section_of_Expected_Stock_Returns.pdf
FF(1993)
http://home.business.utah.edu/finmll/fin787/papers/FF1993.pdf
↓の1行で取れると聞いて半信半疑でやってみたら、
In [144]: ip=web.DataReader("F-F_Research_Data_Factors", "famafrench")
本当に取れた。たまげたなあ。
今までHPからzip落として解凍して、テキストファイルからcsv作ってRで読み込んでたのは何だったんや!
ディクショナリー型で取れて、key:0が月次リターン、key:1が年次リターンのようなので、ここでは月次を使う。
\-99.99は欠損を表すのでNaNに変換してレコードごと削除したうえで、3ファクターだけを抜き出す。
これが1行でさらっと書けるのはすばらしい。
In [145]: ff3=ip[0].replace(-99.99,np.NaN).dropna().ix[:,0:3]
要約統計量と時系列プロットを見てみる。これも簡単に書ける。
In [149]: ff3.describe() Out[149]: 1 Mkt-RF 2 SMB 3 HML count 1062.000000 1062.000000 1062.000000 mean 0.653927 0.219642 0.396591 std 5.404478 3.224314 3.536978 min -29.130000 -16.400000 -13.280000 25% -2.015000 -1.560000 -1.277500 50% 1.025000 0.060000 0.230000 75% 3.657500 1.780000 1.747500 max 38.850000 36.700000 35.460000 In [150]: ff3.plot() Out[150]: <matplotlib.axes._subplots.AxesSubplot at 0x1b4937d0>
コード全体はこちら。
pandasかわいいよpandas
# -*- coding: utf-8 -*- import pandas.io.data as web import numpy as np import seaborn as sns import pandas as pd ip=web.DataReader("F-F_Research_Data_Factors", "famafrench") ff3=ip[0].replace(-99.99,np.NaN).dropna().ix[:,0:3] ff3.describe() ff3.plot()