データフレーム作成

pythonを用いたポートフォリオ分析だったり為替分析をググったところ、まずは自分でデータフレームとやらを作れるようになってみようと思った。

参考にしたサイト

ajhjhaf.hatenablog.com

使用データ

基準価額

対象期間は、20190101-20191231

為替

baacash.com

このサイトを参考に、ドル円についてデータ取得。

実際のコード

ここからは参考のコードを写しながら、調べたことをメモしていく。

pandasでのデータ読み込みに関しては、こちら。

note.nkmk.me

昨日ざきに教えてもらったwithも活用して、とりあえず下のコード実行。

import pandas as pd
import numpy as np

with pd.read_csv("rowdata/usd_jpy.csv",index_col=0,parse_dates=True) as ex:
    print (ex)

そしたらこんなエラー返ってきた AttributeError: __enter__

よくわからんかったから、結局、参考サイトの通りにファイルを開いた。

import pandas as pd
import numpy as np

#with pd.read_csv("rowdata/usd_jpy.csv",index_col=0,parse_dates=True) as ex:
#    print (type(ex))

exchange=pd.read_csv("rowdata/usd_jpy.csv",index_col=0,parse_dates=True)
print (exchange)
exchange=exchange[["Close"]]

hifumi=pd.read_csv("rowdata/hifumi.csv",index_col=0,parse_dates=True)
#print (hifumi)
hifumi.columns=["hifumi"]

index=pd.read_csv("rowdata/index.csv",index_col=0,parse_dates=True)
index.columns=["index"]

そしたら、こんなエラーが。KeyError: "['Close'] not in index9行目がエラー起こしていたけど、なんのことか全くわからんかった。。

結局、この9行目はcloseとか書いてあるから、開いたファイル閉じることを指示してるんだと思い込んでたのが間違いだった。これは、読み込んだファイルのheaderからCloseってところを参照するってことだった。

今回は、参考記事と為替データのソースが違うから、CloseじゃなくてJPY/USDとしたらうまくいった。Closeは閉じる、じゃなくて終値のことだったんすね。

import pandas as pd
import numpy as np

#with pd.read_csv("rowdata/usd_jpy.csv",index_col=0,parse_dates=True) as ex:
#    print (type(ex))

exchange=pd.read_csv("rowdata/usd_jpy.csv",index_col=0,parse_dates=True)
#print (exchange)
exchange=exchange[["JPY/USD"]]

hifumi=pd.read_csv("rowdata/hifumi.csv",index_col=0,parse_dates=True)
#print (hifumi)
hifumi.columns=["hifumi"]

index=pd.read_csv("rowdata/index.csv",index_col=0,parse_dates=True)
index.columns=["index"]

vti=pd.read_csv("rowdata/VTI.csv",index_col=0,parse_dates=True)
#print (vti)
vti=vti[["Adj Close"]]
#print (vti)
vti.columns=["vti"]
#print (vti)
vti=pd.DataFrame(vti["vti"]*exchange["JPY/USD"],columns=["vti"])
print (vti)
vti=vti.dropna()
print (vti)

ここまで進めたので、メモを残しておく。 特に最後のVTIのところについて。

  1. vti=vti[["Adj Close"]]:indexの中からAdj Close調整後終値の値を選択
  2. vti.columns=["vt"]:index名をAdj Closeからvti
  3. vti=pd.DataFrame(vti["vti"]*exchange["JPY/USD"],columns=["vti"]):為替データと掛け算
  4. vti=vti.dropna():NaNを消去

為替データとの掛け算は、掛け算するものをどのように対応させているんだろう

読み込むときにindex_col=0としているから、indexを参照して対応させてくれているのかなあ

df=pd.DataFrame([])
df=df.join([hifumi,index,vti],how="outer")
#print (df)
date=pd.DataFrame(index=pd.date_range(start=df.index[0],end="2019-12-30"))
#print (date)
df=df.join(date,how="outer")
#print  (df)
order=["hifumi","index","vti"]
df=df[order]
#print (df)

