Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
data visualization @html5study
Search
muddydixon
March 28, 2023
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
data visualization @html5study
muddydixon
March 28, 2023
More Decks by muddydixon
See All by muddydixon
企業と勉強会
muddydixon
0
99
basic of data visualization and d3.js demonstration
muddydixon
0
150
study before deeplearning @YAPC2015
muddydixon
0
140
d3.js demonstration
muddydixon
0
100
Time Series Prediction@JubatusCasualTalk2
muddydixon
0
92
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
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
170
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
210
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
300
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
310
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
380
5分で問診!Composer セキュリティ健康診断
codmoninc
0
790
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
880
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Google's AI Overviews - The New Search
badams
0
1.1k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building the Perfect Custom Keyboard
takai
2
830
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
620
Ethics towards AI in product and experience design
skipperchong
2
330
Chasing Engaging Ingredients in Design
codingconduct
0
250
Transcript
σʔλՄࢹԽ ʹ͍ͭͯ )5.-ͱ͔ษڧձ !NVEEZEJYPO
!NVEEZEJYPO "NVEEZEJYPO #NVEEZEJYPO ! /PEFKT 1FSM 7JTVBMJ[BUJPO 5JNF4FSJFT /FVSBM/FUXPSL ࢲJT
ΞδΣϯμ σʔλՄࢹԽͷత σʔλՄࢹԽͱ σʔλՄࢹԽͷཧ۶ 8FCͰͷσʔλՄࢹԽͷ͍͍ͱ͜Ζ %KTͱ
ՄࢹԽͷత
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ՄࢹԽͷత ͑ͯͲ͏͢Δʁ
ՄࢹԽͷత ☓ՄࢹԽͷͨΊͷՄࢹԽ ̋తୡͷͨΊͷՄࢹԽ
ՄࢹԽͷత ☓ʮͲ͏ՄࢹԽ͢Δ͔ʁʯ ̋ʮԿΛՄࢹԽ͢Δ͔ʁʯ ˕ʮͳΜͷͨΊʹՄࢹԽ͢Δ͔ʁʯ
ՄࢹԽͷత ϝτϦΫεͷࢹ ྫ ϞχλϦϯάπʔϧ τϨϯυͷѲ ྫ גࣜνϟʔτ ؔੑͷѲ ྫ ιʔγϟϧάϥϑ
ଐੑͷੳ ྫ ސ٬ଐੑͷׂ߹ചΕےδϟϯϧͷׂ߹
ՄࢹԽͷత ࣄ࣮Λൃ۷Ͱ͖ͯͦ͜ͷՄࢹԽ ࣄ࣮Λ׆༻Ͱ͖ͯͦ͜ͷՄࢹԽ ! վળߦҝͷଅਐͷͨΊͷՄࢹԽ Ϗδωεɺ࣏ɺՈܭͳͲ
తΛ્͢ΔՄࢹԽ
μϝͳՄࢹԽ ޮత͡Όͳ͍ ໌֬͡Όͳ͍ ! ˞ʮιΛ͘ʯʮαϯϓϧʹ͕͋Δʯ ͱ͔ͪΐͬͱ͓͍͓͖ͯ·͢
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
໌֬͡Όͳ͍
ޮత͡Όͳ͍
͍Ζ͍Ζ
ͬͱཉ͍͠ਓͪ͜Βʹ IUUQXUGWJ[OFU
σʔλՄࢹԽͱ
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ͭ·Γ % ใΛ͑ͦͼΕ͍ͯΔՄࢹԽ % ໌֬Ͱͳ͍ՄࢹԽ % ޮతͰͳ͍ՄࢹԽ ! ্هʮՄࢹԽʯͰ͋Γ·ͤΜ
ՄࢹԽͷఆٛʹଇΔͱ ใ͕ࢹ֮తͳදݱʹஔ͖͑ΒΕ͍ͯΔ ใ͕໌֬ʹ͑ΒΕ͍ͯΔ ใ͕ޮతʹ͑ΒΕ͍ͯΔ & ' ( )
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ͷେখɹɹ▶ߴ͞ͷେখ ͷେখɹɹ▶໘ੵͷେখ ্ঢɹɹ▶ӈ্͕Γͷ͖ Լ߱ɹɹ▶ӈԼ͕Γͷ͖ ಉ͡ΧςΰϦ▶ಉ͡৭ ؔੑ
▶ີू
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ܦݧతɾೝతͳ طଘࣝΛޮతʹ ར༻ͨ͠ཧղͷଅਐ & ' ( )
ͳͥՄࢹԽ͢ΔͱΑ͍͔ ͙͔͢ΔJTਖ਼ٛ & ' ( )
ೝػೳɾܦݧΛϑϧʹ͏ 4FQBM-FOHU 4FQBM8JEU 1FUBM-FOHU 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB ΈΜͳ͍͖ͩ͢JSJT
͔͜͜Βͳʹ͔ Θ͔ΔΘ͚Ͱ ͳ͍Ͱ͢ΑͶʁ
౷ܭྔͰදݱ 4FQBM -FOHUI 4FQBM 8JEUI 1FUBM -FOHUI 1FUBM 8JEUI .JO
TU 2V .FEJBO .FBO SE 2V .BY
͜ΕͳΒ ͳΜͱ͔
ਤܗͷܦݧɾೝೳྗΛར༻
ਤܗͷܦݧɾೝೳྗΛར༻ w ͷ෯͕͍ w தԝ্͕ʹภ͍ͬͯΔ w େ͖ͭ͘ͷๆ͕͋Δ w தԝ͕एׯɺ্ ʹภΓ
w ๆ͕ͭɾɾɾʁ w ۉʹ w தԝ͕͓͓Α ͦத৺ w ଞͷଐੑͱൺֱͯ͠ ͷ෯͕খ͍͞ w ֎Ε͕ͪΒ΄Β
ʮೝʯ͕ʮѲʯΛՃ 4FQBM -FOHUI 4FQBM 8JEUI 1FUBM -FOHUI 1FUBM 8JEUI .JO
TU 2V .FEJBO .FBO SE 2V .BY
ͦͷଞʹ ശͻ͛ਤͷΘΓʹ ώετάϥϜ ώετάϥϜΛछผຖʹ දݱ
ՄࢹԽͷཧ
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB
ՄࢹԽͰҙࣝ͢Δ֓೦ σʔλ σʔλม ࢹ֮ม ࢹ֮ه߸ ՄࢹԽ σʔληοτ ༷ʑͳϑΟʔϧυͷ͔ΒͳΔ ϨίʔυΛෳؚΉσʔλ܈ มநग़ɾॲཧɾ
ईԽॲɾཧ౷ܭॲཧ͕ࡁΜͩͷ ՄࢹԽରͱ͢ΔϑΟʔϧυΛ ؚΉσʔλɻͻͱͭͻͱ͕ͭҙຯΛ ࣋ͬͨ୯Ґ ྫɿ42-ͷߦ ϑΟʔϧυͷͦͷͷ ϝδϟʔ ΧςΰϦม σΟ ϝϯδϣϯ ɻͻͱͭͻͱ͕ͭࢹ֮ม ʹஔ͞ΕΔ ࢹ֮දݱͻͱͭͻͱͭΛࢦ͢ ҐஔαΠζɺ৭ɺ͖ɺڧ ಁ໌ ɾ࠼ɾ໌ ɺςΫενϟͳͲ ࢹ֮มΛूͤͨ͞ه߸ ԁɺۣܗɺހɺཱମͳͲ σʔληοτͷσʔλʹରԠ͢Δ ه߸ͷू߹ʹΑΔՄࢹԽ ରԠ ରԠ ରԠ
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB σʔλ ࢹ֮ه߸
σʔληοτͱՄࢹԽ ΨΫย෯ Ֆห෯ 4QFDJFT TFUPTB
TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB WJSHJOJDB σʔλม : ࢹ֮ม 9 ৭
ՄࢹԽͷ֓೦ ཧ۶্ 4FQBM-FOHU I 4FQBM8JEUI 1FUBM-FOHUI 1FUBM8JEUI 4QFDJFT
TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS ย Ֆห छผ TFUPTB ย ൺྫई Ֆห ൺྫई छผ TFUPTB ໊ٛई ย ൺྫई Ґஔ Ֆห ൺྫई Ґஔ छผ ໊ٛई ৭ 4FQBM-FOHUI 1FUBM-FOHUI 4QFDJFT TFUPTB TFUPTB TFUPTB TFUPTB TFUPTB WFSTJDPMPS WFSTJDPMPS WFSTJDPMPS ย Ֆห छผ σʔληοτ σʔληοτ มநग़ σʔλ σʔλม ࢹ֮ม ࢹ֮ه߸ ՄࢹԽ ରԠ ରԠ ରԠ
σʔλมࢹ֮ม ย෯ɿY࠲ඪɺՖห෯ɿZ࠲ඪɺछผɿ৭ ͱͭͷσʔλมɿࢹ֮มΛରԠ
σʔλมࢹ֮ม ࢄਤͩͱͭ͘Β͍ͷมදݱՄೳ ˞ͨͩ͠ɺTFUPTBͷಁ໌͕ߴ͘ࢹೝੑ͕͍ͷͰɾɾɾ
σʔλมࢹ֮ม ࢄਤͩͱͭ͘Β͍ͷมදݱՄೳ ˞ͨͩ͠ɺTFUPTBͷಁ໌͕ߴ͘ࢹೝੑ͕͍ͷͰɾɾɾ σʔλมͷʮʯͱʮ໘ ੵʯΛରԠ͚Δʂʂ ʮܘʯΛରԠ͚ͯ͠· ͏ͱ໘ੵࣗ͞ΕΔʂ
ࢹ֮มͷಛੑ બੑɿ৭ɺํͳͲ ࢹ֮ม͕ҟͳΔ߹ɺหผ͕Մೳ ؔ࿈ੑɿ৭ɺܗঢ়ͳͲ ࢹ֮ม͕ҟͳΔ߹ɺಉҰάϧʔϓͷೝ͕ࣝՄೳ ఆྔੑɿαΠζɺҐஔͳͲ ࢹ֮ม͕ҟͳΔ߹ɺͭͷࠩΛࣝผ͢Δ͜ͱ͕Մೳ ॱংੑɿڧ͞ ಁ໌ɺ࠼ ͳͲ
ࢹ֮ม͕ҟͳΔ߹ɺॱংͷେখΛࣝผ͢Δ͜ͱ͕ Մೳ
σʔλมͷई ໊ٛईɿΧςΰϦɺ໊শͳͲ ಉ͔ͦ͡ΕҎ֎͔ͷൺֱ͔͠Ͱ͖ͳ͍ ॱংईɿెڝͷॱҐɺͷΞϯέʔτͳͲ ಉ͔͡Ͳ͏͔ɾେখൺֱͰ͖Δ͕ɺՃݮͳͲ ͷԋࢉͰ͖ͳ͍ ࠩईɿͳͲ ࠩͷൺֱͰ͖Δ͕ɺθϩ͕ͳ͘ൺͷҙຯ͕ແ͍ ൺྫईɿਓɺճɺܦաඵͳͲ θϩ͕͋Γɺࠩͷൺֱɺൺͷൺֱ͕Մೳ
ࢹ֮มͷಛੑ ͜Εܝࡌ͢ΕΑ͔ͬͨͱল͍ͯ͠·͢ %FTJHOJOH%BUB7JTVBMJ[BUJPOT 0`3&*--:
ࢹ֮มͷಛੑ ਪ ͜Εܝࡌ͢ΕΑ͔ͬͨͱল͍ͯ͠·͢ %FTJHOJOH%BUB7JTVBMJ[BUJPOT 0`3&*--: ΧςΰϦΛࣔ͢ͳΒҰ ΧςΰϦΛࣔ͢ͳΒҰ ςΫενϟܥਤ͕ࡶʹ ͳΓ͍͢
8FCͰͷՄࢹԽͷ͍͍ͱ͜Ζ
ར 8FCͰڞ༗͠ɺଟ͘ͷਓʹσʔλʹؚ·Ε Δࣄ࣮Λಧ͚Δ͜ͱ͕Ͱ͖Δ ੫ۚͲ͜ʹߦͬͨʁ ϚεΩʔϘʔυʹΑΔΠϯλϥΫγϣ ϯ͕ར༻Ͱ͖Δ Ξχϝʔγϣϯ͕ར༻Ͱ͖Δ ࣌ؒ࣠Λ࣮ࡍͷ࣌ؒʹׂΓͯΔ͜ͱͰɺද ݱͰ͖ΔσʔλมΛͭ૿͢͜ͱ͕Ͱ͖Δ
8FCͰͷڞ༗ IUUQTQFOEJOHKQ
ΠϯλϥΫγϣϯ IUUQTRVBSFHJUIVCJPDSPTTpMUFS IUUQXXXDTVNEFEV dCFEFSTPOQBQFSTJOEFYIUNM
Ξχϝʔγϣϯ IUUQTXXXZPVUVCFDPNXBUDI WF[7LBI3'UNT
47(ʹ͍ͭͯ
47(ͱ 4DBMBCMF7FDUPS(SBQIJDT େ͖ͯ͘͠៉ྷ 9.-%PDVNFOU %0. *OTQFDUPSͰݟ͍͢
47(Ͱ͑Δλά TWH H EFGT TZNCPM VTF QBUI MJOF SFDU DJSDMF
FMMJQTF QPMZMJOF QPMZHPO ! ͋ͱϑΟϧλʔपΓ͕ͨ͘͞Μ͋Γ·͕͢ ΄ͱΜͲ͏ػձ͋Γ·ͤΜ
47(͜Μͳײ͡ <svg width="400" height="300">! <g transform="translate(50,50)">! <circle r="5" cx="128.571" cy="111.733"
fill="blue"></circle>! <circle r="5" cx="21.428" cy="121.600" fill="red"></circle>! <circle r="5" cx="77.142" cy="138.4" fill="blue"></circle>! <circle r="5" cx="111.428" cy="135.2" fill="blue"></circle>! <circle r="5" cx="300" cy="0" fill="red"></circle>! <circle r="5" cx="0" cy="73.066" fill="red"></circle>! <circle r="5" cx="244.285" cy="192.266" fill="blue"></circle>! <circle r="5" cx="270" cy="200" fill="red"></circle>! <circle r="5" cx="51.428" cy="173.333" fill="red"></circle>! </g>! </svg>
47(ʹ͍ͭͯͪ͜ΒΛ IUUQXXXTMJEFTIBSFOFULBEPQQFJOMJOFTWH IUUQXXXTMJEFTIBSFOFUTTVTFSEDTWH NBOJBYDTTOJUFBGUFSEBSLTWHNBUTVEB
%KT
%KTͱ 63- IUUQEKTPSH %BUB%SJWFO%PDVNFOUT EBUBʹج͍ͮͯIUNMTWHEPDVNFOU PCKFDUͷॲཧΛߦ͏ɺͱ͍͏ίϯηϓτ 47(ૢ࡞ ॲཧ ՄࢹԽϢʔςΟϦςΟ
ͷ૯߹+BWB4DSJQUϥΠϒϥϦ 47(TFMFDUPSBUUSTUZMF ॲཧTDBMFOFTUBSSBZNBUI ՄࢹԽϢʔςΟϦςΟTDBMFBYJTMBZPVU
۩ମྫ <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 introduction</title>!
<style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>! ! <div>! <p>0th paragraph</p>! <p>1st paragraph</p>! <p>2nd paragraph</p>! </div>! ! <script type="text/javascript" charset="utf8" src="../components/d3/d3.min.js"></script>! <script type="text/javascript" charset="utf8" src="./introduction.js"></script>! </body>! </html>
۩ମྫ ଐੑελΠϧૢ࡞ var paragraphs = d3.select('body').selectAll('p');! paragraphs.style({background: 'cyan'});
۩ମྫ ଐੑελΠϧૢ࡞ var paragraphs = d3.select('body').selectAll('p');! var pdata = [!
{text: "modified: 0th paragraph"},! {text: "modified: 1th paragraph"},! {text: "modified: 2th paragraph"}! ];! paragraphs.data(pdata).text(function(d){ return d.text; }); EBUB ͰσʔλΛඥ͚Δ ͻͱͭͷQʹରͯ͠ɺͻͱͭͷ σʔλ BUUS UFYU TUZMF ͳͲҾʹඥ͚ΒΕͨσʔλΛ औΓɺͦΕʹԠͨ͡ॲཧΛߦ͏
۩ମྫ σʔλʹجͮ͘Ճ var pdata = d3.range(0, 5)! .map(function(id){! return {!
id: id,! text: id + "th paragraph"! };! });! ! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! }); ૿͑ͨʂ
۩ମྫ σʔλʹجͮ͘Ճ Ͱ͔ͭ͠૿͑ͯͳ͍ʂ σʔλͷ͞ QEBUBMFOHUI ͳ͔ͥʁ طଘͷQ ࠩ⾣͜Ε͕૿͑ͨʂ
σʔλ
var pdata = d3.range(0, 5)! .map(function(id){! return {! id: id,!
text: id + "th paragraph"! };! });! ! paragraphs.data(pdata).enter()! .append('p')! .text(function(d){! return d.text;! }); ۩ମྫ σʔλʹجͮ͘Ճ FOUFS ʹΑͬͯɺσʔλ%0.Λॲཧͷରʹ͢Δ
۩ମྫ σʔλʹجͮ͘আ var lessData = pdata.slice(0, 2);! paragraphs.data(lessData).exit().remove(); ʮEBUB FYJU
ʯ FYJU ʹΑͬͯɺ%0.σʔλΛॲཧͷରʹ͢Δ σʔλ ࠩ⾣͜Ε͕SFNPWF ͨ͠ طଘͷQ
4FMFDUJPO TFMFDU TFMFDU"MM Ͱऔಘͨ͠%0. BQQFOE ʹΑͬͯՃͨ͠%0.Λ TFMFDUJPOͱ͍͍·͢ EBUB ʹΑΓσʔλΛඥ͚Δ͜ͱ͕Ͱ͖ ·͢
BUUS TUZMF UFYU ͳͲͰඥ͚ ΒΕͨσʔλΛར༻ͯ͠%0.Λॲཧ͢Δ͜ ͱ͕Ͱ͖·͢
%BUB %SJWFO %PDVNFOUT
4FMFDUJPO ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS
4FMFDUJPO ྫ͑ ඥ͚ͨσʔλ طଘͷ%0. FYJU TFMFDUJPO FOUFS ଐੑɾελΠϧɾςΩ ετͷมߋͳͲΛߦ͏ ৽نʹ%0.ΛՃ
͠ɺಉ࣌ʹଐੑɾελ ΠϧɾςΩετΛηο τ͢Δ طଘͷ%0.Λআ͠ ͨΓɺಁ໌Λ্͛ͨ ΓΛߦ͏
࡞͢Δͱ͖ͷίπ 47(جຊ ޙʹՃͨ͠ͷ্͕ʹදࣔ͞ΕΔ -BZFS Hλά Λ੍ͬͯޚ͢Δͱ͏·͘ ॻ͚·͢ USBOTGPSNଐੑΛ͏·͘͏ͱָͰ͢ UFYUपΓ͍͠Ͱ͢ LBEPQQF͞Μ
ݴͬͯ·͢
None
<svg width="500" height="500">! <g width="480" height="480" transform="translate(10,10)">! <g class="background-layer">! <g
class="ruler">! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="0" y2="0"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="48" y2="48"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="96" y2="96"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="144" y2="144"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="192" y2="192"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="240" y2="240"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="288" y2="288"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="336" y2="336"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="384" y2="384"></line>! <line width="2" stroke="grey" fill="none" x1="0" x2="480" y1="432" y2="432"></line>! </g>! </g>! <g class="chart-layer">! <g><rect x="10" width="100" height="22" y="458" fill="#1f77b4"></rect></g>! <g><rect x="170" width="100" height="209" y="271" fill="#ff7f0e"></rect></g>! <g><rect x="330" width="100" height="478" y="2" fill="#2ca02c"></rect></g>! </g>! <g class="info-layer"></g>! </g>! </svg>
·ͱΊ
σʔλՄࢹԽͱ The main goal of data visualization is its ability
to visualize data, communicating information clearly and effectivelty. Vitaly Friedman $ σʔλՄࢹԽͷతɺσʔλΛՄࢹԽ͠ɺ ใΛ໌͔֬ͭޮతʹ͑Δ͜ͱͰ͋Δ $
ՄࢹԽ͕Ռׂ͖ͨ͢ ࢹ֮දݱͱ͍͏ʮܦݧతʯʮೝతʯʹཧղ Λαϙʔτ͢Δදݱʹม͢Δͷ͕ՄࢹԽ σʔλΛه߸ʹɺσʔληοτΛՄࢹԽʹม ͢Δ ʮΑ͘ΘΕΔՄࢹԽʯͦΕ͚ͩͰཧղ͕ ਐΉՄࢹԽ ཧղ્͕·ΕͨΒɺͦΕ͢ͰʹՄࢹԽ͡Ό ͳ͍ʂ
ՄࢹԽͷత ☓ʮͲ͏ՄࢹԽ͢Δ͔ʁʯ ̋ʮԿΛՄࢹԽ͢Δ͔ʁʯ ˕ʮͳΜͷͨΊʹՄࢹԽ͢Δ͔ʁʯ
ՄࢹԽͷత ࣄ࣮Λൃ۷Ͱ͖ͯͦ͜ͷՄࢹԽ ࣄ࣮Λ׆༻Ͱ͖ͯͦ͜ͷՄࢹԽ ! վળߦҝͷଅਐͷͨΊͷՄࢹԽ Ϗδωεɺ࣏ɺՈܭͳͲ
σʔλՄࢹԽͷϚϯτϥ 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 $
͕࣌ؒ͋ͬͨΒ
࡞ͬͯΈΑ͏ʂ ยΛߴ͞ͱ͢Δάϥϑ
༻ҙ͢Δͷ ίʔυ IUUQTHJTUHJUIVCDPN NVEEZEJYPO 8FCαʔό IUUQCMPHLBNJQPOFUFOUSZ ͖ͳαʔόΛ্ཱ͍ͪ͛ͯͩ͘͞
IUNM <!doctype html>! <html lang="ja">! <head>! <meta charset="utf8">! <title>d3 scatter
plog</title>! <style>! .axis line, .axis path { fill: none; stroke: grey; }! </style>! </head>! <body>! <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>! <script type="text/javascript" charset="utf8" src="./iris.js"></script>! </body>! </html>
+BWB4DSJQUσʔλͷಡΈࠐΈ var WIDTH = 500, HEIGHT = 500, margin =
50;! var width = WIDTH - 2 * margin, height = HEIGHT - 2 * margin;! var key = 'Sepal.Length';! ! // iris.csv ϑΝΠϧΛಡΈࠐΉ! d3.csv(! "./iris.csv",! // ߦͷܕΛमਖ਼! function(d){! for(var attr in d){! if(! isNaN(Number(d[attr]))){! d[attr] = +d[attr];! }! return d;! }! },! // σʔλΛऔಘ! function(err, data){!
+BWB4DSJQU47(ཁૉͷ࡞ // σʔλΛऔಘ! function(err, data){! ! // svgཁૉΛՃ! 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+")"! });! ! // ৭ͷई! var color = d3.scale.category10();
+BWB4DSJQUσʔλͷܗͱཧ // σʔλΛೖΕࢠʹ͢Δ! var speciesData = d3.nest()! // छྨ͝ͱʹྨ͢ΔΩʔΛࢦఆ! .key(function(d){
return d.Species;})! // ग़ྗΛΩʔʹϚονͨ͠ྻ͔Βɺฏۉʹมߋ! .rollup(function(values){! return d3.mean(values, function(d){ return d[key]; });! })! // ΛྻͰऔಘ! .entries(data);! ! // छྨͷΩʔҰཡΛऔಘ! var species = speciesData.map(function(d){ return d.key; });! ! // શମͷߴ͞ͷൣғΛऔಘ! var domain = d3.extent(data, function(d){ return d[key]; });!
+BWB4DSJQUई࡞ // y࠲ඪͷईΛऔಘ! var yScale = d3.scale.linear()! // มޙͷൣғ(Ҭ)! .range([0,
height])! // มલͷൣғ(ఆٛҬ)! .domain([0, domain[1]]);! ! // x࠲ඪͷईΛऔಘ! var xScale = d3.scale.ordinal()! // มޙͷൣғ(Ҭ)! .rangeBands([0, width], .2)! // มલͷൣғ(ఆٛҬ)! .domain(species);
+BWB4DSJQUΛඳը // (ͷάϧʔϓ)ཁૉΛ࡞! var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')!
.attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });! ! // Λඳը! bar.append('rect').attr({! // ۣܗͷߴ͞! height: function(d){ return yScale(d.values); },! // ۣܗͷҐஔ! y: function(d){ return -yScale(d.values); },! // ۣܗͷ෯! width: xScale.rangeBand(),! // ۣܗͷ৭! fill: function(d){ return color(d.key); }! });!
+BWB4DSJQUʹΛඳը // (ͷάϧʔϓ)ཁૉΛ࡞! var bar = main.selectAll('g')! .data(speciesData)! .enter()! .append('g')!
.attr({! transform: function(d){! return "translate("+xScale(d.key)+","+height+")";! }! });! ! // Λඳը (લड़)! // Λඳը! bar.append('text')! // ςΩετྨͨ࣌͠ͷΩʔ! .text(function(d){! return d.values.toFixed(2);! })! .attr({! // ҐஔΛͷ্ʹ! dy: function(d){ return - yScale(d.values); },! dx: xScale.rangeBand() / 2,! fill: 'black'! }).style('text-anchor', 'middle');
+BWB4DSJQU࣠ͷඳը // x࣠ੜͷϢʔςΟϦςΟ! var xAxisSvg = d3.svg.axis().scale(xScale);! // y࣠ੜͷϢʔςΟϦςΟ! var
yAxisSvg = d3.svg.axis().scale(yScale.copy()! .range([height, 0])).orient('left');! // x࣠Λੜ! var xAxis = main.append('g').call(xAxisSvg).attr('class', 'axis')! .attr("transform", "translate(0,"+height+")");! // y࣠Λੜ! var yAxis = main.append('g').call(yAxisSvg).attr('class', 'axis');! ! // y࣠ͷϥϕϧΛهड़! main.append('text').text(key).attr({! transform: "translate(-30,"+(height / 2)+") rotate(-90)"! });
՝ άϥϑ ંઢάϥϑ ࢄਤ ΠϯλϥΫγϣϯ Ξχϝʔγϣϯ δΦϚοϐϯά