探索的データ解析と可視化

探索的データ解析(死語なの?)に関して調べてたらすごくおもしろかったので、自分の頭の中を整理するためにも文字にしておく。(僕は統計の専門家ではないので間違ったこと書いてるかもしれません。間違ってたらそっと教えてください...)

f:id:hongo35:20130410013832j:plain

データ解析には次の二つのアプローチがある。

  • 確証的データ解析
  • 探索的データ解析

一つ目の確証的データ解析とはいわゆる仮説検定で、ある仮説が正しいといってよいかどうかを統計学的、確率論的に判断するものである。 そして二つ目が探索的データ解析であり、今回はこちらをメインで書いていく。

探索的データ解析

データの時代と言われるようになり、企業は蓄積されたデータを有効に活用し、ビジネスに繋げようとしている。 しかし、未だほとんどの企業はデータはあるものの、それを有効に活用できているとは言えない状況にあり、確証的データ解析を行うまで至っていないような気がする。このような状況でまずはじめに考えなければならないことは、解決すべき問題を特定する(仮説を立てる)ということだと思う。

何が問題なのかわからない状態で解析をしようとしても、そこからなんらかの知見を得ることは難しい。 まずは、データを俯瞰的にあらゆる角度から観察し、データの特徴を捉えることでそもそも何が問題なのかを明らかにする必要がある。このような、解析初期のフェーズを重視したアプローチが探索的データ解析である。

探索的データ解析(Exploratory Data Analysis)は、統計学J.W.Tukeyによって提唱されたもので、視覚的にデータを捉え、データ自身に仮説を語らせるようなアプローチである。 Tukeyの言葉にこのようなものがある。

An approximate answer to the right problem is worth a good deal more than an exact answer to an approximate problem. (正しい疑問に近似的な解を持つほうが、間違った疑問に対する正確な解を持つよりもよほどマシである。)

解析の初期段階でいかに正しい疑問を見つけられるかが非常に重要で、間違った疑問に対してその後いかに正確な答えを得ても重要性は薄いということを言っている。

そして、この探索的データ解析において最も重要な役割を果たすものがグラフ(可視化)である。数字だけを見ていてもわからなかったものが、可視化され、視覚的に捉えられるようになると、そこからたくさんの気づきを得られる。Tukeyはこのようなことも言っている。

Graphs force us to note the unexpected; nothing could be important.(グラフは我々に、期待しなかったことを気付かせる。それより重要なものはないのではないか。)

よくわからないデータから視覚的に、正しい疑問を見つけることがデータへアプローチする初期段階として非常に重要で、データのいろいろな面を観察することでデータから様々な発見をすることができる。

最近では可視化の重要性はいろいろなところで語られているが、ただ単にデータを可視化しました、では何の意味も無く、何のためにデータを可視化するのか、どのような場面で可視化は有効であるのかをしっかりと認識した上でデータと向き合うことがビジネスや研究においてデータを有効に活用するために必要であると思う。

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

<参考>

「探索的データ解析」が死語になっているような気がする-当たり前になりすぎたのか忘れ去られたのか 探索的データ解析からロバスト統計学へ

「データ理解を助けるビジュアライゼーション」を振り返って

 エンジニアサポートCROSS 2013で「データ理解を助けるビジュアライゼーション」というセッションを行いました。多くの方に関心を持っていただき、立ち見が出るほどの盛況でした。このセッションはUstを切っていたので、内容に関して文字で残しておきたいと思います。ただ、私自身、緊張しながら司会をしていたので、正直ほとんどおぼえていませんw 思い出せる範囲の内容になります。 

f:id:hongo35:20130119165713j:plain

このセッションでは、

1. この分野で必要とされる能力はどんな能力か

2. 企業が可視化に割くべきリソースと優先順位について

3. データマイニング・可視化の今後

の3つのお題に対してパネルディスカッションを行いました。ざっくりとしたお題になっていますが、セッション終了後に多くの方から、お題の選択は難しすぎず、この領域のことをあまり知らなくても楽しめたと言っていただけたので、良かったのかなぁと思っています。 

 

一つずつ見ていきます。

1. この分野で必要とされる能力はどんな能力か

  • 目的をしっかり考えること。可視化は結果が目に見えるものなのでおもしろい。そして、その結果を見ると何か成果が出たような気になってしまう。手段が目的にすり変わってしまうということがよく起こる。目的を考え、企業であればいかにサービスを改善し、お金に結びつけられるかが重要なので、それを考えられる能力は必要。
  • 統計学をしっかり学ぶこと。
  • 数学や物理が得意な人でも、データを扱うことが好きではない人が解析、可視化をしても、見えてくるものはあまりおもしろくなかったりする。逆に、美大などの、数学は得意じゃないけど、データを視覚化することが好きな人たちが作るものからおもしろいものが見えてくることがある。データが好きだということが重要なのではないか。

 