#print (df["hifumi"])

そしてDataFrameを作成。joinはリスト同士を結合しているんだろうな、多分。how="outer"ってやつは、いわゆる外部結合みたいな名前のやつだろう、多分。途中でDataFrameがどうなってるのかprintしながら進めたらなんとなーくはわかった、気がする。

とりあえず最後に記念にDataFrameとして出力されたやつを載せてみる。

             hifumi    index           vti
2019-01-02      NaN      NaN  13689.478329
2019-01-03      NaN      NaN  13189.845590
2019-01-04  32448.0   9708.0  13709.905650
2019-01-05      NaN      NaN           NaN
2019-01-06      NaN      NaN           NaN
2019-01-07  33669.0   9982.0  13859.672169
2019-01-08  33862.0  10020.0  14026.834588
2019-01-09  34048.0  10130.0  14051.457936
2019-01-10  33630.0  10044.0  14111.445705
2019-01-11  33845.0  10095.0  14128.969600
2019-01-12      NaN      NaN           NaN
2019-01-13      NaN      NaN           NaN
2019-01-14      NaN      NaN  14016.315111
2019-01-15  34160.0  10180.0  14212.421604
2019-01-16  34192.0  10147.0  14292.283503
2019-01-17  34422.0  10182.0  14422.188436
2019-01-18  34869.0  10278.0  14704.467024
2019-01-19      NaN      NaN           NaN
2019-01-20      NaN      NaN           NaN
2019-01-21  35044.0  10336.0           NaN
2019-01-22  34772.0  10270.0  14458.284712
2019-01-23  34488.0  10208.0  14518.310890
2019-01-24  34639.0  10245.0  14539.152026
2019-01-25  35029.0  10334.0  14693.133703
2019-01-26      NaN      NaN           NaN
2019-01-27      NaN      NaN           NaN
2019-01-28  34962.0  10264.0  14529.648174
2019-01-29  34974.0  10275.0  14515.903573
2019-01-30  34664.0  10234.0  14749.620196
2019-01-31  35448.0  10343.0  14788.526942
...             ...      ...           ...
2019-12-01      NaN      NaN           NaN
2019-12-02  40375.0  11568.0  17217.731157
2019-12-03  40175.0  11514.0  17024.731730
2019-12-04  40034.0  11491.0  17172.764878
2019-12-05  40142.0  11546.0  17191.341535
2019-12-06  40298.0  11560.0  17321.587963
2019-12-07      NaN      NaN           NaN
2019-12-08      NaN      NaN           NaN
2019-12-09  40376.0  11618.0  17253.762002
2019-12-10  40471.0  11609.0  17264.048064
2019-12-11  40279.0  11569.0  17292.411092
2019-12-12  40305.0  11555.0  17509.390944
2019-12-13  40589.0  11739.0  17539.878337
2019-12-14      NaN      NaN           NaN
2019-12-15      NaN      NaN           NaN
2019-12-16  40626.0  11717.0  17702.110886
2019-12-17  40832.0  11787.0  17702.180623
2019-12-18  40637.0  11727.0  17729.213182
2019-12-19  40647.0  11712.0  17751.370588
2019-12-20  40822.0  11691.0  17870.415265
2019-12-21      NaN      NaN           NaN
2019-12-22      NaN      NaN           NaN
2019-12-23  40687.0  11667.0  17874.762685
2019-12-24  40827.0  11658.0  17875.433019
2019-12-25  40759.0  11612.0           NaN
2019-12-26  40979.0  11678.0           NaN
2019-12-27  41160.0  11709.0  17956.915419
2019-12-28      NaN      NaN           NaN
2019-12-29      NaN      NaN           NaN
2019-12-30  40951.0  11629.0  17774.655018

[363 rows x 3 columns]