D3 का गहन विश्लेषण
(d3indepth.com)- D3 in Depth D3 6·7 पर आधारित एक सीखने का संसाधन है, जो D3.js से कस्टम डेटा विज़ुअलाइज़ेशन बनाने की प्रक्रिया को कवर करता है
- यह साधारण chart उपयोग से अधिक कस्टम विज़ुअलाइज़ेशन बनाने पर फ़ोकस करता है, और वेब विज़ुअलाइज़ेशन के घटकों को भी साथ में सिखाता है
- HTML, SVG, CSS, JavaScript की बुनियाद D3 के काम से जुड़ी हुई है, इसलिए यह वेब-आधारित डेटा प्रस्तुति को समझने में मदद करता है
- React, Chart.js, Leaflet का उपयोग करने वाले dashboard और data story संसाधनों से भी यह जुड़ता है, जिससे JavaScript visualization learning flow बनाया जा सकता है
- जो पाठक D3 को गहराई से सीखना चाहते हैं, उनके लिए यह अवधारणा की समझ और प्रैक्टिस दोनों साथ लेकर चलने वाला शुरुआती और उन्नत संसाधन हो सकता है
D3 in Depth किन विषयों को कवर करता है
- D3 in Depth D3 version 6 और 7 को लक्षित करता है
- D3.js का उपयोग करके कस्टम डेटा विज़ुअलाइज़ेशन बनाने का तरीका सीखा जा सकता है
- वेब-आधारित विज़ुअलाइज़ेशन बनाने के लिए ज़रूरी बुनियादी तत्वों के रूप में HTML, SVG, CSS, JavaScript को साथ में कवर किया गया है
साथ में देखने लायक JavaScript visualization संसाधन
- Data Dashboards with JavaScript React, Chart.js, Leaflet का उपयोग करके data dashboard बनाने का तरीका बताता है
- Visualising Data with JavaScript Chart.js, Leaflet, D3, React का उपयोग करके chart और data story बनाने का तरीका बताता है
- एक पाठक समीक्षा में इसे D3 किताबों में काफ़ी ऊँचा आंका गया है, और सामग्री को स्पष्ट, आसानी से follow करने योग्य, और अवधारणात्मक रूप से मज़बूत बताया गया है
1 टिप्पणियां
Hacker News की टिप्पणियाँ
यह D3 के ऊपर graph, chart और plot बनाने के लिए बहुत-सी conventions और convenience features जोड़ने वाली library है
इससे भी आगे Observable Framework[2] है, जो Plot, D3 और कई दूसरी libraries को support करने वाला visualization dashboard के लिए static site generator है
1: https://observablehq.com/plot/
2: https://observablehq.com/framework/
कई तरह के plots में सीधे SVG data को manipulate करना वास्तव में अक्सर आसान होता है, और इतना कठिन भी नहीं है
काश कोई library या framework हो जो SVG या canvas output को और आसानी से manipulate करने दे। छोटे बदलाव बेहद आसान होने चाहिए, लेकिन framework जितना higher-level होता जाता है, तय रास्ते से हटना उतना मुश्किल हो जाता है
documentation भी काफ़ी ठीक है, लेकिन usable API reference section नहीं है, इसलिए features ढूँढना आसान नहीं है
HTML5 canvas से graph बनाना मैं जितना हो सके टालना चाहता हूँ, इसलिए कोई नए तरीके से design किया गया approach हो तो अच्छा होगा
edit: hardware acceleration on करने पर यह smoother हो गया, लेकिन Ryzen 9 पर भी उम्मीद से अभी भी ज़्यादा sluggish है
अगर 10 साल से न देखी हुई partial differential equation हल करने को कहा जाए, तो शायद उसकी समझ इससे जल्दी वापस आ जाएगी
मुझे D3 reference documentation सच में भयानक लगती है
फिर भी अब यह ज़्यादा stable लगता है। सिर्फ D3 इस्तेमाल करने के बजाय Svelte+D3 के साथ अधिक imperative style में लिखना शुरू किया, तब चीज़ें समझ आने लगीं
generated elements को बाद में developer tools में देखने के बजाय, generated elements को समझना इससे आसान था
D3 और Svelte को साथ इस्तेमाल करने में यह site मदद करती है: https://svelte.recipes/
मेरे काम का 80% application, 10% system, और 10% data analysis जैसा है, और कभी-कभी मैं 2 हफ्ते तक Jupyter notebook बनाता हूँ और फिर दो महीने उसे नहीं देखता
अधिकांश plotting libraries में याद रखने के लिए बहुत-से arbitrary rules होते हैं, और आम तौर पर कई छोटे domain-specific languages होते हैं। जैसे एक साधारण string को
atoiसे कहीं ज़्यादा complex तरीके से interpret किया जाता हैइसके अलावा axis range तय करना, बहुत सारे points handle करना आदि कई क्षेत्रों में मेरे नज़रिए से कुछ न कुछ गलत होता है
D3 बहुत कुछ खुद करने को कहता है, लेकिन उसके लिए interfaces conceptually intuitive हैं। किसी और के bloated और bug-heavy general-purpose code को bottle में ship बनाने जैसे API के साथ इस्तेमाल करने के बजाय, D3.js से ठीक से बनाना बेहतर लगता है
इसे गलत इस्तेमाल करना आसान है, debug करना कठिन है, और समझना भी मुश्किल है
इसका मतलब यह नहीं कि यह समस्या आसानी से हल हो सकती है। अगर बहुत specific data-driven graphics बनाने हों, तो फिर भी संभवतः D3 ही चुनूँगा
API की तुलना उस standard से करना वास्तव में fair नहीं लगता
ऐसा code जिसे लिखने वाला भी मुश्किल से समझे, उससे जितना हो सके बचना चाहिए, और D3 ऐसी libraries का प्रतिनिधि उदाहरण है
उदाहरण के लिए, अगर 0–100 points range का data 1920x1080 वाले 1080p screen पर draw करना हो, तो किसी point पर यह तय करना होगा कि data को screen projection के हिसाब से कैसे scale किया जाए
आप math खुद calculate कर सकते हैं, या D3 जैसी library को calculation सौंप सकते हैं
web पर data draw न भी करें, तो भी कभी न कभी कहीं data draw करना पड़ेगा, और उस ecosystem में इसी भूमिका वाला tool ढूँढना उपयोगी होगा
याद है कि जिस PNG size को बना रहा था, उसके हिसाब से graph में draw होने वाले rectangles को scale करना पड़ता था
बेशक यह बहुत trivial था और D3 जो अद्भुत चीज़ें कर सकता है उनसे बिल्कुल अलग था, लेकिन computer पर images बनाना पहली बार खुद करके देखना एक शानदार अनुभव था
D3 मुझे व्यक्तिगत रूप से कभी intuitive नहीं लगा। शायद समस्या यह है कि यह बहुत सारे abstraction levels पर बहुत कुछ करने की कोशिश करता है
अगर बात सिर्फ data को project करने की हो तो समझना आसान है, लेकिन लगता है projection axes और दूसरी चीज़ों से भी गहराई से जुड़ा है
मेरे हिसाब से mbostock जिसे D3 का मुख्य abstraction कहते हैं—
selectऔरselectके बीच फर्क की गणना—वह re-entrantpaint()लिखने की सुविधा के ज़्यादा करीब हैबस इतना है कि paint statements builder statements के रूप में व्यक्त होते हैं, वे खुद select scope के अंदर बंधे रहते हैं, और कई effects के लिए उन्हें तोड़ा जा सकता है—इतनी सजावट जुड़ी हुई है
खासकर animation examples में D3 जो काम करता है वह हैरान करने लायक कम है; outer loop चलाना और समय के साथ state track करना आपको खुद करना पड़ता है
D3 visualization को function या किसी और रूप में encapsulate करने वाला abstraction भी नहीं देता, और यह हिस्सा पाठक के homework के लिए छोड़ दिया जाता है
नए D3 users के लिए यह सब बड़ा surprise या shock बनकर आता है। यह कुछ ऐसा है जैसे आपने नया database अपनाया और पाया कि उसमें सिर्फ file I/O, B-tree index और query optimizer libraries हैं, और सब कुछ आपको खुद जोड़ना है
यह D3 के DOM manipulation module
d3-selectको React से बदलने जैसा है। यह संभव है और अच्छी तरह काम करता है—यह बात D3 design की मजबूती का सबूत हैआपके लक्ष्य के हिसाब से यह जरूरी tool हो भी सकता है और नहीं भी
easing या scaling जैसी कई helper functions अब भी इस्तेमाल करता हूँ, लेकिन actual components आजकल के frameworks में बनाता हूँ। मेरे मामले में Vue 3 और TypeScript हैं
फिर भी D3.js ने जो खूबसूरत समय दिया और data visualization की कई अच्छी practices सिखाईं, उसके लिए आभारी हूँ
Mike Bostock के defaults और demos प्रेरणा थे और अच्छे standards के उदाहरण भी, और वे Tufte के minimalism से भी अच्छी तरह मेल खाते थे
D3 और jQuery कुछ हद तक मिलते-जुलते हैं और दोनों में spaghetti code बनने की संभावना रहती है। VisX जैसे tools इस्तेमाल किए जा रहे D3 के ऊपर काफी structure जोड़ते हैं और उसे sane बनाए रखते हैं
हालांकि सोच रहा हूँ कि क्या pure D3 की तुलना में ज़्यादा custom चीज़ बनानी हो तो tools से लड़ना पड़ता है—क्या यह इतना restrictive महसूस होता है?
GG से प्रेरित एक और tool है जिसका नाम भी ठीक-ठाक ggplot2 है, और वह R language के लिए है
यह कहीं ज्यादा concise और functional-जैसा interface देता है, और Rush नाम के एक uncommon tool—यानी shell के लिए R one-liner—के साथ भी अच्छी तरह चलता है, जिससे CSV को pipe करके जल्दी graphics बनाए जा सकते हैं
ऐसे tools आमतौर पर browser features पर निर्भर होते हैं, या server-side generation के लिए headless browser इस्तेमाल करने वाले ढीले-ढाले server-side rendering solutions का उपयोग करते हैं
खासकर programmatic तरीके से Venn diagrams बना पाना अच्छा होगा। अजीब है कि इस क्षेत्र में लगभग कुछ भी नहीं है
कुछ JavaScript chart libraries इसका support देती हैं, लेकिन कुल मिलाकर support बहुत कम दिखता है
gnuplot अच्छा लगता है, लेकिन उसमें Venn diagram support नहीं है
यह OpenSearch Dashboards की dependency भी है, जिससे users logs और observability data के ऊपर custom dashboards बना सकते हैं[2]
लगता है Vega library D3 की learning curve वाली दिक्कत, जिसके बारे में दूसरे लोग बात कर रहे हैं, कुछ हद तक कम कर सकती है
[1] https://vega.github.io/vega/docs/
[2] https://opensearch.org/docs/latest/dashboards/visualize/vega...