Slide 1

Slide 1 text

Modern Dataviz Application Development ʮϞμϯͳʯՄࢹԽΞϓϦέʔγϣϯͱ͸ʁ Keiichiro Ono University of California, San Diego

Slide 2

Slide 2 text

Keiichiro Ono UC, San Diego Dept. of Medicine Bioinformatics software engineer National Resource for Network Biology 
 The Cytoscape Consortium

Slide 3

Slide 3 text

Keiichiro Ono UC, San Diego Dept. of Medicine Bioinformatics software engineer National Resource for Network Biology 
 The Cytoscape Consortium

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Cytoscape Platform for (biological) network analysis and visualization

Slide 8

Slide 8 text

Cytoscape

Slide 9

Slide 9 text

cytoscape.js

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Cytoscape σεΫτοϓɾΞϓϦέʔγϣϯ͔Β࢝· Γɺࠓ͸ؔ࿈ϓϩδΣΫτͷϒϥϯυ໊ʹ

Slide 12

Slide 12 text

ීஈ΍͍ͬͯΔ͜ͱ -ੜ෺ֶ෼໺ͰͷσʔλΛ౷߹/ղੳ/ՄࢹԽ͢ΔͨΊͷιϑ τ΢ΣΞج൫੔උ -ݚڀऀ΁ͷΠϯλϏϡʔɺઃܭɺٕज़ධՁɺ࣮૷ɺςετɺ ࿦จॻ͖ɺֶձൃදɺϫʔΫγϣοϓͷߨࢣɹʢͭ·Γͳ ΜͰ΋΍Γ·͢ʣ -͜ͷ෼໺Ͱѻ͏σʔλ -Ԙج഑ྻ -λϯύΫ࣭ͷࡾ࣍ݩߏ଄ -Ҩ఻ࢠ/λϯύΫ࣭ͷωοτϫʔΫʢάϥϑʣ -Ҩ఻ࢠͷػೳΞϊςʔγϣϯ -σʔλΛఏࣔ͢Δର৅ʢΫϥΠΞϯτʣ -جૅҩֶݚڀऀ -ྟচҩɹʢ༧ఆʣ

Slide 13

Slide 13 text

࠷ۙͷϓϩδΣΫτ঺հ

Slide 14

Slide 14 text

࠷ۙͷϓϩδΣΫτ - ֊૚Խ͞ΕͨҨ఻ࢠ܈ΛՄࢹԽ͢Δ - ϨΨγʔͳٕज़Ͱ࣮૷͞ΕͨΞϓϦέʔγϣϯΛɺ΢Σϒ ؔ࿈ٕज़Λ࢖֦ͬͯு͢Δ - զʑͷϓϩδΣΫτͰΑ͘ར༻͢ΔՄࢹԽ/UI෦඼ͷ࠶ར༻ Մೳͳ(React)ίϯϙʔωϯτԽ

Slide 15

Slide 15 text

NDEx Client Built with Electron Electron App Java-Swing App

Slide 16

Slide 16 text

DeepCellʢԾʣ

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

ຊ೔ͷςʔϚ

Slide 20

Slide 20 text

-ϞμϯͳσʔλՄࢹԽΞϓϦέʔγϣϯ։ൃͱ͸? -ෳࡶͳσʔληοτΛՄࢹԽ͢ΔΞϓϦέʔγϣϯ ͷσβΠϯख๏ -࣮ࡍͷઃܭͱ࣮૷: React + D3Λྫʹ

Slide 21

Slide 21 text

ຊ୊ͷલʹ…

Slide 22

Slide 22 text

ձ৔Ξϯέʔτ: ҎԼͷπʔϧΛར༻ ͍ͯ͠·͔͢ʁ

Slide 23

Slide 23 text

v4

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

-ϞμϯͳσʔλՄࢹԽΞϓϦέʔγϣϯ։ൃͱ͸? -ෳࡶͳσʔληοτΛՄࢹԽ͢ΔΞϓϦέʔγϣϯ ͷσβΠϯ -࣮ࡍͷઃܭͱ࣮૷: React + D3Λྫʹ

Slide 28

Slide 28 text

ʮϞμϯͳʯՄࢹԽΞϓϦέʔγϣϯͷ࣮ࡍ

Slide 29

Slide 29 text

