実践! d3.jsで可視化入門

33
実践! D3.jsで可視化入門 データ可視化 勉強会 佐藤 建太 (@bicycle1885)

Upload: kenta-sato

Post on 25-May-2015

2.397 views

Category:

Documents


3 download

DESCRIPTION

データ可視化 勉強会 発表資料 http://www.zusaar.com/event/3927003 デモ資料 https://github.com/bicycle1885/sochi-visualization

TRANSCRIPT

Page 1: 実践! D3.jsで可視化入門

実践! D3.jsで可視化入門データ可視化 勉強会

佐藤 建太 (@bicycle1885)

Page 2: 実践! D3.jsで可視化入門

自己紹介• 佐藤 建太

• Twitter: @bicycle1885

• 東京大学 農学部

• バイオインフォマティクスが専門

• Julia langがマイブーム

Page 3: 実践! D3.jsで可視化入門

経緯

Page 4: 実践! D3.jsで可視化入門
Page 5: 実践! D3.jsで可視化入門
Page 6: 実践! D3.jsで可視化入門

その後、

Page 7: 実践! D3.jsで可視化入門
Page 8: 実践! D3.jsで可視化入門

ということで、 可視化をしました。

Page 9: 実践! D3.jsで可視化入門

可視化って色々できる

タンパク質

交響曲

コミットログ

遺伝的変異と病気の関係

Page 10: 実践! D3.jsで可視化入門

今回は、

Page 11: 実践! D3.jsで可視化入門

The Sochi 2014 Winter Olympics

Page 12: 実践! D3.jsで可視化入門

Demo

Page 13: 実践! D3.jsで可視化入門

ツールとサービス

Page 14: 実践! D3.jsで可視化入門

使ったサービス&ツール• データ集め

• kimono • ウェブサイトをAPI化してくれるサービス

• ソチ五輪のデータAPIを提供している

• これがないと死んでいた

• Phoca Flag Icons • 国旗の画像をPublic Domainで提供

• Natural Earth • 地図データ

• 国名・都市名などのアノテーション付き

Page 15: 実践! D3.jsで可視化入門

使ったサービス&ツール• 前処理

• jq • JSONの前処理用コマンドラインツール • kimonoのレスポンスがJSON形式だったので、jqを使って都合のいいように加工

• pandas • Pythonのデータ分析等ができるライブラリ • RDBのような表形式のデータの読み書き・選択・結合に便利

• 国のIDの対応をつけたりなど、名寄せ的な作業に使用 • IPythonからインタラクティブに使える

Page 16: 実践! D3.jsで可視化入門

使ったサービス&ツール• 前処理

• GDAL • 地図データのフォーマット変換ツール

• .shp => .json • mapshaper

• 地図データの変換や単純化

• .json => topojson • 他、perlのスクリプトやワンライナーなど

Page 17: 実践! D3.jsで可視化入門

使ったサービス&ツール• 可視化

• d3.js • Mike Bostock氏謹製の可視化ライブラリ

• topojson • Mike Bostock氏謹製のtopojson形式の変換ツールであり読み込みツール

• queue • Mike Bostock氏謹製の非同期処理ライブラリ • 複数ファイルを非同期に読み込んで、1つのコールバック関数で受ける事ができる

Page 18: 実践! D3.jsで可視化入門

可視化の手順

Page 19: 実践! D3.jsで可視化入門

1. ラフに全体像を紙に書く

Page 20: 実践! D3.jsで可視化入門

2. 残りの部分を可視化する

Page 21: 実践! D3.jsで可視化入門

http://www.reddit.com/r/pics/comments/d3zhx/how_to_draw_an_owl/

Page 22: 実践! D3.jsで可視化入門

Just kidding :)

Page 23: 実践! D3.jsで可視化入門

1. 可視化したいデータを読み込んで 配列にし、要素に結びつける

{athlete1}

配列

{athlete2}

{athleteN}

{athlete2}

selection .data(array) .enter()

circle1circle2circle3

circleN

SVGの要素

JSONCSV

XML

地図データのような複雑なデータも!国ごとの配列にしてpathに結びつける事ができる

例) アスリートのオブジェクトの配列をcircle要素に結びつける

