Metabaseで日経225をグラフ表示まで
概要
OSSのBIツールでMetabaseというものがあることを知り、以下の記事でインストールまで行いました。もし、ご興味があれば是非インストールしてみて下さい。
Metabaseはグラフなどのチャートオブジェクトの見た目がオシャレそうな雰囲気が漂っているので、試しに日経225のトレンドグラフを作ってみましてみました。
環境
OS : Windows10
Metabase : version 0.33.4
PostgreSQL : 11
Step1 : データソースの取得
グラフ化してみるにもまずはデータが必要。今回は日経225ということで、入手元としてFREDから入手させて頂くことにしました。FREDはセントルイス連邦準備銀行の研究部門が管理しているデータベースで、金融系のデータを取得するのに重宝します。
まずは上記のFREDから2014/10/20以降の日経平均データをcsvでダウンロードしました。
Step2 : データベースへの格納
Metabaseはcsvをそのままデータソースとして指定することも可能だと思いますが、せっかくなので、ダウンロードしたcsvデータをデータベースに格納し田植えでMetabaseから参照する方式を試したいと思います。
格納先のデータベースとして今回はOSSのRDBMSであるPostgreSQLを使用します。今回はバージョン11.5を使用しました。(最新で12が出ていますが、重宝しているA5M2が繋がらなかったため)
スキーマの作成
まずはPostgreSQLのシェルであるpsqlを立ち上げ、以下のコマンドでスキーマを定義します。
create schema stock;
テーブルの作成
ダウンロードしてきたcsvの日経データを確認したところ、ヘッダが「日付」、「終値」の2つだったため、それに合わせてdates, closing_priceというカラム名でテーブルを定義します。
create table stock.fred_nikkei225
(
dates date not null,
closing_price varchar(15)
)
上記で、closing_priceをわざわざvarcharで定義しているのは、データの中に、終値として「.」しか入っていないものがあったからです。こういうことがあるので、やはり、データは一通り見ておくのがいいです。
今回は、MetabaseのBIとしての機能を試す、ちょうどいい機会なので、そのままvarcharで取り込み、後ほどMetabase側でどう処理できるか確認してみることにします。
データインポート
以下のコマンドでcsvを取り込みます。なお、ヘッダがあるとエラーが出るので、あらかじめcsvを開いてヘッダだけは消した上で実施しました。
COPY stock.fred_nikkei225(dates,closing_price)
FROM 'C:\NIKKEI225.csv' DELIMITER ',' CSV HEADER;
格納結果
このような感じです。
Step3 : Metabaseでの表示
ブラウザ(Chromで実施しています)でlocalhost:3000にアクセスしてMetabaseにログインします。
データ一覧表示
ホーム画面の下部にあるデータ一覧から先ほどの日経データを入れたpostgres→Fred_Nikkei225を選択します。
すると、テーブルに格納されているデータが一覧表示されます。
前処理
次に、先ほど放置していたclosing_priceの中に含まれている「.」を取り除くという前処理を行いたいと思います。
以下で示す、closing_priceのカラム名の部分をクリックします。
すると、フィルタという項目が出ますので、これをクリックします。
そして、条件に「ではない」と「.」を入力し、[フィルタをアップデートする]を押します。
これで「.」が消えました。コードを書く必要なく、簡単にできますね。
さっそくグラフ化してみたいところですが、closing_priceの列はvarcharで定義しているため、このままでは折れ線グラフなどが描けません。そこで新たに数字型の列を作りたいと思います。
まず、右上にある下図のアイコンを選びます。
「SQLを見る」というメニューが出ますので、これを選択します。
すると、この質問のSQLというポップアップが出てきますので、[この質問をSQLに変換します]というボタンを押します。
すると、以下のように直接クエリを触れるようになります。自由度高いです。
そこで、closing_priceをnumericにcastしたカスタム列を追加するSQLに変更し、クエリを実行します。
SELECT "stock"."fred_nikkei225"."closing_price" AS "closing_price", cast(closing_price as numeric) as closing_price_numeric,"stock"."fred_nikkei225"."dates" AS "dates"
FROM "stock"."fred_nikkei225"
WHERE "stock"."fred_nikkei225"."closing_price" <> '.'
LIMIT 1048576
すると、データとしてclosing_price_numricというnumeric型のデータ列が追加されますので、あとはビジュアライゼーションから折れ線を選択するだけでグラフが自動的に描かれます。
まとめ
MetabaseはDBに入ったグラフを可視化する、という使い方であれば一瞬でできてしまいますし、SQLがべた書きできるので自由度も高いのではないでしょうか。ダッシュボードの作りこみなどはまだできていませんが、今後もっといろいろと試してみたいツールです。