ʮϞμϯͳʯՄࢹԽ ΢ΣϒɾΞϓϦέʔγϣϯͱ͸ʁ

Slide 30

Slide 30 text

࢖༻ٕज़తʹϞμϯͰ͸ͳ͍ ՄࢹԽΞϓϦέʔγϣϯͷྫ

Slide 31

Slide 31 text

Cytoscape • Java + Swing • جຊతʹOࣾ͸΄΅์غ ͨ͠UIπʔϧΩοτ • ࢖༻ٕज़తʹ͸Ϟμϯ Ͱ͸ͳ͍

Slide 32

Slide 32 text

Cytoscape - Ұํɺ։ൃελΠϧ΍ઃܭ͸Ͱ͖Δ͚ͩݱ୅తͰ͋Ζ͏ͱ͍ͯ͠Δ - OSGiʹΑΔϞδϡʔϧԽ - APIͱ࣮૷ͷ෼཭ - σʔλϞσϧɺviewϞσϧɺϨϯμϦϯάϨΠϠʔͷ෼཭ - GitHub / CI / Unit tests / etc.

Slide 33

Slide 33 text

Heer, Jeffrey, and Maneesh Agrawala. "Software design patterns for information visualization." IEEE transactions on visualization and computer graphics 12.5 (2006). ՄࢹԽಛ༗ͷ σβΠϯύλʔϯͷར༻

Slide 34

Slide 34 text

HiView Top Component Start Button Command Bar Widget Fit Button Zoom Out Button Zoom In Button DAG View Network Viewer Widget Cytoscape.js Renderer WebGL based renderer (Optional) Search Widget Query Panel Start Query Button Clear Query Button Query Text Box Search Result Panel Search Result List Search Result 1 Search Result n Property Panel Raw Interaction Data View NetworkViewer Widget Cytoscape.js Renderer Selected Edge Property Panel Edge Score List Edge Score Chart Filter List Widget Edge Type Filter Panel Type Checkbox 1 Type Checkbox n Edge Score Filters panel Z-Score Filter Integrated similarity score filter Title Panel Title UUID Description Base Tabbed Pane Gene Property Panel Gene Name Nested Property List List Item 1 List Item n Description Term Property Panel Selected Object’s Property Tab Nested Prop Interaction Tab Interaction List Inter Inter Assigned Genes Tab Gene List Gen Gen Toolbar Application Title Ұͭͷఆٛ

Slide 35

Slide 35 text

HiView Top Component Sta Command Bar Widget Fit Button Zoom Out Button Zoom In Button DAG View Network Viewer Widget C W Search Widget Query Panel Start Que Clear Qu Query Te Search Result Panel S Property Panel Raw Interaction Data View Filter List Widget Edg Edg Title Panel Title UUID Description Base Tabbed Pane Gene Term Toolbar Application Title Ұͭͷఆٛ -ϞδϡʔϧԽ͞Ε͍ͯΔ -Α͘஌ΒΕͨՄࢹԽͷύλʔ ϯ΍ݪଇΛར༻͍ͯ͠Δ -ΞϓϦέʔγϣϯͷجຊઃܭ - σʔλͱUIͷઃܭ͕ߏ଄ Խ͞Ε͍ͯΔ -σʔλͷ؅ཧʹҰఆͷϧʔϧ Λ࣋ͭ -ςετՄೳ ʢίϯϙʔωϯτɾπϦʔͷྫʣ

Slide 36

Slide 36 text

ಛఆͷςΫϊϩδʔ Λ࢖͏͜ͱ͸ඞͣ͠ ΋ʮϞμϯʯͰ͋Δ ͨΊʹඞਢͰ͸ͳ͍

Slide 37

Slide 37 text

ϞμϯͰ͋Δ͜ͱ ʹΞϓϦέʔγϣϯͷߏ଄σβΠϯ ʴ࢖༻͢ΔςΫϊϩδʔ

Slide 38

Slide 38 text

ͦ͏͸ݴͬͨ΋ͷͷ… ϚδϣϦςΟ͔Β֎ΕΔͱҰؾʹ༨ܭ ͳ࿑ྗ͕૿͑·͢ͷͰɺͰ͖Δ͚ͩϝ ΠϯετϦʔϜͱݺ΂Δ৘ใྔͷଟ͍ πʔϧ܈Λ࢖͏ͷ͕ݱ࣮తͰ͢