The Grammar of Graphicsではgeomに対応

Page 24: 実践! D3.jsで可視化入門

2. スケール (scale) を設定する

一つひとつのデータについて、scaleを使ってマッピングをする

{datum}scale

特徴d3.scale.domain()!メソッドに対応

d3.scale.range()!メソッドに対応

例) 一人のアスリートを、scaleAgeで年齢に対応づける

The Grammar of Graphicsでもscaleという概念がある

Page 25: 実践! D3.jsで可視化入門

3. 座標系の設定を設定して画面に映す• svg要素は、それぞれ座標系を持っているためデータをscaleで写した特徴に座標系を与える必要がある

• この座標系が、ブラウザでの位置に対応する

• transform属性で座標系を変換できる

RGBやHSLなどの!色の座標系をとることもある

scale

y

x

The Grammar of Graphicsではcoordに対応

Page 26: 実践! D3.jsで可視化入門

コツ

Page 27: 実践! D3.jsで可視化入門

レイヤー化• The Grammar of Graphicsにならってレイヤー化

• javascriptの変数名もレイヤーに対応させるといいかも

• 軸のレイヤー axesLayer

• ラベルのレイヤー labelsLayer

• 地図のレイヤー mapLayer

• アスリートのレイヤー athletesLayer

Page 28: 実践! D3.jsで可視化入門

d3.jsでのレイヤー化の利点• 要素が混ざらないので操作対象を選択しやすい

• 軸レイヤーと同じtickクラスを別のレイヤーで使っても大丈夫

• 要素の上下関係が分かりやすい

• svgに直接要素を描画していくと、望んでない要素が手前に来たりする

• 最初に必要なレイヤーをすべて作り、その上に要素を載せていくことで表示の上下関係がコントロールしやすい

• 座標系の分離ができる

• g要素でレイヤーをつくることで、それぞれのレイヤーで座標系が分離できる

• レイヤー毎にCSSの名前を分けられる

• Sass/Lessとかとも相性が良い

Page 29: 実践! D3.jsで可視化入門

レイヤー化されてる様子

クラス名 background, map, country-name, labels, athletes, axes がそれぞれレイヤー

Page 30: 実践! D3.jsで可視化入門

色の選択ColorHexa

色の組み合わせを選べる 色の微調整ができるHSL Color Picker

Page 31: 実践! D3.jsで可視化入門

GET /complicated_question.html HTTP/1.1 Host: @bicycle1885

HTTP/1.1 301 Moved Permanently Location: @muddydixon

Page 32: 実践! D3.jsで可視化入門

まとめ• 配列の要素をSVGの要素へ結びつける

• scaleを設定して個々のデータから特徴空間へ写す

• 特徴空間の点をブラウザ上の座標系へ写す

• レイヤー化するとjavascriptもCSSも見通しよい

• RGBで色の調節は厳しいが、HSLならやりやすい

Page 33: 実践! D3.jsで可視化入門

参考資料• julia http://julialang.org/ • jq http://stedolan.github.io/jq/ • pandas http://pandas.pydata.org/ • GDAL http://www.gdal.org/ • mapshaper http://www.mapshaper.org/ • mbostock/d3.js http://d3js.org • mbostock/topojson https://github.com/mbostock/topojson • mbostock/queue https://github.com/mbostock/queue • SVG 1.1 Coordinate Systems, Transformations and Units http://www.w3.org/TR/SVG/coords.html • Interactive Map with d3.js http://www.tnoda.com/blog/2013-12-07 • Interactive Data Visualization for the Web (O’Reilly) http://chimera.labs.oreilly.com/books/1230000000345 • A Layered Grammar of Graphics http://www.stat.columbia.edu/~gelman/bayescomputation/Wickham2010.pdf • VIZBI: D3 Workshop http://bost.ocks.org/mike/d3/workshop • The (un)official Sochi Olympics API http://www.kimonolabs.com/sochi/explorer • Natural Earth http://www.naturalearthdata.com/ • Phoca Flag Icons - Flags of the World http://www.phoca.cz/flag-icons • ColorHexa http://www.colorhexa.com/ • HSL Color Picker http://hslpicker.com/

オススメ!

オススメ!

オススメ!オススメ!