読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elastic Stack 5.0.0-alpha5がリリース。そろそろGraphを試してみる #elasticsearch

Elasticsearch Kibana

Pokemon Goトレーナーの @ です。
今月頭にラスベガスのモンテカルロに宿泊したところ、ニャースマンキー、ガーディの巣になっていて、アメを100個以上ためることができました!

そんなPokemon Goとは関係ないですが、Elasticsearch Go の alpha Goがリリースされました! Go! Go! 5! 5!

・・・はい、ちょっと無理ありましたね。知ってます。


Elastic Stack 5.0.0-alpha5の新機能は、Elasticのブログエントリーを参照してください。
https://www.elastic.co/jp/blog/elastic-stack-release-5-0-0-alpha-5

私としては、Beatsのテンプレート読み込み機能の辺りがちょっと注目ポイントでした。


さて、alpha5の話題はこれぐらいにして、今日の主なテーマは「Graph」です。
日本語で「グラフ」と言うと、Kibanaでも作れる棒グラフや折れ線グラフのイメージになりますが、それらは英語圏では「Chart」と呼ばれることが多いです。
一方「Graph」と言えば、点(ノード)を線(エッジ)で繋いで関連を表す図のことになります。日本語だと「グラフ理論のほうのグラフ」と言ったりするやつですね。
言ったりしますよね?

Elasticsearchにも、バージョン2.3と5.0にこの機能が追加されたので、今回は5.0.0-alpha5で試したいと思います。
alpha版のうちは、このGraph機能を制限なく使うことができます。

そもそもGraphって?

ElasticsearchのGraph機能は、データ「関連」を示すものなのですが、そもそも、関連というのはどういう事なのでしょうか?
Elasticsearchの公式サイトにあるGraphは、このような図になっています。

f:id:acro-engineer:20160819114148j:plain:w800
(公式サイトの画像より)


これは好きなアーティストのアンケートを図示したもので、ここではカナダの人が好きなアーティストと、ブラジルの人が好きなアーティストを図示しています。線が太いアーティストほど、出現数が多い(人気が高い)と言えます。また、図中の「metric」や「our lady peace」などは、両方の国の人が好きである、ということが分かります。

これがデータの関連です。ElasticsearchのGraph機能は、このような複数項目の関連を図示できます。この場合は「(アンケートに回答した人の)出身国」と「好きなアーティスト」の関連を示しています。


ところで、図の左のほうにある「mattew good band」と「matthew good」にも線が引かれています。アンケートでは好きなアーティストは複数回答が可能であったため、このように「好きなアーティスト」同士にも関連があるわけです。平たく言えば「このアーティストが好きな人は、このアーティストも好きです」というアレです。
ElasticsearchのGraph機能は、このような単一の項目(配列)の関連も図示できるのです。


データの関連がどういうものか、イメージを掴めたでしょうか?

なお、私はこういうものを見ると「ネットワーク構成の可視化」とか「マイクロサービスの可視化」などしたくなるのですが、少なくとも今のバージョンのGraph機能では、そのような可視化は難しいようです。あくまでもデータの関連を可視化することを主眼とし、多段構成となるノードの関連はあまり目的とされていないようです。


Graph機能を試す環境を作る

それでは実際にGraph機能を利用するための手順を紹介します。


Graph機能を試すには、Elasticsearch、Kibana、X-Packの5.0.0-alpha5をインストールします。
インストール方法は、前回のエントリーを参照してください。
Elastic Stack 5.0.0-alpha4リリース。CSVインポート機能とKibanaのモニタリングがお目見え! #elasticsearch - Taste of Tech Topics

現時点でこの手順に従ってインストールすると、5.0.0-alpha4ではなく、alpha5がインストールされます。


Graph機能は、Kibanaの左メニューにある「Graph」から開くことができます。
f:id:acro-engineer:20160819114757p:plain:w800
こんな感じで、Graphの画面が開きます。