Slide 39

Slide 39 text

࣮૷ͷͨΊͷ πʔϧ܈

Slide 40

Slide 40 text

ݱ࣌఺Ͱͷ࠷దղ -ݴޠ: ES2015 Ҏ߱ -ύοέʔδϚωʔδϟ: npm -Ϗϧυπʔϧ: Webpack 3 -ίϯϙʔωϯτԽ: React -ՄࢹԽ: - D3 - ޷ΈͷϨϯμϦϯάٕज़ (SVG/Canvas/WebGL)

Slide 41

Slide 41 text

͜ͷ૊Έ߹ΘͤͰͰ͖Δ͜ͱ -ʮී௨ͷ։ൃʯ - τϥϯεύΠϧɺϛχϑΝΠɺςετͳͲͷࣗಈԽ - ϞδϡʔϧԽͱͦΕʹ൐͏࠶ར༻ੑͷ޲্ - npmίϚϯυͰͷΠϯετʔϧ - ίϯϙʔωϯτϕʔεͰͷՄࢹԽػೳઃܭ

Slide 42

Slide 42 text

WebComponents͸?

Slide 43

Slide 43 text

WebComponents -ະདྷʹ͸ීٴ͍ͯ͠Δ͔΋͠Εͳ͍ - GoogleͳͲͷڧྗͳޙԡ͠ -“Perfect World”Λ໨ࢦ͗͢͠ʁ -ಈ޲͸௥͏Ձ஋͋Γ

Slide 44

Slide 44 text

֤։ൃπʔϧͷධՁ (ओ؍Ͱ͢)

Slide 45

Slide 45 text

஌ࣝͷඞཁ౓ ඞਢ ඞཁʢ΋͘͠͸ྨࣅͷπʔϧʣ ES5ʹͩ͜ΘΔඞཁ͕ͳ͚Ε͹ඞਢ

Slide 46

Slide 46 text

ϑϩϯτΤϯυք۾͕ ෳࡶԽ͗͢͠໰୊ How it feels to learn JavaScript in 2016 https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f

Slide 47

Slide 47 text

͔͠͠ຊ౰ʹͦ͜·Ͱ ෳࡶͩΖ͏͔ʁ ґଘ؅ཧ ϏϧυͱλεΫ࣮ߦ ޓ׵ੑͷͨΊͷม׵ʢτϥϯεύΠϧʣ

Slide 48

Slide 48 text

࣮૷͸ҠΓมΘͬͯ΋ɺجຊ తͳπʔϧͷ΍͍ͬͯΔ͜ͱ ͸ͦΕ΄ͲมΘ͍ͬͯͳ͍

Slide 49

Slide 49 text

ϞμϯͰ͋Δ͜ͱ ʹΞϓϦέʔγϣϯͷߏ଄σβΠϯ ʴ࢖༻͢ΔςΫϊϩδʔ Recap

Slide 50

Slide 50 text

ϞμϯͰ͋Δ͜ͱ ʹΞϓϦέʔγϣϯͷߏ଄σβΠϯ ʴ࢖༻͢ΔςΫϊϩδʔ Recap

Slide 51

Slide 51 text

-ϞμϯͳσʔλՄࢹԽΞϓϦέʔγϣϯ։ൃͱ͸? -ෳࡶͳσʔληοτΛՄࢹԽ͢ΔΞϓϦέʔγϣϯ ͷσβΠϯ -࣮ࡍͷઃܭͱ࣮૷: React + D3Λྫʹ

Slide 52

Slide 52 text

ՄࢹԽΞϓϦέʔγϣϯΛ σβΠϯ͢Δ

Slide 53

Slide 53 text

ΞϓϦέʔγϣϯͷλΠϓ

Slide 54

Slide 54 text

γϯϓϧͳ νϟʔτ Ұͭͷը໘ʹɺҰͭɺ΋ ͘͠͸ෳ਺ͷಠཱͨ͠σʔ λΛՄࢹԽ͢Δ Examples from: http://www.reactd3.org/docs/basic/

Slide 55

Slide 55 text

Examples from: http://www.reactd3.org/docs/basic/ Data 1 Data 2

Slide 56

