81
D3.jsSVGによる データビジュアライゼーション 2013/3/23 第6回 HTML5など勉強会 - kadoppe

D3.js と SVG によるデータビジュアライゼーション

Embed Size (px)

DESCRIPTION

2013/03/23 大阪にて開催された「第6回 HTML5など勉強会」で使用したプレゼン資料です。

Citation preview

Page 1: D3.js と SVG によるデータビジュアライゼーション

D3.jsとSVGによるデータビジュアライゼーション2013/3/23 第6回 HTML5など勉強会 - kadoppe

Page 2: D3.js と SVG によるデータビジュアライゼーション

自己紹介

名前:門脇 恒平 @kadoppe職業:ソフトウェアエンジニア所属:HTML5-West.jp コアメンバShareWis Inc. CTO

Page 3: D3.js と SVG によるデータビジュアライゼーション

スライド:http://www.slideshare.net/kadoppe

サンプルコード:https://github.com/kadoppe/html5etc-6

Page 4: D3.js と SVG によるデータビジュアライゼーション

データビジュアライゼーション?

Page 5: D3.js と SVG によるデータビジュアライゼーション

データビジュアライゼーション?

そのまんまの意味

Page 6: D3.js と SVG によるデータビジュアライゼーション

データビジュアライゼーション?

可視化

Page 7: D3.js と SVG によるデータビジュアライゼーション

データを可視化すること

Page 8: D3.js と SVG によるデータビジュアライゼーション

何のために?

Page 9: D3.js と SVG によるデータビジュアライゼーション

身近な例

Page 11: D3.js と SVG によるデータビジュアライゼーション

http://www.kotsu.city.osaka.lg.jp/general/eigyou/top.html

どんな駅・路線が存在してどう繋がっているのか複雑なデータをわかりやすく伝えている

Page 12: D3.js と SVG によるデータビジュアライゼーション

Web上の例

Page 13: D3.js と SVG によるデータビジュアライゼーション

Before

Page 14: D3.js と SVG によるデータビジュアライゼーション

Before

誰が/いつ/どれくらい貢献してるのか知りたいでもわかりづらい

Page 15: D3.js と SVG によるデータビジュアライゼーション

After

Page 16: D3.js と SVG によるデータビジュアライゼーション

After

Page 17: D3.js と SVG によるデータビジュアライゼーション

目的:わかりにくいデータをわかりやすく整形

Page 18: D3.js と SVG によるデータビジュアライゼーション

もっと勉強したい人は

Page 20: D3.js と SVG によるデータビジュアライゼーション
Page 21: D3.js と SVG によるデータビジュアライゼーション

1年前の僕:僕もWeb上でこんなの作ってみたい

Page 22: D3.js と SVG によるデータビジュアライゼーション

1年前の僕:でも難しそうどう作ればいいの?

Page 23: D3.js と SVG によるデータビジュアライゼーション

D3.jsとSVGを使えばできるよ

Page 24: D3.js と SVG によるデータビジュアライゼーション

D3.js

http://d3js.org/

Page 25: D3.js と SVG によるデータビジュアライゼーション

D3 = Data-DrivenDocument

Page 26: D3.js と SVG によるデータビジュアライゼーション

データにもとづいてHTMLドキュメントを構築するJavaScriptライブラリ

Page 27: D3.js と SVG によるデータビジュアライゼーション

特徴1:豊富なドキュメントサンプルコード

Page 30: D3.js と SVG によるデータビジュアライゼーション

特徴2:HTML要素やSVG要素を同じように扱える

Page 31: D3.js と SVG によるデータビジュアライゼーション

SVG = Scalable Vector Graphics

Page 32: D3.js と SVG によるデータビジュアライゼーション

XML形式のベクター画像フォーマット

Page 33: D3.js と SVG によるデータビジュアライゼーション

特徴1:HTML文書に埋め込める(インラインSVG)

Page 34: D3.js と SVG によるデータビジュアライゼーション

<html><head></head><body> <h1>SVG画像</h1> <svg> <circle cx=50 cy=50 r=50 /> </svg></body></html>

Page 35: D3.js と SVG によるデータビジュアライゼーション

特徴2:JavaScriptやCSSから操作できる

Page 36: D3.js と SVG によるデータビジュアライゼーション

実際に触ってみよう

Page 37: D3.js と SVG によるデータビジュアライゼーション

Twitterのデータを可視化してみる

Page 38: D3.js と SVG によるデータビジュアライゼーション

ライブコーディングその1:

ツイートリストを表示する

https://github.com/kadoppe/html5etc-6/tree/master/sample1

Page 39: D3.js と SVG によるデータビジュアライゼーション

おさらい

Page 40: D3.js と SVG によるデータビジュアライゼーション

var li = d3

d3: jQueryの$にあたるもの

Page 41: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets')

select(): ツイートリストを格納する要素を指定

Page 42: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li")

selectAll(): 個々のツイートを格納する要素を指定

Page 43: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

data(): データの配列とキーとなる属性を指定

Page 44: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter()

enter(): ここから先は追加されたデータの処理

Page 45: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter().append('li')

append(): 追加データに要素を割り当てる

