最近、自分の支出をうまくコントロールできていないのが気になりまして、、
普段使ってる家計簿アプリのデータをKibanaで見える化&分析してみようと思います。
環境
Windows10 Pro
Docker Compose ver 1.25.5
Elasticsearch ver 7.7.1
Kibana ver 7.7.1
概要
Zaimの家計簿データをElasticsearchに投入しKibanaから分析する
家計簿データをダウンロード
まずはZaimから家計簿データをCSVでダウンロードしてきます。
APIもありますが、取得できる情報が不十分な場合があるようなので今回は画面から取得してます。
PC版の設定タグからダウンロードできます。
UTF-8でダウンロード。
Elasticsearch&Kibanaを起動する
今回はDocker Composeで一気に起動していきます。
https://github.com/sugikeitter/elasticsearch-kibana-docker
↑こちらを利用させて頂きました
# リポジトリをcloneして、docker-compose.ymlのディレクトリに移動
$ git clone git@github.com:sugikeitter/elasticsearch-kibana-docker.git
$ cd elasticsearch-kibana-docker
# Dockerイメージをビルド
$ docker-compose build
# ビルドが成功したらコンテナ起動
$ docker-compose up
起動を確認する
ブラウザからアクセスして起動を確認します。
Kibana
http://localhost:5601/
Elasticsearch
http://localhost:9200/
Elasticsearchにデータを登録してみる
ひとまずCurlコマンドでデータを1件登録してみます。ダウンロードしたCSVから以下の形式でJSONファイルを作成します。
{
"日付": "2019-01-03",
"方法": "payment",
"カテゴリ": "美容・衣服",
"カテゴリの内訳": "アクセサリー・小物",
"支払元": "-",
"入金先": "-",
"品目": "",
"メモ": "",
"お店": "-",
"通貨": "JPY",
"収入": 0,
"支出": 10800,
"振替": 0,
"残高調整": 0,
"通貨変換前の金額": 10800,
"集計の設定": "常に集計に含める"
}
コマンドラインからJSONファイルのディレクトリに移動して次のコマンドを実行します。
$ curl -X POST "http://localhost:9200/zaimindex/my_type/?pretty" -H "Content-Type":"application/json" -d @zaimdata.json
zaimindexというインデックス名で、先ほどのJSONファイルをElasticsearchに投入しています。
詳しい内容は自分で調べてください笑
データが登録できていることを確認
curlコマンドで先ほどのデータを検索してみます。
$ curl -X GET "http://localhost:9200/zaimindex/my_type/Wy-Ao3MBbVl3j7ySEdUZ?pretty" -H "Content-Type":"application/json"
{
"_index" : "zaimindex",
"_type" : "my_type",
"_id" : "Wy-Ao3MBbVl3j7ySEdUZ",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"日付" : "2019-01-03",
"方法" : "payment",
"カテゴリ" : "美容・衣服",
"カテゴリの内訳" : "アクセサリー・小物",
"支払元" : "-",
"入金先" : "-",
"品目" : "",
"メモ" : "",
"お店" : "-",
"通貨" : "JPY",
"収入" : 0,
"支出" : 10800,
"振替" : 0,
"残高調整" : 0,
"通貨変換前の金額" : 10800,
"集計の設定" : "常に集計に含める"
}
}
ちゃんと登録されていますね!
あとはマッピングを確認してデータ型が正しいかを確認してください。
収入や支出欄がstringになってしまうとあとから集計ができません!ご注意ください
残りのデータを登録していく
今回はElasticsearch-loaderというPythonのツールを使って一括登録していきます。
まずはpipでインストールして
$ pip install elasticsearch-loader
Zaimのcsvファイルを一括で投入します!
Elasticsearchのホストとポート、インデックスを引数で渡してあげます。
$ elasticsearch_loader --es-host localhost:9200 --index zaimindex --type my_type csv Zaim.20200802111121.csv
Kibanaで分析する
先ほどのCSVのデータの登録を確認し、無事に検索できるようになりました。
複雑なクエリ―を投げて分析したり、可視化したりできそうです!
感想
こうして数字と向き合ってみるといかに無駄な出費が多いか見せつけられる気がして心が痛い、、
コンビニの買い物とスタバは控え目にしようと思いました(T_T)
今後は、
1.Zaimのページをスクレイプしてデータ取得を自動化、定時実行
2.自動でESにデータ投入、LogstashとかFluentdとか
3.カテゴリーごとに月の上限額を決めてアラートを出す
こんなところをやって自分のお金の管理をしたいと思います笑
少し長くなってしまいました!
読んで頂きありがとうございました!
参考ページ
https://qiita.com/hassiweb/items/63374089edef63dc35b3
https://qiita.com/sugikeitter/items/f3b2c57bf8bbdc47a8bc
https://qiita.com/mj69/items/c9a50f6e4e425a258612
https://worklog.be/archives/3582