Slide 56 text

Scrollytelling -ෳ਺ͷσʔληοτΛ༻͍ͯ ετʔϦʔΛߏ੒͢Δ -ෳ਺ͷಠཱͨ͠σʔληοτ Λνϟʔτʹ -σʔλδϟʔφϦζϜͰΑ͘ ࢖ΘΕΔ https://pudding.cool/process/how-to-implement-scrollytelling/ https://www.theguardian.com/us-news/ng-interactive/2015/oct/19/ homan-square-chicago-police-detainees https://www.nytimes.com/interactive/2016/07/07/world/americas/ bolivia-climate-change-lake-poopo.html

Slide 57

Slide 57 text

-ෳ਺ͷσʔληοτΛෳ਺ͷख๏ͰՄࢹԽ -ՄࢹԽίϯϙʔωϯτ͸ΠϕϯτͰ࿈݁͞Ε͍ͯΔ -ػೳ͸σεΫτοϓɾΞϓϦέʔγϣϯʹ४ͣΔ Data Dashboard

Slide 58

Slide 58 text

ϥΠϒϥϦ ൚༻ੑΛߴΊͯଞऀ͕࠶ར ༻Ͱ͖ΔΑ͏ʹઃܭ͞Εͨ ՄࢹԽίϯϙʔωϯτ Data Visualization Component CSS 3rd party lib JS

Slide 59

Slide 59 text

λΠϓʹ߹ΘͤͯσβΠϯΛ࢖͍෼͚Δ -γϯϓϧͳνϟʔτΛ࡞ΔͷʹɺReactͳͲͷσβΠϯํ๏ʹҰఆ ͷറΓΛ͔͚ΔϑϨʔϜϫʔΫΛ࢖͏ͷ͕ຊ౰ʹඞཁ͔ʁ - ߋʹݴ͑͹ɺD3ͳͲΛ࢖ͬͯॻ͘ඞཁ͸ຊ౰ʹ͋Δͷ͔ʁ -ٯʹɺෳࡶͳσʔλΛ࣋ͭμογϡϘʔυΛ࡞ΔͷʹɺҰຕͷ HTMLʹJSΛϕλॻ͖͢ΔΑ͏ͳํ๏ͰϝϯςφϯεੑͳͲΛ֬ อͰ͖Δ͔ʁ -ϑϨʔϜϫʔΫ͔Β࡞ΓํΛબͿΑΓ΋ɺσʔλͱݟͤํ͔Βϑ ϨʔϜϫʔΫΛબͿ

Slide 60

Slide 60 text

ࣗ෼ͳΓͷελΠϧΛߟ͑Δ -γϯϓϧͳՄࢹԽΞϓϦέʔγϣϯͰ͋ͬͯ΋ɺࣗ෼͕೺ ѲͰ͖͍ͯΔϘΠϥʔϓϨʔτ͔Β࢝ΊΕ͹ɺ֤छϑϨʔ ϜϫʔΫΛ࢖͏ཧ༝ʹ͸ͳΓಘΔ - ׬શʹϒϥοΫϘοΫεͱͯ͠ଞਓͷϘΠϥʔϓϨʔτ Λ࢖͏৔߹͸ɺϝϯςφϯε΍֦ு࣌ʹࠔ೉Λ൐͏ -ଞਓ(΋͘͠͸਺ϲ݄ޙͷࣗ෼͕)ݟͯཧղͰ͖ΔΑ͏ͳߏ଄ Λߟ͑Δ

Slide 61

Slide 61 text

࣮ࡍͷσβΠϯྫ μογϡϘʔυͷશͯΛπϦʔͰߏ੒͢Δ

Slide 62

Slide 62 text

έʔεελσΟ: σεΫτοϓ୅ସͷ σʔλՄࢹԽμογϡϘʔυ࡞੒

Slide 63

Slide 63 text

σʔληοτ -֤छ࣮ݧ͔ΒಘΒΕͨେن໛ͳҨ఻ࢠωοτϫʔΫ -౷ܭղੳΛߦ͍ੜ੒ͨ͠ʮΦϯτϩδʔʯ - DAGͱ؆ུԽ͞ΕͨπϦʔ -ެڞσʔλϕʔεʹొ࿥͞ΕͨҨ఻ࢠΞϊςʔγϣϯ

