Pokemon Goトレーナーの @cero_t です。
今月頭にラスベガスのモンテカルロに宿泊したところ、ニャース、マンキー、ガーディの巣になっていて、アメを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は、このような図になっています。
(公式サイトの画像より)
これは好きなアーティストのアンケートを図示したもので、ここではカナダの人が好きなアーティストと、ブラジルの人が好きなアーティストを図示しています。線が太いアーティストほど、出現数が多い(人気が高い)と言えます。また、図中の「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」から開くことができます。
こんな感じで、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」(商品名)を選びました。
それで検索してみたのですが、、、
あんまり良い感じのGraphになりませんね。
そうなのです、データの内容によっては、これではほとんどGraphが描画されなかったり、ばらばらのグラフが描画されてしまうことがあります。
そのような場合には、右上にあるフラスコの隣のギアのアイコンをクリックして、描画をカスタマイズします。
設定項目は次の通りです。
- 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を描いてみると、こんな結果が得られました。
えっと、未成年男性(m00_19)にはヨーグルトマシュマロがよく売れていて、50歳以上の女性(w50_)にはチアシードといちじくのクッキーがよく売れていて、20歳から49歳の男女(m20_49、w20_49)には共通してエンゼルパイが売れている・・・なんて。
もちろんここから更なる詳しい調査が必要となりますが、
まずはこのGraph機能を使ってまずインサイト(閃き)を得て、次にそれを裏付けるためにデータを詳細に調査する、という流れが良いのではないかと思います。
alpha版のうちは自由に試せるGraph機能。
ぜひ今のうちに使ってみてください!
Graph Go!
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、AWS、Hadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社の新卒・インターンシップ - Wantedlywww.wantedly.com