2. 企業が可視化に割くべきリソースと優先順位について

 可視化の重要性は認識され始めているが、導入は十分な水準ではない。それはなぜか?以下の3つの問題が考えられる。

  • 可視化の費用対効果とは?

・可視化エンジニアが持つスキルセットを可視化に集中させて使うことに効果はあるのだろうか。何か一つ新しいサービスの立ち上げなどに使うことの方が効果が大きいかもしれない。可視化の価値がまだ未知数である。

・可視化は普段は意識していないけれど、あるとき突然必要になることが多い。

  • 可視化の過去事例とは?

・アメリカでは、9.11以来、セキュリティなどの分野で可視化にお金が付けられる動きが起こったが、日本では起こらなかった。

・例えば、d3.jsや他の可視化ツールのほとんどは日本以外で作られたもの。日本で可視化に取り組んだ事例は少ない。

  • 可視化エンジニアを採用するには?

・統計ができて、コーディングができて、可視化もできるようなスーパーマンはどこにいるのか。

 

3. データマイニング・可視化の今後

・今後は可視化の事例をたくさん作っていくことが重要。

・グラフィカシーと呼ばれる、データを見ることに対する教育を強化し、しっかりとした基礎知識を身につけられるように教育も変わっていくのではないか。

 

というような内容でした。 

 自分が発表者として発表をするという経験は何度かあったのですが、セッションのモデレーターをやるのは初めての経験で、緊張しました。いろいろ大変なこともありましたが、チャレンジできて良かったと思っています。

 

 最後に、CROSS2013の事務局の方々、イベント関係者の方々にお礼申し上げたいと思います。特に事務局の方々は、個人的にお付き合いのある方が多く、いろいろ助けていただきました。ありがとうございました!

 

CROSS2013で「データ理解を助けるビジュアライゼーション」をやります

 1月18日にエンジニアサポートCROSS2013というイベントがあります。その中の一セッションとして、

データ理解を助けるビジュアライゼーション

というセッションをやらせていただくことになりました。

 

参加者にとって有意義で、来てよかったと思ってもらえるようなセッションになるよう、できる限りの準備をしたつもりです。是非ご参加ください。

 チケットは、こちらでお買い求めください。

 

本セッション以外にもおもしろいセッションが目白押しです。 

また、夕方からサントリープレミアムモルツの飲み放題タイムがあります。これだけのことが一日で楽しめるイベントです。年の始めに楽しみましょう!

 

 セッション概要

 今後ますます大規模・多次元化していくデータをいかに視覚化し、データから意味を見いだすか。データマイニングと絡めてより深いデータの理解をするために何が重要になってくるのかなどをディスカッションしたい。 

 ---登壇者---

・木村博之(@HiroyukiKimura)

・伊藤貴之(@1T0T)

・岡瑞起(@miz_oka)

・大原一輝

 

 

