Pythonでpandasを使って為替の四本値(始値、高値、安値、終値)を持ったCSVファイルを読み込んでからグラフにプロットしてみます。
手順の流れは
- 四本値データの用意と事前準備
- CSVファイルの読み込み
- 必要な情報の取り出し
- データのプロット
です。
四本値データの用意と事前準備
LionFXのデモ口座から四本値データの保存が出来るので、今回はこれを利用してやってみることにします。四本値データはオンラインからダウンロードしたり、ダウンロードを提供しているFX業者がいくつかあるようです。
LionFXからダウンロードしたファイルを開くと、こんな感じで1列目に通貨ペア、
2行目に列名、3行目以降にデータがざーっと並んでいます。
1行目の通貨ペアの部分は要らないので、削除しておきます。
CSVファイルの読み込み
まずは必要なモジュールをインポートします。
1 | import pandas as pd |
pandasでCSVファイルを読み込むには、read_csv()を使います。
第一引数には読み込むファイルの名前を指定します。その後に指定しているindex_col=0は、データフレームのインデックスとして使う列番号を指定しています。ここでは読み込み元ファイルの0列目(日付の列)をインデックスとして使いたいので、0を指定しています。
またread_csv()はデフォルトでutf-8を使うみたいなのですが、今回読み込むファイルはShift-JISだったのでencoding=’Shift-JIS’として指定しています。
1 | usd_jpy = pd.read_csv('usd_jpy.csv',index_col=0,encoding='Shift-JIS') |
head()を使えば、日付のインデックス、四本値のデータを列に持つデータが読み込まれているのが確認できます。
ここでは日付のデータを”文字列”として読み込んでいますが、datetime型として読み込みたい場合はparse_datesを指定して読み込むようにします。
1 2 3 4 | usd_jpy = pd.read_csv('usd_jpy.csv', index_col=0, encoding='Shift-JIS', parse_dates=['日付']) |
parse_datesにはdatetime型で読み込みたいカラムの名前かインデックス番号をリストで渡します。
必要な情報の取り出し
次に新しい空のデータフレームをつくり、このデータフレームにUSD/JPYの終値の列を’usd_close’というカラム(列)名で追加します。
DataFrame()とすれば空のデータフレームを作成できます。
データフレームに新しいカラムを追加するには、[]を使って追加したいカラム名を指定して、直接データを代入するだけでオッケーです。
1 2 | df1 = DataFrame() df1['usd_close'] = usd_jpy['終値'] |
データのプロット
Jupyterを使っている場合は以下のような記述をすることで、ブラウザに直接グラフをプロットできるようになります。
1 | %matplotlib inline |
DataFrameのplot()を使えば簡単にグラフをプロットすることができます。
1 | df1.plot() |
プロットしたときに、グラフが右に向かって古くなっているときは、データが降順に並んでいるので、sort_index()を使って昇順(古いものから並べる)にソートしておきます。
1 | usd_jpy.sort_index() |
何も指定せずにsort_index()とした場合データフレームのインデックスに基づいて昇順でソートされます。
ところで、任意のカラムをグラフにプロットしたい場合は、plot()のyという引数を利用して、プロットしたいカラムを指定するのが簡単です。
1 | usd_jpy.plot(y='終値') |
参考ページ: