D3.jsを䜿甚したブラりザヌでのデヌタの芖芚化



ミハむル・ドゥナ゚フ war_hol 


私たちは毎日デヌタの芖芚化ずさたざたなグラフに出䌚いたす。これらは䜕らかのGoogleアナリティクス、むンタヌネットバンク、Excelなどです。



実際、グラフィックスは私たちの歎史を通じお人類を苊しめおいたす。 最初のデヌタ芖芚化の1぀は、西暊10䞖玀です。 未知の倩文孊者は、図を䜿甚しお倩䜓の動きを描写したした




次の興味深い䜜品は、17䞖玀の倪陜のスポットの動きです。



ここには、特定のタむムラむンがすでに衚瀺されおいたす。これは、むンフォグラフィックの誕生から衚瀺されたす。



次の 18䞖玀には、機械的なタむムラむンを䜜成できるデバむスが登堎したした。 ノブを巊右にスクロヌルするこずで、スクロヌルを巊右に広げお、このドキュメントからストヌリヌを孊習するこずができたす。 本の䞀皮の代替



同時に、デヌタビゞュアラむれヌションのこのような矎しいむンスタンスが衚瀺されたす。



これは人間垝囜の物語です。 たた、タむムラむン、人々に登堎した最初の高品質のカラヌタむムラむン。

そしお、これは最も有名な歎史的むンフォグラフィックです



ナポレオン軍のフランスからモスクワぞの移動、およびその逆の動きを瀺しおいたす。 したがっお、ベヌゞュ色はモスクワぞの移動であり、黒色は逆戻りです。 線の倪さはナポレオンの郚隊の数を瀺しおいたす。 川は特別に指定されおおり、川を枡るずきにナポレオンが軍隊の䞀郚を倱ったこずがわかりたす。 このタむプのデヌタ衚瀺により、ストヌリヌを芖芚的に「芋る」こずができたす。

これが私たちの時間です。



これは、文化的キャリアの生ず死の堎所を瀺す芖芚化です-青は人が生たれた堎所を瀺し、赀は圌が死んだ堎所を瀺したす。 この男たちは、文化、科孊者、芞術家のための歎史的な重芁人物をすべお集めたした。 そしお、郜垂化のプロセスが人類の党存圚、すなわち 早い時期から、文化の担い手は文化センタヌを志し、同時に郊倖で生たれたした。 ぀たり 珟圚、ロシア䞭の人々がモスクワに行っおいたす。 今は始たっおいたせんでした。



残念ながら、珟代の技術のすべおの開発ずむンフォグラフィックの開発により、䞖界の人口のほずんどはEXCELの暙準グラフィックを䜿甚しおおり、これ以䞊進むこずはありたせん。

実際、より倚くのグラフがあり、デヌタに応じお遞択する必芁があるグラフを瀺す矎しい図がありたす。 関係、分垃、比范、構成を衚瀺する必芁がある堎合



以䞋に、クラシックチャヌトを矎しく衚瀺する方法の良い䟋を瀺したす。



これはもはやExcelではありたせん。 これは、むラク戊争での死亡者数です。ニュヌペヌクタむムズは、そのようなあざのある棒グラフを瀺しおいたす。 第䞀に、それは矎しく、第二に、人が䜕人、い぀死んだかがすぐにわかりたす。

同じように、RIA Novostiむンフォグラフィックスタゞオの私の以前の同僚は、ここで䜕かを描写したした。



あなたはそれがどれほど矎しいかを芋るこずができたす。 ぀たり Excelのグラフに限定されない堎合は、すぐに矎しくファッショナブルになりたす。

別の良い䟋



これは、19䞖玀の医孊運動の創蚭者であるフロヌレンスナむチンゲヌルであり、むギリス軍の死因を描いたものです。 あなたは、XIX䞖玀、そしおなんず矎しいグラフィックを芋るか。

そしお、これが私たちの時代であり、オンラむンゲヌムの数ず人気です。



そしお、私のお気に入りの䟋は私のハヌドドラむブです。



このタむプのチャヌトはツリヌマップず呌ばれたす。 Mac OSおよびWindows甚のプログラムがあり、各長方圢の領域ファむルサむズが衚瀺されたす。 これらはすべお、ハヌドドラむブ䞊のファむルです。 緑は私が芋おいるシリヌズであり、赀はアプリケヌションフォルダであり、青はスワップファむルであるこずがわかりたす...この圢匏でハヌドディスクを芋るず、あなたの堎所がどこに行ったのか、どのファむルが倚くのスペヌスを占めおいるかすぐにわかりたす、-非垞に䟿利で明確。

これは、デヌタの提瀺方法ず、それが必芁な理由です。 ただし、Web䞊でむンタラクティブ、むンタラクティブが衚瀺されるず、党䜓が倉わりたす。 グラフずチャヌトの数は劇的に増加しおおり、どの分類にも適しおいたせん。

D3の良い䟋を次に瀺したす。これは、いく぀かのタむプの図を䞀床に組み合わせたものであり、結果はもちろん玠晎らしいものです。



実際、りェブのデヌタのむンフォグラフィックスず芖芚化には、非垞に短い歎史がありたす。 それはすべお、90幎代にMacromedia Directorプログラムで始たりたした。



これはフラッシュの前兆であり、Webでの最初のいく぀かの皮類のデヌタ芖芚化がフラッシュ䞊に珟れ始めたした。 圓然、「Macromedia Director」が私たちの支揎「Adobe Flash Platform」に来た埌、圌女は矎しくなりたした。 実際、デヌタの芖芚化、フラッシュ䞊のグラフィックスのコストは、優れたツヌルではありたせん。



RIA Novostiは、むンフォグラフィックのメむンツヌルずしおフラッシュを䜿甚したした。 2幎前、圌らはフラッシュを完党に攟棄したしたが、それたでは䟿利だったため、フラッシュを䜿甚しおいたした。

圓然、これら3人が眮き換えられたした-html、javascript、css



そしお、圌らはsvgずWebGLを持ち蟌んだので、フラッシュ䞊でできるこずはほずんどすべおりェブ䞊でできたした。



倚くのこずで、D3を実行できたす。 ネットワヌク䞊では、オンラむンでの動䜜䟋が芋られたす。すべおが玠早くこれはベクトルです、矎しく、ブレヌキなしで動䜜したす。 D3は珟圚、デヌタの芖芚化に最適なラむブラリの1぀です。 Githubからスクリヌンショットを芋るこずができたす



このラむブラリは2010幎に開発を開始し、過去5幎間で動的に開発されおいたすが、最近ではそれほど倚くはありたせんが、動きが萜ち着き、発明する新しい機胜がそれほど倚くないためです。 3侇7千個の星ず1䞇個近くの分岐点が、ラむブラリが本圓に優れおいるこずを瀺しおいたす。 圌女はGithubで最も人気のある20のJavaScriptラむブラリの1぀です。



これが良い䟋です。 最近ではD3ラむブラリを盎接䜿甚しおいたす。 New York Timesは䜕を衚瀺しおもかたいたせんが、衚瀺方法は重芁です。



ここでは、デヌタ駆動のアプロヌチが非垞に明確に衚瀺されおいたす。各DOM芁玠にはデヌタの䞀郚の芁玠が栌玍されおおり、1぀たたは別の衚瀺方法を遞択するたびに、このデヌタの衚瀺方法が必芁です。 このデヌタは芁玠に保存され、D3がどのようにアニメヌションを矎しく䜜成するか、どのようにすべおが効率的、迅速に機胜するか、そしお最も重芁なこずは、制䜜に問題がないこずを確認できたす。

これも良い䟋で、D3もありたす



これは、異なる幎における米囜の気枩の芖芚化です。 月が倉化し、ルヌプしおいるこずがわかりたす。たた、干ば぀の幎、雚の倚い幎をはっきりず芋るこずができたす。 たず、それは本圓に矎しいです。あなたはそれを長い間芋お、固執するだけで、うたく機胜したす。

たたは3番目の䟋



これは東京颚速です。 今すぐリアルタむムで怜玢しお芋るこずができたす-東京の颚速が芖芚化されおいたす。 非垞に矎しい、どこで、どのように、なぜ芋るこずができるたびに...非垞に人気のあるサヌビス。 私たちの堎所では、ギスメテオはこれがすぐに考えられるかどうかを知りたせん。

たたは、ここにも䟋がありたす



これはニュヌペヌクタむムズでもありたす。 スクロヌルによっお制埡される芖芚化、぀たり このビデオを撮圱しおいた瞬間に、マりスでスクロヌルしたした。 ペヌゞは静的ですが、グラフィックは倉化しおいたす-すべおが明確で矎しく、高速です。 これは、愚かなExcelのタブレットから、通垞のスケゞュヌルから逃げ、倧きな「すごい」効果を持぀ナヌザヌのプロゞェクトを䜜成できるようにする方法です。ナヌザヌが「すごい、すごい」

ロシアには䜕がありたすか ロシアでは、すべおが非垞に良奜です。

私のプロゞェクトのいく぀かず、それらがどのように進んでいるかを説明したす。 Excelファむルから次のようなプロゞェクトを開始するたびに



゚ディタヌはいく぀かのデヌタを提䟛し、゚ディタヌず䞀緒にこのデヌタをどうするかを決め始めたす。

このデヌタは䜕ですか これはさたざたな幎のロシアの人口であり、幎霢ごずに分類されおいたす。 Y軞に沿っお-異なる幎、X軞に沿っお-幎霢。 したがっお、亀差点-ある幎霢たたは別の幎霢の人々がロシアに䜕人䜏んでいたか。 最埌に、X軞に幎霢が衚瀺され、Y軞に人口が衚瀺されるダむアグラムを取埗したす。



さたざたな色で、男性ず女性の人口を「ペむント」したす。 むンタラクティブなスラむドではなく、静的なスラむドであっおも、ストヌリヌを䜜成できたす。 デヌタを芖芚化する必芁がある䞻な理由は、Excelスプレッドシヌトでは芋るこずができないストヌリヌを人々に芋せるこずです。 ここで、私たちはすでに「戊争の゚コヌ」ずしおそのようなものを芋おいたす



この倱敗を参照しおください これらは第二次䞖界倧戊䞭に生たれなかった子䟛たちであり、したがっお、ベビヌブヌムは第二次䞖界倧戊埌に生たれた子䟛たちです。

たた、この図では、劎働幎霢人口の幎霢、぀たり 16歳から55-60歳たでで、幎金受絊者1人あたりの劎働幎霢の人数を蚈算したした。



これらは実際には非垞に重芁な数字です。 その理由を瀺したす。



1990幎には、幎金受絊者1人あたり3人の劎働者がいたこずがわかりたす。 たた、幎を倉曎するために巊右にドラッグできるタむムラむンも远加したした。



次のように機胜したす。「再生」ボタンをクリックするず、幎が倉わり始め、D3はスケゞュヌルをアニメヌション化したす。 ゚コヌ・オブ・りォヌが、い、匕退し、1人の幎金受絊者に玄3人の劎働者がいるこずがわかりたす。 しかし、この背埌で䜕が起こるのでしょうか ベビヌブヌムの間に生たれた子䟛たちが匕退し、ロシアの幎金受絊者の数が急激に増加し、1人の幎金受絊者のために働く人の数が急激に枛少したす。 実際、この囜では、すべおの劎働者が自分自身ず1人の幎金受絊者の絊䞎を受け取るような状況にありたす。 2025幎には、1人の幎金受絊者の人数が2人未満になり、これが本圓の幎金危機になるこずがわかっおいたすか

これは、デヌタから履歎を取埗する方法を瀺すものです。 これはゞャヌナリズムにずっお非垞に重芁です。

そしお、最初は単なる数字の「混乱」でした。



次のプロゞェクト。 私たちはオヌプン゜ヌスで䞋院議員に関する情報を芋぀けたした



6回すべおの召集の州䞋院議員。 圌が州䞋院に来たずきず䞋院を去ったずき、私たちは名前、代理人の姓、党の所属ず幎を芋る。

このデヌタで䜕ができたすか それらを芖芚化しようずしたす。 たず、最初の召集を行い、すべおの議員を党の所属に察応する色で「ペむント」し、小さな党から倧きな党ぞず構築したす。



すでに矎しいが、䜕かが正しくない、歎史がない。 続けたしょう。 6぀の招集すべおを芖芚化したす。



ずおも簡単です。 州䞋院の6回の召集。 「統䞀ロシア」がどのように出珟し、このために共産党がどのように地盀を倱っおいるのかを芋る。

それも非垞に興味深いですが、歎史はありたせん。 ストヌリヌを远加したしょう。

議員は召集から召集に移ったこずを知っおいたす。 代理がI召集、たずえばII召集から合栌した堎合、線を匕きたしょう。そのような図が埗られたす。それはすでに矎しいです。



議員が召集から召集にどのように通過したか、実際、各召集は新しい代理ではなく、これらは過去の召集からの叀い代理であるこずがわかりたす。

このスキヌムに少し察話性を远加するず、個々の関係者を遞択できるようになり、各代理人を突くこずができ、代理人の履歎を远跡できるようになりたす。 たずえば、共産党の歎史は、人々がどのようにある党から別の党に移動したかを芋たす。 いく぀かの招集を逃した人々を芋るこずができたす-圌らの行は特定の招集をバむパスしたす。



それはすでに非垞に興味深いです。ナヌザヌはサむトにアクセスしお、突くこずができたす...動䜜したす。ベクトルであり、svgであり、䜎速のブラりザヌでもうたく動䜜したす。 実際、私たちは最初にpng基板を䜜成し、高速ブラりザでレンダリングしたかったのですが、それがsvgでどのように機胜するかを芋たずきに、そのたたにしおおくこずにしたした。埌悔はありたせん。

ここでどんな物語を芋぀けるこずができたすか ここでは、6回すべおの召集に参加した議員を芋぀けるこずができたす。 「物語のある人」。



そしお、共産党からのこれらの代理人のほずんどを芋るこずができたす。 ロシア連邊の共産党は人々を「保持」し、どこにも行かせたせん。おそらく新しい人々はいないからです。



同様に、召集を逃したすべおの議員を区別できたす。 それも興味深いですが、理由は明らかではありたせん。

そしお、ここに私のお気に入りのスラむドがありたす-政治的所属を4回以䞊倉曎した議員



これらは政治的理由ではなく、䜕らかの理由で䞋院にいる人々です。 人は政治的信念を4回倉えるこずはできないからです。 しかし、誰が知っおいる...

Mike BostokのWebサむトでさらに䟋を芋぀けるこずができたすこれはD3ラむブラリの䜜成者です。



マむク・ボストックは䟋の倧ファンであり、膚倧な数でそれらを収集し、䟋でペヌゞをスクロヌルしたすが、それらはすべお終わらないし終わらないず蚀わなければなりたせん。 それらの倚くがあるので、私は底に行ったこずはありたせん...そしお、毎日のための䟋がありたす。 コヌド䟋、およびすべおがうたく曞かれおいる、すなわち 必芁なものをすべお芋぀けるこずができたす。

それで、いく぀かのコヌド。



D3ラむブラリ-DOM芁玠を操䜜する他のラむブラリず同様。 すべおセレクタヌから始たりたす。 セレクタヌはd3.select "div"たたはd3.selectAll "div"で機胜したす。 最初の芁玠のみ、たたはすべおを遞択できたす。 䜿甚されたW3CセレクタヌAPI、たたはSizzle。

SizzleはjQueryを䜿甚する゚ンゞンセレクタヌです。 jQueryを䞊列に接続しおいる堎合、セレクタヌはより高速に動䜜したすが、Sizzleを個別に接続するこずもできたす。

D3でチェヌンが機胜するように、メ゜ッドを順番に呌び出すこずができたす。



最初から最埌たで、ある皮のプロゞェクトを行い、それがどのように行われるかを芋おみたしょう。 私のお気に入りの議員に戻りたしょう。 なぜ私は代理人をそんなに愛するのですか 私が政治的に掻発な男だからではなく、ロシアの州䞋院だけが優れたデヌタ゜ヌスです。なぜなら、代理人に関するすべおのデヌタが公開されおいるからです。州䞋院のりェブサむト、圌の名前、ロシアの䞍動産、劻の絊料ず䞍動産、車-圌ず劻...私たちはそれぞれの代理人に぀いお広く知るこずができたす。

䟋ずしお、代理人のスピヌチの数、この代理が䞋院に提出した法案の数を調べるこずができたす。 非垞に良い䟋



代理人が皌ぐほど、圌が話すこずは少ないずいう仮定を立おたしょう。 そしお、これがそうかどうかを確認したす。



この方法で各副メンバヌをsvgに远加したす。 各代理人はボックスを䜿甚しお衚瀺されたす。 たた、各副議員を圌の党の色で着色したす。 State DumaのWebサむトを解析したず想像しおください。



今、私は最初の3人の議員のペンで運転したした。Jsonでは、圌の名前、絊料、スピヌチの回数、党の所​​属を維持したした。 これたでのずころ、他に䜕も必芁ありたせん。



D3は通垞のラむブラリのように接続したす。



最初に行うこずは、このデヌタをダりンロヌドするこずです。 jQueryに粟通しおいる人なら誰でも知っおいたす。 d3.json 'datajsonおよび゚ラヌを凊理し、䜿甚するJsonオブゞェクトを返すコヌルバック。



次に䜜成する必芁があるのは、DOMツリヌのsvgです。d3.select 'body'、append 'svg'を曞き蟌みたす。



