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を実行する、というやり方で落ち着いた。
今回のデータは日時データを含まないのでkibanaのSetting設定では「Index contains time-based events」チェックボックスを外し、index名称を指定すればよい。
その後Visualize画面で円グラフを作ってみた。とりあえずうまく動いた。
よくわからないのは、総数が少ないアイテム群を「その他」のようにまとめて表示する機能はないのか?というところ。
アンケート結果は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画面で円グラフを作ってみた。とりあえずうまく動いた。
よくわからないのは、総数が少ないアイテム群を「その他」のようにまとめて表示する機能はないのか?というところ。
コメント