※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。

次のページ>
FXデータ分析の練習(2)〜1変量データの統計量(基礎)〜

FXデータ分析の練習(1)〜データの取得編〜

python3 データ分析 pandas python matplotlib

投稿日:2019年11月12日

このエントリーをはてなブックマークに追加
pandasはデータ分析に非常に便利なライブラリです。この記事のシリーズではpandasを使ってFXのデータを分析する練習をしてみました。

練習

ライブラリのインストール

$ pip install pandas matplotlib jupyter[notebook] scipy

サンプルデータの取得

HistData.comで過去の外貨のデータが取得できます。今回はこのサイトのEURUSDのデータを使ってデータ分析の練習をしてみます。以下の2つのリンクからデータのZipファイルを取得してきましょう。以下のリンク先の『Download Historical Data Here』からダウンロードできます。

ZIPファイルがダウンロードできたら、作業ディレクトリからアクセスできる場所に解凍しましょう。今回は直下に解凍しました。

ディレクトリの構成

ディレクトリ構成
ー
├── HISTDATA_COM_MT_EURUSD_M12017
│   ├── DAT_MT_EURUSD_M1_2017.csv
│   └── DAT_MT_EURUSD_M1_2017.txt
├── HISTDATA_COM_MT_EURUSD_M12018
     ├── DAT_MT_EURUSD_M1_2018.csv
     └── DAT_MT_EURUSD_M1_2018.txt

データを読み込んで表示

JupyterNotebookでCSVデータを読み込んで表示してみます。

まずはライブラリのインポートから

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

次にCSVファイルを読み込みます。データにはヘッダの行がないのでname引数でヘッダを指定してあげます。データのパスは各個人が解答した相対パスを入れてください。

data1 = pd.read_csv(
    "./HISTDATA_COM_MT_EURUSD_M12017/DAT_MT_EURUSD_M1_2017.csv",
    names=["date","time","open","high","low","close","spread"])
data2 = pd.read_csv(
    "./HISTDATA_COM_MT_EURUSD_M12018/DAT_MT_EURUSD_M1_2018.csv",
    names=["date","time","open","high","low","close","spread"])
data1
出力
date   time     open     high      low    close  spread
0       2017.01.02  02:00  1.05155  1.05197  1.05155  1.05190       0
1       2017.01.02  02:01  1.05209  1.05209  1.05177  1.05179       0
2       2017.01.02  02:02  1.05177  1.05198  1.05177  1.05178       0
3       2017.01.02  02:03  1.05188  1.05200  1.05188  1.05200       0
4       2017.01.02  02:04  1.05196  1.05204  1.05196  1.05203       0
...            ...    ...      ...      ...      ...      ...     ...
371630  2017.12.29  16:53  1.19972  1.19987  1.19972  1.19987       0
371631  2017.12.29  16:54  1.19985  1.19985  1.19970  1.19970       0
371632  2017.12.29  16:55  1.19969  1.20014  1.19961  1.20010       0
371633  2017.12.29  16:56  1.20009  1.20023  1.19974  1.19983       0
371634  2017.12.29  16:57  1.19982  1.20074  1.19980  1.20005       0

[371635 rows x 7 columns]

このままだと日にちと時間がわかれていて使いづらいので、新しくdatetimeという日にちと時間がまとまった列を作成してみましょう。

特定のデータは辞書型の様にカラム名でアクセスできます。

カラム名でアクセスすることでそのカラムのすべての行のデータに対して同じ計算をすることができます。

data1["datetime"] = data1["date"] +"." + data1["time"]
data2["datetime"] = data2["date"] +"." + data2["time"]

data1
出力
date   time     open     high      low    close  spread  \
0       2017.01.02  02:00  1.05155  1.05197  1.05155  1.05190       0   
1       2017.01.02  02:01  1.05209  1.05209  1.05177  1.05179       0   
2       2017.01.02  02:02  1.05177  1.05198  1.05177  1.05178       0   
3       2017.01.02  02:03  1.05188  1.05200  1.05188  1.05200       0   
4       2017.01.02  02:04  1.05196  1.05204  1.05196  1.05203       0   
...            ...    ...      ...      ...      ...      ...     ...   
371630  2017.12.29  16:53  1.19972  1.19987  1.19972  1.19987       0   
371631  2017.12.29  16:54  1.19985  1.19985  1.19970  1.19970       0   
371632  2017.12.29  16:55  1.19969  1.20014  1.19961  1.20010       0   
371633  2017.12.29  16:56  1.20009  1.20023  1.19974  1.19983       0   
371634  2017.12.29  16:57  1.19982  1.20074  1.19980  1.20005       0   

                datetime  
0       2017.01.02.02:00  
1       2017.01.02.02:01  
2       2017.01.02.02:02  
3       2017.01.02.02:03  
4       2017.01.02.02:04  
...                  ...  
371630  2017.12.29.16:53  
371631  2017.12.29.16:54  
371632  2017.12.29.16:55  
371633  2017.12.29.16:56  
371634  2017.12.29.16:57

data1のopenをグラグ表示してみます。またpandasのDataFrameplot()メソッドで簡単にグラフをプロットできます。

data1["open"].plot()

2017年のデータと2018年のデータを結合してみます。データの結合はconcat()メソッドで行うことができます。今回の様にindexがかぶっている2つのデータを結合させる場合、indexが重複してしまいます。indexを振り直すには引数でignore_index=Trueをわたすことで行えます。

ちなみに今度はグラフの見た目を少し変えてみました。グラフの色はplot()メソッドの引数で、ラベルはplt.ylabel()plt.xlabel()で変更できます。

data_concated = pd.concat([data1,data2]).set_index("datetime")
data_concated["open"].plot(color="red")
plt.ylabel("EURUSD")
plt.xlabel("DATETIME")
このエントリーをはてなブックマークに追加

次のページ>
FXデータ分析の練習(2)〜1変量データの統計量(基礎)〜

関連記事

記事へのコメント