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

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

FXデータ分析の練習(3)〜多変量データの統計量(基礎)〜

python3 データ分析 pandas python scipy numpy

投稿日:2019年12月1日

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

はじめに

この記事について

この記事ではFXのサンプルデータを使って多変量データの分析の基礎についてまとめます。
pandasやscipyには分析をする便利な関数が用意されていますが、計算できるものは一応自分で計算してからそれらの関数を使用しています。

この記事の前提

言語はPython3.6.3でJupyterNotebookを使って実行しています。ライブラリは以下のものを使用しています。

  • numpy==1.17.3
  • pandas==0.25.3
  • scipy==1.3.2

データの準備

サンプルデータの取得

ここでは多変量解析ということで、2つの異なるカテゴリのデータを使いたいと思います。Part1で準備したEURUSDのデータ

これに加えてGDPUSDのデータをダウンロードしてきます。リンク先の『Download Historical Data Here』からダウンロードします。

ディレクトリの構成

ダウンロードできたら作業ディレクトリ直下に解凍して以下の様なディレクトリ構成にします。

.
├── 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
└── HISTDATA_COM_MT_GBPUSD_M12017
    ├── DAT_MT_GBPUSD_M1_2017.csv
    └── DAT_MT_GBPUSD_M1_2017.txt

多変量データの基礎

データの読み込み

まずはデータを読み込みます。
今回はEURUSDの2017年のデータとGBPUSDの2017年のデータを使ってみます。

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

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_NZDCAD_M12017/DAT_MT_NZDCAD_M1_2017.csv",
    names=["date","time","open","high","low","close","spread"])

共分散(covariance)

共分散(covariance)は2つの変数の関係の強さを表す指標です。共分散は以下の式で表されます。

s_{xy} = \frac {\displaystyle \sum_{i = 1}^n {(x_i - \overline{x})(y_{i} - \overline{y})}}{n-1}{ \qquad { \text{(共分散)}}} \\ \quad \\ \qquad x:変数1 \\ \qquad y:変数2 \\ \qquad n:xのデータ数(yのデータ数)

例:ある数人の身長と体重を計測したとしましょう。

無題のプレゼンテーション.png
  • Aさん【身長:165cm;体重61.3kg】
  • Bさん【身長:168cm;体重62.0kg】
  • Cさん【身長:172cm;体重64.5kg】

身長が大きい方が体重も大きい値をとりがちですね?その様なデータの場合、共分散は正の値を取ります。
例えばこの3人の場合身長の平均が168.3cm、体重の平均が62.6kgです。共分散を計算すると、

{ ( 165 - 168.3 ) × ( 61.3 - 62.6 ) + ( 168 - 168.3 ) × ( 62.0 - 62.6 ) + ( 172 - 168.3 ) × ( 64.5 - 62.6 ) } ÷ ( 3 -1 ) = 0.25

ではpythonで計算してみます。

# それぞれの『open』のデータを取得
data1_open = data1["open"]
data2_open = data2["open"]

data_len = len(data1_open)

# それぞれのデータの平均値を計算
data1_mean = data1_open.mean()
data2_mean = data2_open.mean()

# 全てのデータに対して平均との差を計算
# Noneは0に置換
data1_diff = (data1_open - data1_mean).fillna(0)
data2_diff = (data2_open - data2_mean).fillna(0)

# 2変数の積の和を計算
# Noneは0に置換
diff_sum = sum((data1_diff * data2_diff).fillna(0))

# 共分散を計算
conv_sample = diff_sum / data_len

print("共分散:{}".format(conv_sample))
出力
共分散:0.001699501944684368

共分散行列(covariance matrix)

共分散行列(covariance matrix)または分散共分散行列(variance-covariance matrix)は複数の変数において、分散と共分散の一覧を行列の形式でまとめたものです。

\textbf{Cov}= \left[ \begin{array}{rr} \sigma_{x}^{2} & Cov(x,y) \\ Cov(x,y) & \sigma_{y}^{2} \end{array} \right] \\ \quad \\ \qquad \sigma_{x}^2:xの分散 \\ \qquad \sigma_{y}^2:yの分散 \\ \qquad Cov(x,y):xとyの共分散

分散共分散行列では対角成分がそれぞれの変数の分散になり、その他の成分が共分散になるわけですね。
pandasDataFramescipyではcov()メソッドでこの分散共分散行列を取得できます。

data_concated = pd.concat([data1_open,data2_open], axis=1)
data_concated.cov()
▲出力された分散共分散行列

相関(correlation)

相関(correlation)とは二つの確率変数の分布法則の関係の事を言います。例えばXとYという2つの変量(ともに測定データ)があった時を考えます。この時、Xの大きな値とYの大きな値、Xの小さな値とYの小さな値が対応している場合、この2つの変量には正の相関があるといえます。
この相関の程度は相関係数(correlation coefficient)で表すことができます。普通、単に相関係数と言った時ときにはピアソンの積率相関係数(Pearson product-moment correlation coefficient)のことを指し、以下の式であらわされます。

