プロクラシスト

今日の寄り道 明日の近道

【導入編】elasticsearch-kibana-pythonでオシャレな可視化


スポンサーリンク

[最終更新 2017.8.17] ※技術メモ

こんにちは、ほけきよです。

どうせなら、データをかっこよく表示したいじゃないですか? 今回は、kibanaという可視化ツールについて、あんま日本語の資料がないのでメモ

尚、導入編です。 kibanaの使い方は次の記事であげる予定です

Kibanaとは

かっこよく可視化するやつ。ここにデモが色々とある

Kibana

その中のHTTPのデモはこんな感じ。かっこよい。

  • 可視化ツール
  • Elasticsearch(検索エンジン)と連携して使う
    • Elasticsearchの検索結果を簡単に可視化する奴

参考 : 初心者のためのKibanaの詳しい使い方

ElasticSearchとは

  • データを保管し、検索できるやつ

インストール

インストール手順 サマリ

ubuntuの場合、 私のgithubから、install.shを叩くと一通り入るはずです。

github.com

java

recommend java1.8なので。 ubuntuバージョンのインスコ方法

# repository追加
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
# インスコ
sudo apt-get install oracle-java8-installer
# 確認(1.8ならOK)
java -version
# 環境変数設定
sudo apt-get inatall oracle-jave8-set-default

ElasticSearch

# Elasticsearchをダウンロードする
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.tar.gz
# 解凍・起動
tar -xvf elasticsearch-5.5.0.tar.gz
cd elasticsearch-5.5.0/bin
./elasticsearch

ElasticSearch plugin

binディレクトリ上のelasticsearch-pluginを実行 とりあえずanalysis-kuromojiを入れる(日本語対応)

./elasticsearch-plugin install analysis-kuromoji

Kibana

# Kibanaをダウンロードする
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-linux-x86_64.tar.gz
## 解凍・起動
sha1sum kibana-5.5.0-linux-x86_64.tar.gz 
tar -xzf kibana-5.5.0-linux-x86_64.tar.gz
cd kibana/ 

起動確認

ElasticSearchとKibanaが両方共起動しているとき、localhost:5601にアクセスすると、次のような画面になる。

チュートリアル的に試す1

データを投げて可視化するまで。とりあえずshakespeareのデータを使ってみる。

elasticsearchとkibanaを起動

bash elasticsearch-5.5.0/bin/elasticsearch
bash kibana-5.5.0-linux-x86_64/bin/kibana

データを取ってくる

wget https://download.elastic.co/demos/kibana/gettingstarted/shakespeare.json

データのマッピング、データの投入

tutorialではcurlを使って、elasticsearchにデータをぶち投げまくる

まずマッピング。投入したデータをどう調理するか。 マッピングの具体例はこっち? 、shakespearのデータ、これをそのままコピーしてシェルに貼り付ける。

curl -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "user": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" }  
      }
    },
    "blogpost": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "title":    { "type": "text"  }, 
        "body":     { "type": "text"  }, 
        "user_id":  {
          "type":   "keyword" 
        },
        "created":  {
          "type":   "date", 
          "format": "strict_date_optional_time||epoch_millis"
        }
      }
    }
  }
}
'

つぎにデータ投入

curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary @shakespeare.json

うにょうにょとelasticsearchのログが動き始める。

ロードができているか確認

curl -XGET 'localhost:9200/_cat/indices?v&pretty'

次のような類のものが表示されたら勝ち(shakespeareがあるかどうかをチェックしておこう)

health status index               pri rep docs.count docs.deleted store.size pri.store.size
yellow open   shakespeare           5   1     111396            0     17.6mb         17.6mb
...

index patternの定義

参考

  • kibanaページを開く : ブラウザでlocalhost:5601(デフォルト)
  • Mangaement ->Index Patterns -> Create Index Patterns
  • Index name or patternに取り出すパターンを(*)を使ってうまく記述
    • 例 : shakespearのデータならshake*など

こんな感じで、値が保存されている

Visualize

Visuzlizeのところ。 いろいろ出来ることはあるけど、とりあえず棒グラフでも作ってみる。

役割別、喋ったカウントをしたものがコチラ

参考

大事な用語

  • Aggregation : データを集める
  • bucket 検索結果を指定した条件に分類(東京, 大阪, 名古屋, … など)
    • 棒グラフの縦棒, 円グラフの分割の仕方など。
    • filter(条件でフィルタをかける)
    • terms(各項目ごとに分ける)
    • nested, children, range
  • metrics
    • Bucketで区切られたものの中身を集計
    • min, max, sum, avg, top_hits, percentilesなど。
  • field 見るデータ

使い方

  • Visualize->Create New Visualization
  • 可視化したいものを選ぶ
  • bucketを使ってどこを可視化するか決める
    • Split Slicesクリックする
    • Aggregation ListからRangeを選ぶ
    • Fieldリストからbalanceを選ぶ
    • rangeを指定する

python-ElasticSearch-Kibana

ここまででだいたいのことが出来るけど、curlコマンド使ってシェルで色々するのは、めんどくさい。

なので、pythonからelasticsearchのデータを出し入れ出来るようにする。

導入

elasticsearchをpythonにいれるだけでOK

pip install elasticsearch

あとはデータをみながらのほうがわかりやすいので、詳細は次記事参照

参考

PROCRASIST