Slide 64

Slide 64 text

ཁ͢Δʹ… -ҎԼͷΑ͏ͳσʔλΛΠϯλϥΫςΟϒͳՄࢹԽͱ͠ ͯදݱ͠ɺϢʔβʔͷબ୒ͳͲʹج͍ͮͯෳ਺ͷϏϡʔ Λ࿈ಈ͠มԽͤ͞Δ - ֊૚ߏ଄ - άϥϑʢωοτϫʔΫʣ - ֤छϓϩύςΟʢςʔϒϧσʔλʣ

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

μογϡϘʔυͷը໘͔Βඞ ཁͱͳΔίϯϙʔωϯτ܈Λ πϦʔͱͯ͠ॻ͖ग़͢

Slide 67

Slide 67 text

HiView Top Component Start Dialog Widget Server Information Panel Credential Panel Password Text Box ID Text Box DAG UUID Text Box Server URL Text Box Button Panel Back to home Button Start Button Command Bar Widget Fit Button Zoom Out Button Zoom In Button DAG View Network Viewer Widget Cytoscape.js Renderer WebGL based renderer (Optional) Search Widget Query Panel Start Query Button Clear Query Button Query Text Box Search Result Panel Search Result List Search Result 1 Search Result n Property Panel Raw Interaction Data View NetworkViewer Widget Cytoscape.js Renderer Selected Edge Property Panel Edge Score List Edge Score Chart Filter List Widget Edge Type Filter Panel Type Checkbox 1 Type Checkbox n Edge Score Filters panel Z-Score Filter Integrated similarity score filter Title Panel Title UUID Description Base Tabbed Pane Gene Property Panel Gene Name Nested Property List List Item 1 List Item n Description Term Property Panel Selected Object’s Property Tab Nested Property List List Item 1 List Item n Interaction Tab Interaction List Interaction 1 Source Type List Score for types Target Interaction n Assigned Genes Tab Gene List Gene 1 Gene props (TBD) Gene n Toolbar Application Title Toggle Menu Button Application Settings Widget Title Panel Links Panel Main View Settings Panel View Threshold Slider Controller’s View State Panel Show/Hide Search Panel Switch Show/Hide Command Bar Switch ՄࢹԽʹඞཁͳཁૉΛ ίϯϙʔωϯτͷπϦʔͱͯ͠

Slide 68

Slide 68 text

ͦͷίϯϙʔωϯτΛ࡞Δ ͷʹඞཁͳσʔλϞσϧΛ ߟ͑Δ

Slide 69

Slide 69 text

Hierarchy DAG Search Selected Term Network Properties Nodes Edges Root Node ID NDEx UUID Node 1 Node n Node Property 1 Node Property m Edge 1 Edge n Edge Property 1 Edge Property m Raw interaction network Position (x, y) Term Properties Nodes Edges Term ID Term Name Other property 1 Other property n Client Data Model Root Client Side Routing Current location Query User Credential NDEx ID NDEx Password Is search running Search Result Hit 1 Hit n Is loading network Past locations Is loading network 1st child of property 1 M-th child of property 1 Network in Cytoscape.js Edge ID Source Node Target Node Node ID Tree (In Cytoscape.js) Network Style (Renderer-dependent) Hidden Edges Hidden Edge 1 Hidden Edge n NDEx UUID NDEx UUID Term ID Filters Application Setting Rendering Options Main Tree View Threshold Edge Type Filter Edge Score Filters Edge Type 1 Edge Type n Is selected Appearence Title Score Threshold 1 Score Threshold 2 Is selected Background color location 1 location n σʔλϞσϧ͸Ұͭͷେ͖ͳπϦʔͱͯ͠

Slide 70

Slide 70 text

HiView Web Application MyGene.info Description Pathway annotation Functional annotation NDEx Raw interactions Main DAG (hierarchy) CX to Cytoscape.js Service CX Tool written in Go Graph Layout Service D3 Cluster Layout Other custom layouts ͦͯͦ͠ͷՄࢹԽΞϓϦέʔγϣϯ࣮ݱ ʹඞཁͳόοΫΤϯυΛγϯϓϧʹ࡞Δ

Slide 71

Slide 71 text