Graph機能を試す

Graphを描画するためには、何らかのデータが必要です。
アクセスログなり、天気データなり、データの種類は特に問いません。

今回は、Big Data Analysis Contestのデータを投入してみました。
The 2nd Big Data Analysis Contest

このサイトから「ナチュラルローソンのお菓子」の売上データをダウンロードすることが可能です(要登録)

ただしデータは正規化されているため、Elasticsearchに投入する際には非正規化したり、少し加工してGraph機能で利用しやすくするような加工を行ないました。本題ではないので、ここでは加工の詳細は割愛します。


さて、データの登録が終わったらGraphの作成に移ります。

まず、左上のボックスからindexを選択します。
次に、1つの項目(配列)内のデータの関連を見たい場合には「Select a field」となっているボックスから、関連を見たい項目を選択します。
そして検索ボックスに * とでも入力して検索ボタンを押せば、グラフが描画されるでしょう。

2つの項目の相関を見たい場合には、Graph画面の右上にあるフラスコのアイコン(Advanced Mode)をクリックします。
次に、「Fields」から関連を見たい項目を選択し、検索ボックスに * など入力して検索ボタンを押します。


ここでは試しに、年齢層と商品名の関連を見てみます。
フラスコをクリックしてAdvanced Modeにして、Fieldsから「segment.keyword」(年齢層)と、「pname.keyword」(商品名)を選びました。
それで検索してみたのですが、、、
f:id:acro-engineer:20160819120108p:plain:w800
あんまり良い感じのGraphになりませんね。


そうなのです、データの内容によっては、これではほとんどGraphが描画されなかったり、ばらばらのグラフが描画されてしまうことがあります。
そのような場合には、右上にあるフラスコの隣のギアのアイコンをクリックして、描画をカスタマイズします。
f:id:acro-engineer:20160819115811p:plain:w800


設定項目は次の通りです。

  • Sample:
    • Graphの描画に用いるデータの数(サンプリング数) この値が2000であれば、データ数が10万あっても、そのうちの2000だけが利用される。
  • Significant links:
    • Graphに描画する対象データをSignificant Searchで抽出するかどうか。これにチェックが入っていると、特徴的なデータでGraphを描画する。チェックを外すことで、特徴がないデータも含めたGraphを描画する。
  • Certainty:
    • データ同士に関連があると判断するための最小出現数。この値が3であれば、データが2個未満の場合は関連なしとみなされる。
  • Diversity field:
    • データの偏りをなくすために、サンプリング対象を制限するためのフィールド。このフィールドと値を選択することで、たとえばアクセスログの「同じセッションIDは10個までしかサンプルに含めない」などができる。
  • Timeout(ms):
    • タイムアウト。この値が5000であれば、5秒以上かかる検索はエラーとなりGraphに追加されない。


この中で、元データの件数が多い場合には「Sample」で対象データを増やしたり、「Diversity field」を上手く使って同件のデータ数を抑制すると、効果があります。
また特徴の抽出よりも全体の概要を掴みたい時には、「Significant links」のチェックを外すことで、全体的な関連が描画されやすくなります。


この設定をカスタマイズしながらGraphを描いてみると、こんな結果が得られました。
f:id:acro-engineer:20160819121828p:plain:w800


えっと、未成年男性(m00_19)にはヨーグルトマシュマロがよく売れていて、50歳以上の女性(w50_)にはチアシードといちじくのクッキーがよく売れていて、20歳から49歳の男女(m20_49、w20_49)には共通してエンゼルパイが売れている・・・なんて。

もちろんここから更なる詳しい調査が必要となりますが、
まずはこのGraph機能を使ってまずインサイト(閃き)を得て、次にそれを裏付けるためにデータを詳細に調査する、という流れが良いのではないかと思います。


alpha版のうちは自由に試せるGraph機能。
ぜひ今のうちに使ってみてください!

Graph Go!

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedlywww.wantedly.com