Gephiを使ったTwitterネットワークの可視化

 今回はオープンソースのグラフ可視化ソフトウェアGephiを使って、自分のTwitterネットワークを可視化してみました。

 

 まずデータですが、自分(@hongo35)がフォローしている人のuser_idをTwitter APIで取得します( https://dev.twitter.com/docs/api/1/get/friends/ids )。そして、そのuser_idそれぞれに対して、その人がフォローしているuser_idを取得してきます(総数: 330,238)。1リクエストに対してmax 5000件のuser_idが取得できます。今回は簡単のため、5000人以上フォローしている人も5000件のuser_idしか取得していないので、その点では正確性を欠きます。次に、取得してきたuser_idのなかで、自分のフォローしている人のuser_idがあればそのuser_id間にリンクを張る(有向)というようにして、ネットワークデータを作成しました。

 本当はGraphDBのNeo4jにネットワークデータを入れて、Gephiで可視化するようにしたかったのですが、今回はリンク構造をcsvで書き出し、それをGephiで読み込むことで可視化しました。

結果を以下に示します。真ん中の赤が自分。

Nodes 452
Edges

9014

f:id:hongo35:20121109233610p:plain

レイアウトは、Fruchterman Reingoldアルゴリズムで配置しています。

簡単な指標だけ計算すると、

平均次数: 19.942

平均経路長(有向): 3.086

f:id:hongo35:20121109234300p:plain

という結果になりました。

 Twitterのネットワークは有向グラフであるため、他のSNSに比べて経路長が長くなるように思われますが、 実際には他のSNSよりも平均経路長は短いという研究があります( http://an.kaist.ac.kr/traces/WWW2010.html )。この研究では、Twitterの平均経路長は4.12となっています。これに比べ、今回のネットワークの平均経路長はさらに短い3.09でした。今回はネットワークが小規模で、僕自身を中心としているので当たり前なのかもしれないですが。。

 

 また、今回はクラスタリングはしていませんが、グラフからだいたいの感じで分類してみると、3つくらいに分けられます。それぞれのクラスタに含まれる人を調べると、クラスタはそれぞれ「(広く)IT系」、「学部時代のサークル」、「海外の可視化コミュニティ」になっていました。

f:id:hongo35:20121110012554p:plain

 もっと大規模なネットワークを可視化して、クラスタの間で領域をまたいでいるような人を見つけたりするとおもしろいのかなーなどと思ったりしました。

  

 今回は遊びでやったんですが、意外とおもしろかったのでまとめてみました。Twitterのフォロー関係はあまり意識したことが無かったのですが、データを可視化して気付くことが多々ありました。あと、JavaScriptの可視化ライブラリのd3.jssigma.jsを使って可視化しようかとも思ったのですが、これらで扱えるネットワークデータは小規模で(今回のネットワークは小規模ですが)、もしノード数が数万、数十万になったら使えないですし、ネットワーク指標の計算も自分で実装しなければならないので、今回はGephiを使用しました。ネットワーク指標を計算してくれるのはとても楽です。機会があれば使ってみるとおもしろいと思います。

 

 

データビジュアリゼーションとインフォグラフィックスの違い

 

最近はデータビジュアリゼーションもインフォグラフィックスも目にする機会が増えました。しかし、この二つを混同している人が少なからずいるように感じます。データビジュアリゼーションとインフォグラフィックスはどちらも情報を視覚的にわかりやすく伝えるという意味では同じですが、違う部分も多く存在し、分けて考えた方がいいです。今回は、この二つの違いについて書いてみたいと思います。

 

データビジュアリゼーション

f:id:vizgeek:20120604153014p:plain

データビジュアリゼーションの目的の一つは、見えないものを見えるようにすることです。わかりにくいので言い換えると、数字や単語が並んだデータの中から何らかの意味ある情報を見つけ出す、ということです。では、意味ある情報を見つけるためにはどうすればいいのでしょうか。下の図を見てください。

f:id:vizgeek:20120604123459p:plain

これは、生のデータから最終的な視覚化までのプロセスを表しています。まず何かデータがあります。そのデータにはいろいろなものが入っているので、始めにいらないデータを削除したり、また、統計的手法を用いてデータを整理したりします(これ重要!)。そして、データが整理されたらそのデータの種類(時系列、ワード、ネットワーク...)によって、データを表現する方法を決めます。後述のインフォグラフィックスと違い、データが時間ごとに変わったとしてもプログラムで行われる計算、視覚化は変わらないので、何度も繰り返し使うことができます。

Focus & Context

データビジュアリゼーションで重要なテクニックの一つにFocus & Context というものがあります。これは、例えば、ソーシャルグラフを考えてみてください。そのグラフの全体を見ている時に、ある一部のクラスター(クリーク)を拡大して見たいという場合があります。全体も見れるし、ある一部だけを見ることもできるようにすることをFocus & Context と言います。このテクニックは、データビジュアリゼーションではできますが、インフォグラフィックスではできません。

 

インフォグラフィックス

f:id:vizgeek:20120604145842j:plain

一方のインフォグラフィックスですが、こちらはいわゆる見た目のデザイン重視です。既にある整理されたデータをいかにわかりやすく、多くの人に興味を持ってもらうかを目的としています。データビジュアリゼーションは、裏でガリガリとプログラムを走らせるのに対し、インフォグラフィックスはプログラムを走らせることはなく、意味あるデータはすでにあるものとして、それをデザイナーがillustratorなどを使ってデザインします。インフォグラフィックスはデータが変わればまた一からデザインし直さなければなりません。つまり、ある一時のデータを表現するのは得意ですが、データが変化したらもう一度作る必要があります。

 

 上記の比較からわかるように、データビジュアリゼーションとインフォグラフィックスの違いは、データが変わっても同じことができるかどうかなんだと思います(データの種類は同じ)。科学的にいうと再現性があるかどうか。その意味で、再現性のあるデータビジュアリゼーションが、科学的な研究として成立するのは不思議ではありません。データビジュアリゼーションはエンジニアメイン、インフォグラフィックスはデザイナーメインですが、どちらか一方できればいいということではなく、データについての理解からデザインまで幅広い知識と能力が必要とされるのがこの分野なのかなと思っています。

 

(追記)

記事公開後、いろいろご意見いただきました。ありがとうございます!とてもわかりやすい説明をしていただいたので、2つ紹介させていただきます。

・知りたいことがある→データビジュアリゼーション。言いたいことがある→インフォグラフィックス、という区分けかも

・データをアルゴリズムに通して見えるようにするのがData Visualization、デザイナーの脳みそを通して描くのがインフォグラフィックス