Python

【Python】 「Sweetviz」探索的データ解析EDAでの使い方。仮想通貨の分析。

Python

どうも、月見(@Suzuka14144156)です。

今回は、「Sweetviz」で探索的データ解析(EDA)の方法について解説します。

なので、このようなお悩みの方におすすめの記事です。

  • Sweetvizってどうなの?
  • Pandas-profilingとどっちがいい?


Sweetvizとは?

Sweetvizは、探索的データ解析(EDA)用のライブラリです。

少々面倒くさいEDAの作業を数行のコードで実行できるといったものです。

月見
月見

こんな感じのダッシュボードが数行のコードで表示可能です。

Sweetvizのメリット

  • pandas-profilingに比べて、実行速度が速い(気がする)
  • trainとtestのデータ比較ができるので便利

正直pandasーprofilingよりいいですね。

月見
月見

pandasーprofilingは、色々な相関係数とか算出してくれているのですが、必要な場面限られますねよね。

正直私は、Sweetvizで十分ですね。

Sweetvizを試すための環境の構築

今回は、Jupyte Labを用います。

Juptrer Labのインストール

インストール方法は以下2種類ある。

  1. Anacondaをインストール
  2. JupyterLabを直接インストール
月見
月見
  • どちらでもOKです

ただ、Anacondaをインストールする方が時間がかかるのでお急ぎの方は、「JupyterLabを直接インストール」がオススメ。

Anacondaをインストール

以下の記事を参考にしてください。

JupyterLabを直接インストール

コマンドプロンプトから、以下のコードを入力ください。

pip install jupyterlab

JupyterLabの起動

コマンドプロンプトから、以下のコードを入力ください。

jupyter lab

以下赤枠のアイコンをクリック。

これで起動します。

Sweetvizのインストール

筆者は、Anacondaを利用しているので以下をコマンドプロンプトで実行することで、インストール可能でした。

conda install -c conda-forge sweetviz

Sweetvizを試す

今回は、仮想通貨ビットコインの価格を機械学習で予測するモデルを作成します。

説明変数には、以下を利用します。

  • ‘DX-Y.NYB’:ドル指数
  • ‘GC=F’:金
  • ‘^DJI’:ダウ
  • ‘^GSPC’:S&P500
  • ‘^IXIC’:ナスダック
  • ‘^TNX’:米国10年債利回り

つまり、株価やドルインデックスなどから、ビットコインの価格を予想するモデルを作成するということ。

各tickerのチャート取得

import pandas as pd  
from pandas_datareader import data as pdr 
import datetime
import yfinance as yf
import mplfinance as mpl

#BTCのチャートを取得
tickers = ['BTC-USD','^IXIC','^GSPC','^DJI','^TNX','DX-Y.NYB','GC=F']

#取得開始日を入力
start = "2022-01-01"

#取得終了日を入力
end = datetime.date.today()

#Yahoofinanceから取得するように設定
yf.pdr_override()

#データの取得を実行
data = pdr.get_data_yahoo(tickers, start, end)

欠損値の処理

data = data.dropna()
data

SweetvizでEDA

# 必要なライブラリーのインポート
import numpy as np
import sweetviz as sv
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

df = data['Adj Close']

# 学習データと評価データを作成
x_train, x_test, y_train, y_test = train_test_split(df.iloc[:, 1:7], df.iloc[:, 0],
                                                    test_size=0.2, random_state=1)

df_train = pd.concat([x_train, y_train], axis=1)
df_test = pd.concat([x_test, y_test], axis=1)

my_report = sv.compare([df_train, "Train"], [df_test, "Test"], "BTC-USD")

#直接ブラウザに表示
my_report.show_html("sweetviz_report_2col.html")

実行すると以下のダッシュボードが、表示されます。

trainデータとtestデータに分かれてEDAできるのが良いですね。

スプリットしたときに偏りがないかなど確認ができます。

各因子の相関係数も表示可能です。

月見
月見

見やすいですね。

このボタンをカチカチ切り替えることで、trainとtestデータとで、相関関係に不整合が起きていないか一瞬で確認可能で便利です。

月見
月見

両者のデータの各因子の相関関係にそこまで大きな差異がないことがわかりますね。

せっかくなので、このまま回帰モデルをランダムフォレストでつくってみます。

ランダムフォレストでモデル作成

from sklearn.ensemble import RandomForestRegressor as RFR

rg = RFR(n_jobs=-1, random_state=2525)
rg.fit(x_train, y_train)
predicted = rg.predict(x_test)
rg.score(x_test, y_test)

スコアが、以下です。

なかなか良い結果です。

可視化

テストデータと予測データをプロットします。

かなり合っていますね。

重要因子の探索

fti = rg.feature_importances_

print('Feature Importances:')
for i in range(len(df.columns)):
    print(df.columns[i+1],fti [i])

実行結果は、以下です。

DX-Y.NYBの値が高いです。

  • ドルインデックスとビットコインは、負の相関が強い
  • なので、ほぼドルインデックスでビットコインの価格を予測できるという結果になったと推定されます

まとめ

今回は、「Sweetviz」で探索的データ解析(EDA)の方法について解説しました。

Sweetvizは、探索的データ解析(EDA)用のライブラリです。

  • pandas-profilingに比べて、実行速度が速い(気がする)
  • trainとtestのデータ比較ができるので便利

今回の記事は以上です。

コメント

タイトルとURLをコピーしました