4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZaimのデータをElasticsearchに入れて、無駄遣いをKibanaで分析する

Last updated at Posted at 2020-08-02

最近、自分の支出をうまくコントロールできていないのが気になりまして、、
普段使ってる家計簿アプリのデータを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でダウンロード。
image.png

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ファイルを作成します。

zaimdata.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のデータの登録を確認し、無事に検索できるようになりました。
複雑なクエリ―を投げて分析したり、可視化したりできそうです!
image.png

感想

こうして数字と向き合ってみるといかに無駄な出費が多いか見せつけられる気がして心が痛い、、
コンビニの買い物とスタバは控え目にしようと思いました(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

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?