Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
d3.js demonstration
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
muddydixon
March 28, 2023
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
d3.js demonstration
muddydixon
March 28, 2023
More Decks by muddydixon
See All by muddydixon
企業と勉強会
muddydixon
0
110
basic of data visualization and d3.js demonstration
muddydixon
0
160
study before deeplearning @YAPC2015
muddydixon
0
140
data visualization @html5study
muddydixon
0
110
Time Series Prediction@JubatusCasualTalk2
muddydixon
0
97
Perl for Visualization@YAPC2013
muddydixon
0
120
Time Series Analysis by JavaScript @LLMatsuri2013
muddydixon
0
150
How to create my own Hadoop MultipleInput@HadoopCodeReading8
muddydixon
0
94
BigDataAnalytics beginning by mongo-hadoop@MongoTokyo2012
muddydixon
0
73
Other Decks in Programming
See All in Programming
mrbgem 三角測量 開発
ogom
0
240
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
150
APNsからLive Activityを開始する話
yumnumm
0
170
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
480
ジョジョの世界をXRで再現する
mofurune
0
160
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
180
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
740
Accessibility Awareness
sabderemane
1
250
RailsConf 2023
tenderlove
30
1.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
360
Why Our Code Smells
bkeepers
PRO
340
58k
We Have a Design System, Now What?
morganepeng
55
8.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Site-Speed That Sticks
csswizardry
13
1.6k
Transcript
%KTΛ ͬͯΈΑ͏ !NVEEZEJYPO (56((JSMT.FFUVQ
!NVEEZEJYPO "NVEEZEJYPO #NVEEZEJYPO ! /PEFKT 1FSM 7JTVBMJ[BUJPO 5JNF4FSJFT /FVSBM/FUXPSL ࢲJT
ΞδΣϯμ %KTͱ %KTͷྲྀΕ %KTͷαϯϓϧհ %KTϋϯζΦϯ ࢄਤ άϥϑ ંઢάϥϑ άϥϑͷՄࢹԽ
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ࠓͷࢿྉͰ͢ IUUQTHJUIVCDPNNVEEZEJYPO (56((*3-450,:0
%KTͱ
%KTͱ
None
ΩϥΩϥԵ
%KTͱ %BUB%SJWFO%PDVNFOUT JOMJOF47( IUUQTEFWFMPQFSNP[JMMBPSHKBEPDT 47(@*O@)5.-@*OUSPEVDUJPO ෳ߹ϥΠϒϥϦ 47(ૢ࡞ ॲཧ ՄࢹԽϢʔςΟϦςΟ
%KTͱd%%%d < > 図形化
%KTͱd%%%d < > <
> 正規化
%KTͱd%%%d < > <
> 正規化 図形化
%KTͱd%%%d < > <
> 正規化 図形化 %BUB%SJWFO %PDVNFOUT
%KTͱd%%%d 4FQBM-FOHUI 4FQBM8JEUI 1FUBM-FOHUI 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB
%KTͱd%%%d 4FQBM-FOHUI 4FQBM8JEUI 1FUBM-FOHUI 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB
%KTͱd%%%d 4FQBM-FOHUI 4FQBM8JEUI 1FUBM-FOHUI 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB %BUB%SJWFO %PDVNFOUT
%KTͱd47(d 47(4DBMBCMF7FDUPS(SBQIJDT ! ! ! ! ! )5.-ͰʮJOMJOF47(ʯ͕ར༻Մೳʹʂ IUNMʹTWH YNM
ΛຒΊࠐΜͰར༻Մೳʂ http://www.slideshare.net/k
%KTͱd47(d IUNM IFBEུIFBE CPEZ TWHXJEUIIFJHIU DJSDMFDYDZ SpMMSFE TWH CPEZ IUNM
%KTͱd47(d IUNM IFBEུIFBE CPEZ TWHXJEUIIFJHIU DJSDMFDYDZ SpMMSFE TWH CPEZ IUNM
%KTͱd47(d IUNM IFBEུIFBE CPEZ TWHXJEUIIFJHIU DJSDMFDYDZ SpMMSFE TWH CPEZ IUNM
JOMJOF47( ಥવͷؙ
%KTͱd47(d 9.-Ͱ͔͚Δʂ Ξχϝʔγϣϯʹڧ͍ʂ *OTQFDUPSͰݟΒΕΔʂ ֦େॖখʹڧ͍ʂ ରʹ 8FC(-Ͱ%ʹʂ ฏ໘ͷඳըΛߴʹߦ͑Δʂ ໘ੵ͕ܾ·͍ͬͯΕҰఆͷύϑΥʔϚϯε ը૾ϑΥʔϚοτͰอଘͰ͖Δʂ
http://dev.opera.com/articl
%KTͷྲྀΕ
%KTͷྲྀΕ σʔλ࡞Δ 47(ͷ४උΛ͢Δ %0.ͱσʔλΛൺֱ͢Δ Γͳ͍෦Λσʔλ͔Β%0.Λੜ BUUSΛ͍͡Δ
αϯϓϧͰઆ໌
%KTͷྲྀΕ)5.- جຊ͜ΕͰͣͬͱ͍͖·͢ <!doctype html> <html> <head> <meta charset="utf-8"> <title>D3.js on
GTUG Girls Tokyo</title> <style> .axis path, .axis line { fill: none; stroke: grey; } </style> </head> <body> <script type="text/javascript" src="//code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/ d3.min.js"></script> <script type="text/javascript" src="./src/main.js"></script> </body> </html>
%KTͷྲྀΕ8FC 8FC্͓͛ͯ͘ͱ"KBYͱ͔͑ͯศརͰ͢ python -m http.server 5000 python -m SimpleHTTPServer 5000
plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root => ".")->to_app' ruby -run -e httpd -- --port=5000 . ruby -rwebrick -e 'WEBrick::HTTPServer.new(:Port => 5000, :DocumentRoot => ".").start' http://blog.kamipo.net/entry/2013/02/20/122225
%KTͷྲྀΕσʔλ σʔλΛ࡞Γ·͢ ͜͏͍͏ͷ࡞͓ͬͯ͘ͱศར // データ生成ユーティリティ var dataGenerator = function(len, gen){
var array = [], i = 0; for(i = 0; i < len; i++){ array.push(gen ? gen(i) : i); } return array; }; // データ生成 var data = dataGenerator(100, function(i){ return { id: i, name: "name "+ i, x: 0|Math.random() * width, y: 0|Math.random() * height }; });
%KTͷྲྀΕ47( TWH ࡞Γ // var svg = d3.select("body").append("svg") .attr({width:
WIDTH, height: HEIGHT}); var main = svg.append("g") .attr({ width: width, height: height, transform: “translate("+margin+","+margin+")" }); 初出 * (selection) d3.select * (selection) selection.append * (selection) selection.attr
%KTͷྲྀΕσʔλͱ%0.ͷඥ͚ σʔλͷඥ͚ var circle = // 現状の取得 main.selectAll("g.circle") // データのヒモ付
.data(data) // データ > 現状(DOM)の部分を取得 .enter() // "g"要素を追加し、classをセット .append("g").attr({"class": "circle"}); 初出 * (selection) selection.selectAll * (selection) selection.data * (selection) selection.enter
%KTͷྲྀΕσʔλ͔ΒυΩϡϝϯτ σʔλ͔Βͷཁૉଐੑ circle.append("circle").attr({ r: 10, cx: function(d){ return d.x; },
cy: function(d){ return d.y; }, fill: "red" });
None
%KTͷྲྀΕDPMPS ৭Λऔಘͯ͠ΈΑ͏ var color = d3.scale.category20(); circle.append("circle").attr({ r: 10, cx:
function(d){ return d.x; }, cy: function(d){ return d.y; }, fill: function(d, i){ return color(i); } }); 初出 * (scale) d3.scale.category20
None
%KTͷྲྀΕ σʔλ࡞Δ 47(ͷ४උΛ͢Δ %0.ͱσʔλΛൺֱ͢Δ Γͳ͍෦Λσʔλ͔Β%0.Λੜ BUUSΛ͍͡Δ
4FMFDUJPO ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS
4FMFDUJPO ྫ͑ ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS ଐੑɾελΠϧɾςΩ ετͷมߋͳͲΛߦ͏ ৽نʹ%0.ΛՃ
͠ɺಉ࣌ʹଐੑɾελ ΠϧɾςΩετΛηο τ͢Δ طଘͷ%0.Λআ͠ ͨΓɺಁ໌Λ্͛ͨ ΓΛߦ͏
%KTͰάϥϑ
άϥϑ ৽͍͠ ETDBMFPSEJOBM TDBMFSBOHF#BOET TDBMFEPNBJO ETDBMFMJOFBS TDBMFSBOHF EFYUFOUENJOENBY ETWHBYJT TFMFDUJPODBMM
άϥϑ σʔλ࡞ // データ生成 var data = dataGenerator(10, function(i){ return
{ id: i, name: "name "+ i, // height よりも大きい! y: 0|Math.random() * 1000 }; });
άϥϑ σʔλཧ ΞΫηαΛࢦఆ͢Δ͜ͱͰɺྻ͔Βॊೈ ʹ࠷େɾ࠷খɾൣғΛऔΓग़ͤΔ ଞʹฏۉͱ͔தԝͳͲՄೳ // データの調査 var min =
d3.min(data, function(d){ return d.y;}), max = d3.max(data, function(d){ return d.y;}), extent = d3.extent(data, function(d){ return d.y;}); アクセサ 初出 * (number) d3.min / d3.max * ([number, number]) d3.extent
άϥϑ εέʔϧ࡞ॏཁʂTDBMFΛ੍͢͜ͱඞਢ var x = d3.scale.ordinal() .domain(data.map(function(d){ return d.id; }))
.rangeBands([0, width], 0.2), y = d3.scale.linear() .domain([0, max]) .range([height, 0]); // [0, height]じゃない! EPNBJO ೖྗ SBOHF ग़ྗ ͷม RVBOUJUBUJWFPSEJOBMͷछྨ RVBOUJUBUJWFʮൣғൣғʯ PSEJOBMʮ*%ൣғʯ ൣғใͷఏڙ 初出 * (scale) d3.scale.linear / d3.scale.ordinal
άϥϑ TDBMFͷSBOHF͕< IFJHIU>Ͱͳ͘ <IFJHIU >ͩͬͨཧ༝ ϒϥβ্Ͱࠨ্͕ ӈʹߦ͚
Y ɺԼʹߦ͚ Z େ͖͍΄Ͳʮߴ͍ʯʮখ͍͞ʯ ߴ͞ͷ΄͏ΛௐʮIFJHIUߴ͞ʯ
άϥϑ ཁૉͷඳըͷ४උ var bar = // 現状の取得 main.selectAll("g.bar") // データのヒモ付
.data(data) // データ > 現状(DOM)の部分を取得 .enter() // "g"要素を追加し、classをセット .append("g") .attr({ "class": "bar", transform: function(d){ // コツ: 位置合わせをやっておく return “translate("+x(d.id)+","+height+")"; } });
άϥϑ ཁૉͷඳըͷ४උ var bar = // 現状の取得 main.selectAll("g.bar") // データのヒモ付
.data(data) // データ > 現状(DOM)の部分を取得 .enter() // "g"要素を追加し、classをセット .append("g") .attr({ "class": "bar", transform: function(d){ // コツ: 位置合わせをやっておく return “translate("+x(d.id)+","+height+")"; } }); 描画上の一番下に合わせる height
άϥϑ ཁૉͷඳը bar.append("rect").attr({ width: x.rangeBand(), height: function(d){ return height -
y(d.y); }, y: function(d){ return y(d.y) - height; }, fill: "red" }); // ラベルも付けておきます bar.append("text").text(function(d){ return d.y;});
None
άϥϑ ࣠ͷ࡞ var xaxis = main.append("g").call(d3.svg.axis().scale(x)).attr({ "class": "axis", transform: "translate(0,"+height+")"
}); var yaxis = main.append(“g").call(d3.svg.axis().scale(y).orient("left")) .attr({ "class": "axis" }); 初出 * (svg) d3.svg.axis * (selection) selection.call
None
ؓٳ47(ཁૉ
47(Ͱ͑Δλά TWH H EFGT TZNCPM VTF QBUI MJOF SFDU DJSDMF
FMMJQTF QPMZMJOF QPMZHPO ! ͋ͱϑΟϧλʔपΓ͕ͨ͘͞Μ͋Γ·͕͢ ΄ͱΜͲ͏ػձ͋Γ·ͤΜ
47( ( 47( ͜ͷλάແ͍ͱ࢝·Γ·ͤΜʂඞͣ࡞Γ·͢ ( ࢠཁૉΛάϧʔϓԽ͢Δ͜ͱ͕Ͱ͖·͢ɻ ྫ͑ʮͱϥϕϧʯͷҐஔΛಉ࣌ʹม͑Δʹ (ཁૉͷҐஔΛ੍ޚ͢ΕҰͰߦ͑·͢͠ɺΞ χϝʔγϣϯͷ࣌ख͕ؒݮΓ·͢ ͱʹXJEUIIFJHIUUSBOTGPSNଐੑΛऔΓ·͢
1"5) ͯ͢ͷඳըཁૉ HSBQIJDTFMFNFOU ͜ΕͷBMJBT ͩͱߟ͑Δ͜ͱ͕Ͱ͖·͢ EଐੑͰσʔλύεจࣈྻΛ͢͜ͱͰඳըͤ͞·͢ FH.--[ ͔Β։࢝
. ͠ɺ ʹҠಈ - ɺ ʹҠಈͯ͠ɺด࿏Λ࡞Δ [ pMMଐੑด࿏ͷதΛࢦఆͨ͠৭ͰృΓͭͿ͢ TUSPLFଐੑύεΛࢦఆͨ͠৭Ͱඳ͘ TUSPLFXJEUIଐੑύεͷઢͷଠ͞Λࢦఆ͢Δ
$*3$-& 3&$5 -*/& &--*14& DJSDMFཁૉ SଐੑܘΛࢦఆ DYDZଐੑத৺ͷYZ࠲ඪΛࢦఆ SFDUཁૉ XJEUIIFJHIUଐੑۣܗͷ෯ߴ͞Λࢦఆ YZଐੑۣܗͷࠨ্ͷҐஔΛࢦఆ
SYSZଐੑؙ֯ͷପԁܘΛࢦఆ MJOFཁૉ YYZZଐੑͷ࠲ඪΛࢦఆ FMMJQTFཁૉ DYDZଐੑପԁͷத৺Ґஔͷ࠲ඪΛࢦఆ SYSZଐੑପԁͷܘΛࢦఆ
5SBOTGPSNଐੑ USBOTGPSNଐੑʹจࣈྻͰԼهΛࢦఆ͢Δ ͜ͱ͕Ͱ͖·͢ NBUSJYมܗߦྻ ཁૉ Λࢦఆ USBOTMBUFฒߦҠಈFHUSBOTGPSN 9 :
SPUBUFճసFHSPUBUF TLFX9TLFX:ࣼ ฏߦ࢛ลܗΈ͍ͨʹ௵ ͢ FHTLFX9 TDBMF֦େॖখFHTDBMF TDBMF
%KTͰંઢάϥϑ
ંઢάϥϑ ৽͍͠ EUJNFTDBMF TFMFDUJPOEBUVN ETWHMJOF
σʔλ࡞ // データ生成 var data = dataGenerator(10, function(i){ var now
= Date.now(); return { id: i, name: "name "+ i, x: new Date(now + 60000 * i), // 一分おき y: 0|Math.random() * 1000 }; }); ંઢάϥϑ
εέʔϧ࡞ // スケールの生成 var x = d3.time.scale() .domain(d3.extent(data, function(d){ return
d.x; })) .range([0, width]), y = d3.scale.linear().domain([0, max]).range([height, 0]); ࣌ؒʹಛԽͨ͠εέʔϧ ࣗಈͰ࣌ؒͷ۠ؒΛௐͯ͘͠ΕΔͨΊɺBYJTʹར༻͠ ͨ࣌ʹศར ɺ࢛ظɺ݄ɺɺ࣌ɺɺͳͲॊೈʂ 初出 * (scale) d3.time.scale ંઢάϥϑ
ཁૉඳըϢʔςΟϦςΟ var line = d3.svg.line() .x(function(d){ return x(d.x); }) .y(function(d){
return y(d.y); }); // PATHDATA=line([{x: X, y:Y},{}]) 配列を受けて、PathDataの文字列を返す ྨࣅͷTWHͱͯ͠BSFB BSD EJBHPOBMͳ Ͳ͕͋Δ 初出 * (function) d3.svg.line ંઢάϥϑ
ඳը var serie = // 現状の取得 main.append("path") // データのヒモ付 .datum(data)
.attr({ d: line, fill: "none", stroke: color(0) }); 初出 * (selection) selection.datum path要素に対して、配列を紐付ける ંઢάϥϑ
None
σʔλͷ४උ ΦϒδΣΫτͷྻͷྻ // データ生成 var series = dataGenerator(3, function(i){ return
{ name: "series " + i, data: dataGenerator(10, function(j){ var now = Date.now(); return { id: j, name: "name "+ j, x: new Date(now + 60000 * j), // 一分おき y: 0|Math.random() * 1000 }; }) }; }); ෳͷંઢάϥϑ
σʔλͷൣғΛऔಘ ճNJONBYΛ͏ var maxY = d3.max(series, function(serie){ return d3.max(serie.data, function(d){
return d.y;}); }); var minX = d3.min(series, function(serie){ return d3.min(serie.data, function(d){ return d.x;}); }), maxX = d3.max(series, function(serie){ return d3.max(serie.data, function(d){ return d.x;}); }); ෳͷંઢάϥϑ
ඥ͚ͯඳը var serie = // 現状の取得 main.selectAll("g.serie") // データのヒモ付 .data(series)
.enter() .append("g").attr({"class": "serie"}); ! serie.append("path").attr({ d: function(d){ return line(d.data); }, fill: "none", stroke: function(d){ return color(d.name); } }); ෳͷંઢάϥϑ
None
0OFNPSFUIJOH ֤ϙΠϯτʹυοτͱΛ var serie = // 現状の取得 main.selectAll("g.serie") // データのヒモ付
.data(series) .enter() .append("g").attr({ "class": "serie", fill: function(d){ return color(d.name); } }); 子要素すべてのfillを指定
ඥ͚ͯඳը var point = serie.selectAll("g.point") .data(function(d){ return d.data;}).enter() .append("g").attr({ "class":
"point", transform: function(d){ return "translate("+x(d.x)+","+y(d.y)+")"; } }); point.append("circle").attr({r: 5}); point.append("text").text(function(d){ return d.y; }).attr({dy: -8}); 0OFNPSFUIJOH
None
"OJNBUJPO
TFMFDUJPOUSBOTJUJPO ʹ͍ͭͮͯBUUS Λࢦఆ͢Δ͜ͱͰݱࡏࢦఆͨ͠BUUSͷ Ξχϝʔγϣϯ͕ߦΘΕ·͢ FH ETFMFDU lDJSDMFz USBOTJUJPO BUU S
\pMMlHSFFOz^
"OJNBUJPO ߋ৽ॲཧؔ લ var updateLine = function(){ // スケールのドメイン更新 x.domain(d3.extent(data,
function(d){ return d.x; })); var max = d3.max(data, function(d){ return d.y;}); y.domain([0, max]); ! // 折線の変形アニメーション serie.transition() .attr({ d: line }); ! これでアニメーションを利用できる!
"OJNBUJPO ߋ৽ॲཧؔ த൫ // 新たにデータが増えたのでselection撮り直し var point = main.selectAll("g.point").data(data); //
データ追加分の処理 var newpoint = point.enter().append(“g") .attr({"class": "point", fill: color(0), transform: function(d){ return "translate("+x(d.x)+","+y(d.y)+")"; } }); newpoint.append("circle").attr({ r: 5 }); newpoint.append("text").text(function(d){return d.y;}).attr({dy:-8}); // 既存データのアニメーション point.transition().attr({ transform: function(d){ return "translate("+x(d.x)+","+y(d.y)+")"; } });
"OJNBUJPO ߋ৽ॲཧؔ ޙ // 軸の更新 xaxis.call(d3.svg.axis().scale(x)); yaxis.call(d3.svg.axis().scale(y).orient("left")); };
None
-BZPVU
-BZPVUͱ ࠶ར༻ՄೳͳΞϧΰϦζϜͷմ جຊతʹʮݩσʔλʯ͔Βʮ͋ΔՄࢹԽ දݱʹඞཁͳσʔλʯͷมϓϩάϥϜ ЋͰΞχϝʔγϣϯΠϕϯτͳͲ͕͍ͭ ͯ͘Δ
None
ΩϥΩϥԵ
-BZPVU γϟϨΦπͳՄࢹԽΛ࡞Δʹɺͨ͘͞Μ ͷม͕ඞཁͰ͢ ྫ͑ɺؔάϥϑΛ࡞͢ΔʹɺʮͲ ͷͱͲͷΛͭͳ͙͔ʯʮͷฒͼͲ ͏͢Δ͔ʯʮͷҐஔ࠲ඪʯʮΛ݁Ϳ ހͷۂ͕Γ۩߹Ͳ͏͢Δ͔ʯͳͲ ͜ΕΒͷܭࢉΛҰ͔Β࣮͠ͳ͍ͰࡁΉΑ ͏ʹ͢ΔͨΊʹ-BZPVU͕ଘࡏ͠·͢
-BZPVU ࠓ༨ྗ͕͋Δਓ ࣮ʹࣗ৴͕͋Δਓ αϙʔτ͠·͢
)BOET0O
࣌ؒ·ͰϋϯζΦϯ Ξχϝʔγϣϯ·ͰҰखݩͰಈ͔ͯ͠Έͯ ͍ͩ͘͞ ࢼ͍ͨ͜͠ͱ͕͋Δਓ࣮Ξγετ͠ ·͢ ࢼ͍ͨ͜͠ͱͳ͍ਓ૬ஊ͍ͯͩ͘͠͞ Ξγετ͠·͢
ؾʹͳΔσʔλ
౦ژϝτϩΦʔϓϯσʔλ׆༻ίϯςετ http://tokyometro10th.jp/future/opendata/
ҪݝΦʔϓϯσʔλϥΠϒϥϦ http://www.pref.fukui.lg.jp/doc/toukei-jouhou/opendata/
ͦͷଞͷࢿྉ
47(ʹ͍ͭͯͪ͜ΒΛ IUUQXXXTMJEFTIBSFOFULBEPQQFJOMJOFTWH IUUQXXXTMJEFTIBSFOFUTTVTFSEDTWH NBOJBYDTTOJUFBGUFSEBSLTWHNBUTVEB https://github.com/muddydixon/html5conference
ՄࢹԽʹ͍ͭͯͪ͜ΒΛ
σʔλՄࢹԽͷϚϯτϥ Overview First, Zoom and Filter, Then Details-on-Demand Overview First,
Zoom and Filter, Then Details-on-Demand Overview First, Zoom and Filter, Then Details-on-Demand Ben Shneiderman $