r_{xy} = { \frac{{\displaystyle \sum_{i = 1}^n (x_i - \overline{x}) (y_i - \overline{y})}}{\sqrt{{\displaystyle \sum_{i = 1}^n (x_i - \overline{x})^2}} \sqrt{{\displaystyle \sum_{i = 1}^n (y_i - \overline{y})^2}}} = \frac{s_{xy}}{s_xs_y}}{ \qquad { \text{(ピアソンの積率相関係数)}}} \\\quad \\ \qquad \overline{x}:x=\{x_{i}\}の算術平均 \\ \qquad \overline{y}:y=\{y_{i}\}の算術平均 \\ \qquad {s_{xy}}:共分散 \\ \qquad {s_{x}}:xの標本標準偏差 \\ \qquad {x_{y}}:yの標本標準偏差

相関係数は共分散を−1〜+1の範囲で標準化したものだとみなすこともできます。相関係数などを使いそれぞれの変数の相関を調べることを相関分析(correlation analysis)といいます。
実際にpythonで一つずつ計算してみます。

# それぞれの『open』のデータを取得
data1_open = data1["open"]
data2_open = data2["open"]

data_len = len(data1_open)

# それぞれのデータの平均値を計算
data1_mean = data1_open.mean()
data2_mean = data2_open.mean()

# 全てのデータに対して平均との差を計算
# Noneは0に置換
data1_diff = (data1_open - data1_mean).fillna(0)
data2_diff = (data2_open - data2_mean).fillna(0)

# 2変数の積の和を計算
# Noneは0に置換
diff_sum = (data1_diff * data2_diff).fillna(0).sum()

# 差の2乗を計算
data1_diff_sq = (data1_diff * data1_diff).fillna(0)
data2_diff_sq = (data2_diff * data2_diff).fillna(0)

# 差の2乗の和の積を計算
data_diff_sum_sq = (data1_diff_sq.sum() * data2_diff_sq.sum())

# 相関係数を計算
correlation = diff_sum/np.sqrt(data_diff_sum_sq)
print("相関係数:{}".format(correlation))
出力
相関係数:0.8925594922892961

非常に強い正の相関がでました。実際にグラフを見てみます。

data1_open.plot()
data2_open.plot()
▲EURUSDのグラフ
▲GBPUSDのグラフ

片方のグラフの増加に対してもう片方のグラフも増加していることがわかります。
実際のデータでは相関係数のみで関係性が強い、無関係の判断するのは危険ですが一つの指標になりそうですね。

このエントリーをはてなブックマークに追加

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

関連記事

記事へのコメント
1:loveawake.ru
2022年2月19日19:12

Welcome to the world of adult Dating loveawake.ru

2:LimaoSes
2022年2月19日22:57

What is the best method for me?

I am looking for the best method to be rich.

This place is correct for This? Limao

20:LimaoSes
2022年3月9日5:29

What is the best method for me?

I am looking for the best method to be rich.

This place is correct for This? Limao

46:LimaoSes
2022年4月7日0:39

What is the best method for me?

I am looking for the best method to be rich.

This place is correct for This? Limao

68:selllut
2022年4月24日15:27

lasiciliana.weebly.com


captain spins casino

69:selllut
2022年4月25日12:43

lasiciliana.weebly.com


Dream Vegas Casino

70:selllut
2022年4月26日0:29

nutakugold.club/freenutakugold/

(copy, paste)

NUATKU Gold Hack Password 2022
NUATKU Free Gold 2022 MISE À JOUR

71:selllut
2022年4月26日1:44

nutakugold.club/freenutakugold/

(copy, paste)

How To Get Free NUATKU Gold 2022
NUTAKU FREE HACK 2022 MISE À JOUR

72:selllut
2022年4月26日2:56

nutakugold.club/freenutakugold/

(copy, paste)

NUATKU Gold Hack Passwort 2022 AKTUALISIERT
Codes d'or NUATKU gratuits 2022 MIS À JOUR

73:selllut
2022年4月26日3:45

nutakugold.club/freenutakugold/

(copy, paste)

Pièces d'or NUATKU gratuites sans enquête 2022
Free NUATKU Gold Coins No Surveys 2022 UPDATED

74:selllut
2022年4月26日4:53

nutakugold.club/freenutakugold/

(copy, paste)

nutaku free coins ios UPDATED
NUATKU Or Glitch 2022

75:selllut
2022年4月26日5:59

nutakugold.club/freenutakugold/

(copy, paste)

Codes or NUTAKU gratuits MISE À JOUR
Nutaku free codes 2022 april UPDATED

76:selllut
2022年4月26日8:13

nutakugold.club/freenutakugold/