ϙΠϯτ -ΫϥΠΞϯταΠυͷશͯΛ໦Ͱߟ͑Δͷ͸ɺՄࢹԽΞϓ Ϧέʔγϣϯʹ͸ൺֱత૬ੑ͕ྑ͍ - σʔλͱՄࢹԽίϯϙʔωϯτͷඳը΁ͷରԠ͕໌ྎ - ϒϥϯν͝ͱʹػೳ͕෼͔ΕΔͷͰɺͲ͜Λ࠶ར༻Մೳ ʹ͢Δ͔ΛܾΊ΍͍͢ - ػೳ௥Ճɹ
 ʹɹσʔλ/ίϯϙʔωϯτ໦΁ͷϒϥϯνʢࢬʣ௥Ճ

Slide 72

Slide 72 text

-ϞμϯͳσʔλՄࢹԽΞϓϦέʔγϣϯ։ൃͱ͸? -ෳࡶͳσʔληοτΛՄࢹԽ͢ΔΞϓϦέʔγϣϯ ͷσβΠϯ -࣮ࡍͷઃܭͱ࣮૷: React + D3Λྫʹ

Slide 73

Slide 73 text

࣮૷͢ΔͨΊͷ ٕज़બ୒

Slide 74

Slide 74 text

React + D3.js v4

Slide 75

Slide 75 text

ͦΕͧΕͷಛ௃

Slide 76

Slide 76 text

React

Slide 77

Slide 77 text

-ViewͷΈʹಛԽͨ͠ൺֱతখ͞ͳϑϨʔϜϫʔΫ -ίϯϙʔωϯτԽΛڧ͘ҙࣝͨ͠ઃܭ - ReactϕʔεͷΞϓϦέʔγϣϯɹʹ
 ίϯϙʔωϯτͷू߹ React

Slide 78

Slide 78 text

D3.js v4

Slide 79

Slide 79 text

-ՄࢹԽʹؔ͢Δ༷ʑͳܭࢉΛߦ͏ࣄ্࣮ͷඪ४ϥΠϒϥϦ -v4ʹͳΓޙํޓ׵ੑΛࣺͯͨେن໛ͳΞοϓσʔτΛߦ͏ - ϞδϡʔϧԽ - ݩʑD3͸ՄࢹԽʹݶΒͳ͍༷ʑͳػೳͷू߹ମͩͬͨ - ϨΠΞ΢τɺCSVಡΈࠐΈɺΧϥʔίʔσΟϯάੜ੒ D3.js v4

Slide 80

Slide 80 text

v4ͷϞδϡʔϧ܈

Slide 81

Slide 81 text

d3-path d3-array d3-dsv d3-drag d3-format d3-dispatch d3-timer d3-quadtree d3-collection d3-time d3-time-format d3-transition d3-color d3-interpolate d3-ease d3-hierarchy d3-brush d3-selection d3-queue d3-random d3-voronoi d3-zoom d3-scale d3-force d3-polygon D3.js v4 d3-chord d3-request d3-geo d3-axis d3-shape D3.js v4

Slide 82

Slide 82 text

d3-drag d3-dispatch d3-timer d3-transition d3-color d3-interpolate d3-ease d3-hierarchy d3-brush d3-selection d3-queue d3-random d3-voronoi d3-zoom d3-polyg

Slide 83

Slide 83 text

ྫ: D3 stratify moduleΛϨΠΞ ΢τΤϯδϯͱͯ͠αʔόʔ αΠυͰ࢖͏

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

ͳͥ૊Έ߹ΘͤΔͷ͔ʁ

Slide 86

Slide 86 text

-ΧϥʔϚοϐϯάɺඪ४త ϨΠΞ΢τͳͲՄࢹԽʹؔ ͢ΔϚοϐϯάɺϞσϦϯ ά෦෼ͷػೳ͕ॆ࣮͍ͯ͠ Δ -ൺֱతϩʔϨϕϧͳػೳ͕ ଟ͍ͷͰɺίϯϙʔωϯτ ϨϕϧͰͷॻ͖ํͷن཯͸ ࣋ͨͳ͍ -جຊతʹ͸ɺ༩͑ΒΕͨσʔ λ(props)Λݩʹࠩ෼Λࢦࣔ௨Γ ʹඳը͢ΔͷΈ -ίϯϙʔωϯτԽͱͷ૬ੑ͕ ͍͍ -σʔλՄࢹԽͷجຊతͳߟ͑ ํʹ΋Α͘ೃછΉ - ༩͑ΒΕͨσʔλ͔Βࢹ֮ ཁૉ΁ͷϚοϐϯάؔ਺

