kibana

アンケート結果の集計とプレゼン資料作りの宿題がある。
アンケート結果はCSVファイルに1行ごとにまとめてあるが、EXCELでの集計は面倒になりそう。
噂のkibanaを使ってみることにする。

とりあえずkibanaは単体では使えず、ElasticsearchというDBと組み合わせて使うものであることを知った。まずこれらを我が家のNASにインストールする。本家にRepositoryからのインストール手順があるのでこれに従う。我が家はUbuntu 16.10なのでdebianパッケージを使う。

まずはElasticsearch

https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html


Ubuntu 16.10はsystemdなので、この流儀でサービスを起動する。

Kibanaも同じ

https://www.elastic.co/guide/en/kibana/current/_upgrading_kibana.html#setup-repositories

CSVファイルからElasticsearchへのデータ投入はembulkを使った。

http://www.embulk.org/docs/recipe/scheduled-csv-load-to-elasticsearch-kibana4.html

上記ページのscheduledは関係なし。
データ投入までの手順は上記の説明に合わせる。CSVファイルはcsvフォルダにおいて、embulk exampleを実行し、ファイル置き場などを手直ししたうえでembulk guessコマンドを実行する。SHIFT JIS文字列やCRLF改行を認識してくれるので助かる。

今回投入するデータは日本語を含んでいて、日本語文字はデフォルトの構文解析器だと1文字単位にばらされるとのこと。文字列データに対して"index: not_analyzed"を指定すれば回避できるとの記事もあるが、embulkでデータを投入するとmapping設定としてindex設定ができない(設定する方法を見つけることができなかった)。

仕方がないので、以下のシェルスクリプトで事前にmappingデータを投入し、その後embulk run config.ymlを実行する、というやり方で落ち着いた。

curl -XPUT 'http://localhost:9200/wlb2016_webservice' -d '
{
    "mappings" : {
      "wlb_2016_webservice" : {
        "properties" : {
          "URL" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "WEBサービス" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "年代" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "性別" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "所属" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "番号" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "紹介文" : {
            "type" : "string",
            "index" : "not_analyzed"
          }
        }
      }
    }
}'
データがイマイチな場合、以下のコマンドでElasticsearchのデータを消して再実行を繰り返した。

curl -XDELETE 'http://localhost:9200/wlb2016_webservice'

今回のデータは日時データを含まないのでkibanaのSetting設定では「Index contains time-based events」チェックボックスを外し、index名称を指定すればよい。

その後Visualize画面で円グラフを作ってみた。とりあえずうまく動いた。

よくわからないのは、総数が少ないアイテム群を「その他」のようにまとめて表示する機能はないのか?というところ。

コメント

このブログの人気の投稿

ST-M310 シフトレバーのカバー開け

Ride with GPSで作成したルートのgpxファイルとOruxMapsの関係

UbuntuのpostfixでGmailにメールを転送する