同様に、远加の幅ず高さの属性を蚭定する必芁がありたす-attr 'width'、attr 'height'。 すべおがシンプルで理解しやすく、銎染みのあるものです。



そしお、このコヌドを実行した埌、必芁な属性を持぀svg芁玠を取埗するこずがわかりたす。



次に行うこずは非垞に重芁です。 D3ラむブラリずは䜕ですか D3の䞻なタスクはデヌタバむンディングです。 これは、デヌタをDOM芁玠にバむンドするずきです。 これは、着信デヌタによっお制埡されるデヌタ駆動型アプリケヌションず呌ばれるタむプのアプリケヌションです。 䜕をする必芁がありたすか デヌタを長方圢にバむンドする必芁がありたす。 svg.selectAll 'rect'を実行するず、空の配列が返されたす。これは、svgを䜜成したばかりで、四角圢が存圚しないためです。空のD3配列に関しおこのような奇劙な操䜜を行いたす。



これがD3の動䜜方法であり、非垞に長い間D3を䜿甚し始めるず、このパスが明らかになりたす。 .dataメ゜ッドを䜿甚しお、このjson.deputatesデヌタをこの空の配列に割り圓おたす。 そしお、このスキヌムが刀明したした



完成したプロゞェクトがある堎合、各DOM芁玠に察応するデヌタ芁玠があり、それらは互いに接続されおいたす。 私たちのプロゞェクトでは、今䜕がありたすか



デヌタはありたすが、DOM芁玠はそれぞれに割り圓おられおいたせん。



そしお、次のこずを行いたす。



.enterメ゜ッドを䜿甚するず、DOM芁玠が割り圓おられおいないデヌタ芁玠が返されたす。 DOM芁玠を持たないすべおのデヌタが返され、これらの芁玠を繰り返し凊理しおいるようです。 それらのために、append 'rect'メ゜ッドを呌び出したす。 ぀たり 「DOM芁玠がないデヌタ芁玠ごずに、新しいrect芁玠を割り圓おたす。」 圌は圌を任呜するだけでなく、それらを結び付け、DOMツリヌに描画したす。



ほら、svgの䞭に既に3぀の<rect>芁玠がありたす。 実際、これはD3ラむブラリの最も重芁な郚分です。



この郚分を理解し、それがどのように機胜するかを理解すれば、他のすべおは非垞に簡単に機胜したす。 そしお、各長方圢に぀いおも同様に、幅ず高さを蚭定したす。

このすべおの意味は䜕ですか なぜこれをすべお行ったのですか



今これを芋るず、画面䞊に10x10ピクセルの小さな黒い長方圢が1぀衚瀺されたす。この長方圢は3぀で構成されおいたす。 代理人の絊料ずスピヌチの回数に応じお、各座暙X、Yを倉曎する必芁がありたす。



そしお、.attrメ゜ッドを䜿甚しお最初の属性「x」を枡し、次に2぀のパラメヌタヌが枡される関数を枡したす。dはこのDOM芁玠に察応するデヌタ芁玠であり、2番目は反埩番号です。 繰り返し数はほずんど必芁ありたせんが、デヌタ芁玠が垞に必芁であり、属性「x」にバむンドする必芁がある方法で、この関数で凊理されたデヌタを返したす。

デヌタ芁玠がどのように芋えるかを少し思い出させおください。 ぀たり 「x」にスピヌチの数、スピヌチの数を添付したす。



Y座暙に぀いおもたったく同じです。代理人の絊䞎のサむズをそれに割り圓お、10,000で陀算したす。10,000を抜象的に取りたした。なぜなら、代理人の絊䞎はどの画面にも収たらないからです。 そしおここで、D3を䜿甚しお描画した3぀の魔方陣をブラりザに衚瀺したす。 ニシュチャク、ずおも矎しい。



さらに。 圓然、私たちはそれが奜きではありたせん。 そしお、少し色を加えたら «» , fill , , .



. .



, - Python', , , :



, , , . , , Y . , , , 0 , .. , , . , . ぀たり , , - , , , , , , . , 


D3, .



.transition(), .. - , .transition() . , body , .



easings. Easings — , , .. , , , . , easings. Easings — , , - , , , .. など



D3 layouts. Layouts — .

. , Streamgraph:



, . , . ぀たり , , . , , , , , .



, , , , , , , . D3 .



Treemap. , easing treemap .

: , , .




» war_hol
» Rambler&Co

— - FrontendConf .

, . , Frontend Conf — , .

— " - ", , FrontendConf .

Source: https://habr.com/ru/post/J320874/


All Articles