Page 46: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter().append('li') .text(function(data) { return data.text; });

text(): 要素内のテキストを指定する

Page 47: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter().append('li') .text(function(data) { return data.text; });

li.exit()

exit(): ここから先は削除されたデータの処理

Page 48: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter().append('li') .text(function(data) { return data.text; });

li.exit().remove();

remove(): データに割り当てられた要素を削除

Page 49: D3.js と SVG によるデータビジュアライゼーション

var li = d3.select('#tweets').selectAll("li") .data(results, function(data) { return data.id });

li.enter().append('li') .text(function(data) { return data.text; });

li.exit().remove();

完成!

Page 50: D3.js と SVG によるデータビジュアライゼーション

次はもうすこしビジュアライゼーション()っぽいことを

Page 51: D3.js と SVG によるデータビジュアライゼーション

ライブコーディングその2:

SVGをつかうhttps://github.com/kadoppe/html5etc-6/tree/master/sample2

Page 52: D3.js と SVG によるデータビジュアライゼーション

おさらい

Page 53: D3.js と SVG によるデータビジュアライゼーション

var svg = d3.select('#tweets').selectAll("circle") .data(results, function(data) { return data.id });

SVG要素が使える

Page 54: D3.js と SVG によるデータビジュアライゼーション

var svg = d3.select('#tweets').selectAll("circle") .data(results, function(data) { return data.id });

svg.enter().append('circle') .attr('r', 10)

attr(): 要素の属性値を指定

Page 55: D3.js と SVG によるデータビジュアライゼーション

var svg = d3.select('#tweets').selectAll("circle") .data(results, function(data) { return data.id });

svg.enter().append('circle') .attr('r', 10) .attr('cx', function(data) { return data.text.length * 3 })

データの内容から属性値を計算できる

Page 56: D3.js と SVG によるデータビジュアライゼーション

var svg = d3.select('#tweets').selectAll("circle") .data(results, function(data) { return data.id });

svg.enter().append('circle') .attr('r', 10) .attr('cx', function(data) { return data.text.length * 3 }) .attr('cy', function(data) { var d = new Date(); d.setTime(Date.parse(data.created_at)); return d.getHours() * 20; });

もちろん複雑な計算も可能

Page 57: D3.js と SVG によるデータビジュアライゼーション

var svg = d3.select('#tweets').selectAll("circle") .data(results, function(data) { return data.id });

svg.enter().append('circle') .attr('r', 10) .attr('cx', function(data) { return data.text.length * 3 }) .attr('cy', function(data) { var d = new Date(); d.setTime(Date.parse(data.created_at)); return d.getHours() * 20; });

完成!

Page 58: D3.js と SVG によるデータビジュアライゼーション

まだ時間ある?

Page 59: D3.js と SVG によるデータビジュアライゼーション

ライブコーディングその3:Layoutモジュールをつかう

https://github.com/kadoppe/html5etc-6/tree/master/sample3

Page 60: D3.js と SVG によるデータビジュアライゼーション

カンタンに見栄えが良くなる

Page 61: D3.js と SVG によるデータビジュアライゼーション

Bundle Chord

Force Cluster

Page 62: D3.js と SVG によるデータビジュアライゼーション

Bundle Chord

Force Cluster

Page 63: D3.js と SVG によるデータビジュアライゼーション

おさらい

Page 64: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force()

layout.force(): forceレイアウトを使う準備

Page 65: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes)

nodes(): 表示するノードを設定

Page 66: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes) .links(links)

links(): ノード間の接続を設定

Page 67: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes) .links(links) .on("tick", tick)

.on(“tick”, function): 周期的に実行する処理を指定

Page 68: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes) .links(links) .on("tick", tick) .size([500, 500])

.size(): 表示する領域のサイズを指定

Page 69: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes) .links(links) .on("tick", tick) .size([500, 500]) .start();

.start(): ノード位置の自動計算をスタート

Page 70: D3.js と SVG によるデータビジュアライゼーション

var force = d3.layout.force() .nodes(nodes) .links(links) .on("tick", tick) .size([500, 500]) .start();

完成!

Page 71: D3.js と SVG によるデータビジュアライゼーション

まとめ

Page 72: D3.js と SVG によるデータビジュアライゼーション

データビジュアライゼーション

Page 73: D3.js と SVG によるデータビジュアライゼーション

データをわかりやすく可視化すること

Page 74: D3.js と SVG によるデータビジュアライゼーション

D3.js

Page 75: D3.js と SVG によるデータビジュアライゼーション

データにもとづいてHTMLを組み立てられる

Page 76: D3.js と SVG によるデータビジュアライゼーション

HTMLとSVGが使える

Page 77: D3.js と SVG によるデータビジュアライゼーション

カンタンに見栄え良くできる

Page 78: D3.js と SVG によるデータビジュアライゼーション

こんな僕でも・・

Page 79: D3.js と SVG によるデータビジュアライゼーション

こんなの作れるようになったよ!

http://share-wis.com

Page 80: D3.js と SVG によるデータビジュアライゼーション

Let’s Try !!

Page 81: D3.js と SVG によるデータビジュアライゼーション

おしまい