Slide 87

Slide 87 text

֤ϥΠϒϥϦͷ໾ׂ෼୲ -جຊతʹ͸ReactʹԾ૝DOMͷ؅ཧΛ೚ͤΔ -ίϯϙʔωϯτͷπϦʔͱͯ͠ՄࢹԽΛදݱ͢Δ -D3Λ਺ֶ༻ϥΠϒϥϦͱͯ͠࢖͍ɺՄࢹԽؔ࿈ʹ ඞཁͳܭࢉͷΈʹప͢Δ - ΧϥʔίʔσΟϯάɺϨΠΞ΢τɺεέʔϦ ϯάͳͲ

Slide 88

Slide 88 text

ΞϓϦέʔγϣϯ σβΠϯͷύλʔϯ

Slide 89

Slide 89 text

Data Mapping render() Low-level rendering Transform ֤ϥΠϒϥϦͷ໾ׂ෼୲

Slide 90

Slide 90 text

ύλʔϯ1: ඳըΛReactʹ೚ͤΔ -React-centricͳॻ͖ํ - ՄࢹԽϞδϡʔϧΛπϦʔܗࣜͷߏ଄ʹ෼ׂ - ྫɿάϥϑσʔλ - ϊʔυɺΤοδΛϕʔείϯϙʔωϯτͱͯ͠ɺ ͦͷू߹ͱͯ͠ͷάϥάίϯϙʔωϯτΛఆٛ -΋ͬͱ΋ඪ४తͳReactίϯϙʔωϯτͷॻ͖ํͷύλʔϯ

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

Shape Ellipse Node Neuron Rectangle ίϯϙʔωϯτͷؔ܎

Slide 93

Slide 93 text

࠷΋γϯϓϧͳίϯϙʔωϯτͷྫ const Ellipse = props => ( )

Slide 94

Slide 94 text

class Shape extends Component { render() { const shapeName = this.props.shapeName if (shapeName === 'circle') { return ( ) } else { return ( ) } } }

Slide 95

Slide 95 text

class Node extends Component { onClick = event => { this.setState({selected: !this.state.selected}) this.props.eventHandlers.nodeSelected(this.props.id) } render() { return ( {textElement} ) } }

Slide 96

Slide 96 text

D3͸Ͳ͜ʹ…ʁ

Slide 97

Slide 97 text