(copy, paste)
e36ebba
Comment obtenir gratuitement des pièces d'or NUATKU 2022
Pièces d'or NUATKU gratuites sans enquête 2022 MISE À JOUR

78:selllut
2022年4月26日9:29

nutakugold.club/freenutakugold/

(copy, paste)
a2f40b0
Comment obtenir NUATKU Gold 2022
NUATKU Gold Coin Hack Aucune enquête 2022

79:selllut
2022年4月26日12:00

nutakugold.club/freenutakugold/

(copy, paste)
c4bfb3b
NUATKU Gold Cheat 2022 UPDATED
NUTAKU gold codes uk MISE À JOUR

80:selllut
2022年4月26日13:13

nutakugold.club/freenutakugold/

(copy, paste)
a5ca2f4
So hacken Sie NUATKU-Spiele 2022 AKTUALISIERT
NUTAKU GOLD HACK 2022 UPDATED

81:selllut
2022年4月26日14:28

nutakugold.club/freenutakugold/

(copy, paste)
ebba5ca
NUTAKU gold codes uk UPDATED
NUATKU Goldgenerator 2022 AKTUALISIERT

82:selllut
2022年4月26日15:45

nutakugold.club/freenutakugold/

(copy, paste)
2f40b0f
NUATKU-Goldcodes 2022
NUATKU Points Hack Password 2022

123:selllut
2022年4月29日8:48

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Gold-Hack-Passwort 2022
NUTAKU FREE HACK 2022 UPDATED
Comment obtenir gratuitement NUTAKU Gold 2022 MISE À JOUR

124:selllut
2022年4月29日10:07

nutakugold.club/freenutakugold/

MAY UPDATED!
So erhalten Sie NUTAKU Gold 2022 AKTUALISIERT
How To Hack NUTAKU Games 2022
NUTAKU Gold Generator 2022 UPDATED

125:selllut
2022年4月29日11:27

nutakugold.club/freenutakugold/

MAY UPDATED!
Codes d'or NUTAKU 2022 mis à jour
NUTAKU Booty Calls Hack 2022 UPDATED
Codes d'or NUTAKU 2022

126:selllut
2022年4月29日12:45

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Gold Codes 2022 UPDATED
NUTAKU Gold Coin Hack No Survey 2022 MISE À JOUR
NUTAKU GOLD HACK 2022 AKTUALISIERT

127:selllut
2022年4月29日14:07

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Goldfrei 2022
NUTAKU FREE HACK 2022 AKTUALISIERT
NUTAKU Goldcodes uk AKTUALISIERT

128:selllut
2022年4月29日15:26

nutakugold.club/freenutakugold/

MAY UPDATED!
So hacken Sie NUTAKU-Spiele 2022 AKTUALISIERT
How To Hack NUTAKU Games 2022
Générateur gratuit de pièces NUTAKU MISE À JOUR

129:selllut
2022年4月29日17:04

nutakugold.club/freenutakugold/

MAY UPDATED!
How To Get Free NUTAKU Gold Coins 2022
NUTAKU Goldmünzen-Promo-Codes 2022
NUTAKU FREE HACK 2022 AKTUALISIERT

130:selllut
2022年4月29日18:44

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Gold Free 2022 UPDATED
Codes promotionnels des pièces d'or NUTAKU 2022
NUTAKU FREE COINS 2022 UPDATED

131:selllut
2022年4月29日20:23

nutakugold.club/freenutakugold/

MAY UPDATED!
Codes or NUTAKU gratuits MISE À JOUR
NUTAKU Free Coins Codes 2022
Free NUTAKU Gold Coins No Surveys 2022 UPDATED

132:selllut
2022年4月29日23:01

nutakugold.club/freenutakugold/

MAY UPDATED!
How To Get Free NUTAKU Gold 2022 UPDATED
NUTAKU gold codes free UPDATED
NUTAKU Gold Code 2022 UPDATED

133:selllut
2022年4月30日2:31

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Gold Cheat 2022
Pièces d'or NUTAKU gratuites 2022
NUTAKU Gold Code 2022 UPDATED

134:selllut
2022年4月30日5:12

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU GOLD HACK 2022 AKTUALISIERT
NUTAKU Money Hack 2022
nutaku pièces gratuites ios MISE À JOUR

135:selllut
2022年4月30日6:33

nutakugold.club/freenutakugold/

MAY UPDATED!
NUTAKU Goldcodes USA AKTUALISIERT
NUTAKU-Goldcodes 2022
NUTAKU Hack 2022

158:Jason
2022年5月9日4:38

order provigil 200mg generic Shawn

160:Rozella
2022年5月10日23:25

provigil oral

162:Sondra
2022年5月12日19:52

provigil cost modafinil cost provigil cost

176:viperBrank
2022年5月28日5:05

я гадюка. я жив в україні в маріополі зараз живу в польщі. де знайти роботу??? гадюка