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
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
100
basic of data visualization and d3.js demonstration
muddydixon
0
150
study before deeplearning @YAPC2015
muddydixon
0
140
data visualization @html5study
muddydixon
0
110
Time Series Prediction@JubatusCasualTalk2
muddydixon
0
96
Perl for Visualization@YAPC2013
muddydixon
0
120
Time Series Analysis by JavaScript @LLMatsuri2013
muddydixon
0
140
How to create my own Hadoop MultipleInput@HadoopCodeReading8
muddydixon
0
93
BigDataAnalytics beginning by mongo-hadoop@MongoTokyo2012
muddydixon
0
70
Other Decks in Programming
See All in Programming
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
700
Security issues being discussed on Web Platforms
petamoriken
0
610
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
37k
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
190
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
Foundry Localでエージェント開発
seosoft
0
170
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
160
信頼性の目標を誰も求めてない
shubox
0
500
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
920
typoなんかねぇよ
raspython3
0
690
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
230
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
620
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Marketing to machines
jonoalderson
1
5.8k
4 Signs Your Business is Dying
shpigford
187
23k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Faster Mobile Websites
deanohume
310
32k
Agile that works and the tools we love
rasmusluckow
331
22k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
A better future with KSS
kneath
240
18k
For a Future-Friendly Web
brad_frost
183
10k
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 $