࿬໾ʹప͢Δ import * as d3Interpolate from 'd3-interpolate' const colorMapper = d3Interpolate.interpolateHcl('white', ‘orange') const fillColor = colorMapper(this.props.datapoint) ਺஋ʹରԠͨ͠ΧϥʔίʔσΟϯάͷੜ੒

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

࿬໾ʹప͢Δ componentDidMount() { const treeArea = d3Select.select('#' + this.state.rootTag) const zoom = d3Zoom.zoom(treeArea) .scaleExtent([1 / 10, 100]) .on('zoom', this.zoomed) const zoomArea = d3Select .select('#' + this.state.zoomAreaTag) .call(zoom) // Move to initial location zoomArea.call(zoom.transform, d3Zoom.zoomIdentity.translate( this.props.initialPosition.x, this.props.initialPosition.y)) } ζʔϜϨϕϧͷܭࢉ

Slide 100

Slide 100 text

const getTree = edges => { return d3Hierarchy .stratify() .id(d => (d.id)) .parentId(d => (d.parentId))(edges) } const applyCluster = d3Tree => { const layout = d3Hierarchy .cluster() .size([360, 1600]) .separation((a, b) => { return (a.parent === b.parent ? 1: 2) / a.depth }) // Apply layout and generate (x,y) positions layout(d3Tree) } ϨΠΞ΢τͷੜ੒

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

ύλʔϯ2: ΄ͱΜͲͷඳըΛD3Ͱߦ͏ -D3ͷྲّྀͰ΄ͱΜͲͷඳըΛߦ͏ -Reactͷrender()಺Ͱ͸λʔήοτͱͳΔλάΛඳը͢ΔͷΈ

Slide 103

Slide 103 text

render() { return ( ) } ύλʔϯ̎Ͱ࡞੒ͨ͠৔߹ͷrender()ϝιου

Slide 104

Slide 104 text

componentDidMount() { this.d3Graph = d3.select(ReactDOM.findDOMNode(this.refs.graph)) // ͔͜͜Β͸͍ͭ΋ͷD3ͷίʔυ(ུ) },

Slide 105

Slide 105 text

ͲͪΒͷύλʔϯ ͕ϕλʔͳͷ͔ʁ

Slide 106

Slide 106 text

౴ɿঢ়گʹΑΔ -࣮૷ऀͷٕྔɺΞϓϦέʔγϣϯͷن໛ɺσʔλͷେ͖͞ ͳͲʹΑͬͯ౴͑͸ҟͳΔ -ΑΓReact෩ͳΞϓϦέʔγϣϯΛ໨ࢦ͢ͳΒύλʔϯ̍ Λɺബ͍ϥούʔͱͯ͠࢖͍͍͚ͨͩͳΒύλʔϯ̎Λ

Slide 107

Slide 107 text

Tips

Slide 108

Slide 108 text

εΫϥον͔Βͷ࡞੒Λආ͚Δ -໨తͷୡ੒ʹɺຊ౰ʹD3ͰͷΧελϜίϯϙʔωϯτ͕ඞ ཁ͔? -طଘͷϥΠϒϥϦͷ૊Έ߹Θͤ΍ϥοϐϯάͷݕ౼ - render()ϝιου಺Ͱ͸ى఺ͱͳΔλάͷΈΛඳը - ϥΠϑαΠΫϧϝιουͰΞοϓσʔτΛ؅ཧ - ʢ͜Ε͕݁ߏਏ͍৔߹΋͋Δ…ʣ

Slide 109

Slide 109 text

શͯΛϑϩϯτΤϯυ Ͱ΍Ζ͏ͱ͠ͳ͍ -ඞཁʹԠͯ͡όοΫΤϯυͰॲཧ ͢ΔΑ͏ʹॻ͘ -Python΍Rͷํ͕ಘҙͦ͏ͳॲཧ ͩͱࢥ͑͹ɺബ͍ϥούʔΛॻ͍ ͯREST APIɺ΋͘͠͸RPCͱͯ͠ ݺͼग़͢ -ͦͷ৔߹ʹ͸ۃྗγϯϓϧʹɺͰ ͖Ε͹statelessʹ Docker as Portable Data Visualization Backend

Slide 110

Slide 110 text

·ͱΊ

Slide 111

Slide 111 text

·ͱΊ -Ϟμϯͱݺ΂ΔՄࢹԽΞϓϦέʔγϣϯ͸ϝϯςφϯεՄ ೳͳߏ଄Λ࣋ͭ -ಛఆͷςΫϊϩδʔʹറΒΕ͗͢ͳ͍ - ͋Δఔ౓ͷมԽ͸ड͚ೖΕΔ -ݱঢ়Ͱ͸React+D3ͷ૊Έ߹Θͤ͸ߏ଄Խ͞ΕͨՄࢹԽΞϓ ϦέʔγϣϯΛ࡞Δ৔߹ʹศརͳબ୒ࢶͰ͋Δ

Slide 112

Slide 112 text

৮ΕΒΕͳ͔ͬͨ͜ͱ -σʔλ؅ཧ෦෼ͷ࣮૷ - Flux / Redux - ΞϓϦέʔγϣϯͷن໛ʹΑΔͱ͜Ζ͕େ͖͍ -SVGҎ֎ͷඳը -WebpackͳͲͷϏϧυπʔϧΛ࢖͏ࡍͷϊ΢ϋ΢

Slide 113

Slide 113 text

ࢀߟจݙ Learning React Functional Web Development with React and Redux By Alex Banks, Eve Porcello Publisher: O'Reilly Media Release Date: May 2017 ݱ࣌఺(7/2017)Ͱ΋ͬͱ΋ʮඪ४తͳʯςΫϊϩδʔͷ૊ Έ߹ΘͤͰॻ͍ͯ͋Δྑॻ

Slide 114

Slide 114 text

2017 Keiichiro Ono [email protected]