D3 Derinlemesine İnceleme
(d3indepth.com)- D3 in Depth, D3 6 ve 7 temel alınarak D3.js ile özel veri görselleştirmeleri oluşturma sürecini ele alan bir öğrenme kaynağıdır
- Basit grafik kullanımından çok özel görselleştirme oluşturmaya odaklanır ve web görselleştirmesinin bileşenlerini de birlikte öğrenmeyi sağlar
- HTML, SVG, CSS ve JavaScript temelleri D3 çalışmalarıyla bağlantılı olduğundan web tabanlı veri sunumunu anlamaya yardımcı olur
- React, Chart.js ve Leaflet kullanan dashboard ve veri hikâyesi kaynaklarıyla da bağlantılıdır; böylece JavaScript görselleştirme öğrenme akışı oluşturulabilir
- D3’yi derinlemesine öğrenmek isteyen okuyucular için kavramları anlama ile pratiği birlikte sunan giriş ve ileri seviye bir kaynak olarak kullanılabilir
D3 in Depth’in kapsadığı alan
- D3 in Depth, D3 sürüm 6 ve 7’yi hedefler
- D3.js kullanarak özel veri görselleştirmeleri oluşturmayı öğrenebilirsiniz
- Web tabanlı görselleştirme üretimi için gerekli temel öğeler olarak HTML, SVG, CSS ve JavaScript’i birlikte ele alır
Birlikte incelenebilecek JavaScript görselleştirme kaynakları
- Data Dashboards with JavaScript, React, Chart.js ve Leaflet kullanarak veri dashboard’ları oluşturmayı ele alır
- Visualising Data with JavaScript, Chart.js, Leaflet, D3 ve React kullanarak grafikler ve veri hikâyeleri oluşturmayı ele alır
- Bir okuyucu değerlendirmesi, bu kaynağı D3 kitapları arasında yüksek değerlendiriyor; içeriğin net, takip etmesi kolay ve kavramsal olarak sağlam olduğunu düşünüyor
1 yorum
Hacker News yorumları
D3'ün üzerine grafik, chart ve plot oluşturmak için pek çok yerleşik yaklaşım ve kullanım kolaylığı ekleyen bir kütüphane.
Bunun da ötesinde Observable Framework[2] var; Plot, D3 ve çeşitli diğer kütüphaneleri destekleyen, görselleştirme panoları için bir statik site oluşturucu.
1: https://observablehq.com/plot/
2: https://observablehq.com/framework/
Çeşitli plot türlerinde çoğu zaman SVG verisini doğrudan manipüle etmek gerçekten daha kolay oluyor ve o kadar da zor değil.
SVG veya canvas çıktısını daha kolay manipüle etmeyi sağlayan bir kütüphane ya da framework olsa keşke. Küçük değişiklikler çok kolay olmalı, ama framework ne kadar üst seviyeye çıkarsa belirlenmiş yolun dışına çıkmak da o kadar zorlaşıyor.
Dokümantasyon da fena değil, ama işe yarar bir API referansı bölümü eksik olduğu için özellikleri keşfetmek pek kolay değil.
HTML5 canvas ile grafik yapmaktan mümkün olduğunca kaçınmaya çalışıyorum; bu yüzden daha yeni bir tasarım yaklaşımı olsa iyi olurdu.
Düzenleme: Donanım hızlandırmayı açınca daha akıcı oldu ama Ryzen 9'da bile hâlâ beklediğimden daha fazla takılıyor.
10 yıldır görmediğim bir kısmi diferansiyel denklemi çözmem istense sanırım ona daha çabuk yeniden alışırım.
D3 referans dokümantasyonunun da gerçekten korkunç olduğunu düşünüyorum.
Yine de artık daha stabil görünüyor. D3'ü tek başına kullanmak yerine Svelte+D3 ile daha imperative tarzda yazmaya başlayınca daha iyi kavradım.
Böylece oluşturulan öğeleri sonradan geliştirici araçlarında incelemek yerine, üretilen öğeleri daha kolay anlayabildim.
D3 ve Svelte'i birlikte kullanmak için şu site faydalı: https://svelte.recipes/
Yaptığım işlerin %80'i uygulama, %10'u sistem, %10'u ise veri analizine daha yakın; bazen iki hafta boyunca bir Jupyter notebook hazırlayıp sonra iki ay hiç bakmadığım da oluyor.
Çoğu plotting kütüphanesinde ezberlenmesi gereken çok sayıda keyfi kural var ve genelde birden fazla küçük alan özel dili bulunuyor. Basit bir string'in
atoi'den çok daha karmaşık biçimde yorumlanması gibi.Ayrıca eksen aralığı belirleme, çok büyük sayıda noktayı işleme gibi çeşitli alanlarda bana göre yanlış olan şeyler var.
D3 birçok şeyi sana yaptırıyor ama bunun için sunduğu arayüz kavramsal olarak sezgisel. Şişenin içinde gemi inşa eder gibi bir API ile başkasının şişkin ve bug dolu genel amaçlı kodunu kullanmak yerine, D3.js ile doğru düzgün yapmak daha iyi bence.
Yanlış kullanması kolay, debug etmesi zor, anlaması da güç.
Bu, sorunun kolay çözüldüğü anlamına gelmiyor. Çok spesifik veri odaklı grafikler yapmak gerekirse yine de büyük ihtimalle D3'ü seçerim.
API'leri bu ölçütle karşılaştırmak aslında pek adil görünmüyor.
Yazanın bile anlamakta zorlanacağı koddan mümkün olduğunca kaçınmak gerekir ve D3 bu tür kütüphanelerin önde gelen örneklerinden biri.
Örneğin 0-100 aralığındaki veriyi 1920x1080 çözünürlüklü bir 1080p ekrana çizecekseniz, bir noktada veriyi ekran projeksiyonuna uyacak şekilde nasıl ölçekleyeceğinize karar vermeniz gerekir.
Matematiği kendiniz hesaplayabilirsiniz ya da bunu D3 gibi bir kütüphaneye bırakabilirsiniz.
Veriyi web üzerinde çizmiyor olsanız bile bir gün bir yerde veri çizeceksiniz ve o ekosistemde aynı rolü üstlenen araçları bulmanız faydalı olacaktır.
Oluşturduğum PNG'nin boyutuna uyacak şekilde grafiğe çizilecek dikdörtgenleri ölçeklemem gerektiğini hatırlıyorum.
Elbette çok basit bir şeydi ve D3'ün yapabildiği etkileyici şeylerle hiç kıyaslanamazdı, ama bilgisayarda görüntü üretmeyi ilk kez kendim yapmış olmak harika bir deneyimdi.
D3 bana kişisel olarak hiçbir zaman sezgisel gelmedi. Sorun belki de çok fazla soyutlama seviyesinde çok fazla iş yapmaya çalışmasıdır.
Sadece veriyi yansıtma meselesi olsaydı anlamak daha kolay olurdu, ama projeksiyon eksenler ve diğer öğelerle de sıkı biçimde bağlantılı olduğundan sanırım durum böyle.
mbostock’un D3’ün temel soyutlaması olarak söylediği
selectveselectdiff hesaplamasının, yeniden giriş yapılabilirpaint()yazmak için bir kolaylık aracına daha yakın olduğunu düşünüyorumSadece
paintifadesinin builder ifadesi olarak yazılması, kendi başınaselectkapsamı içine bağlanması ve çeşitli efektler için bölünebilmesi gibi bir süs eklenmiş durumdaÖzellikle animasyon örneklerinde D3’ün yaptığı iş şaşırtıcı derecede az; dış döngüyü kullanmak ve zamana göre durumu takip etmek sizin doğrudan yapmanız gereken şeyler
D3, görselleştirmeyi ister fonksiyon ister başka bir biçimde kapsülleyecek bir soyutlama da sunmuyor; bu kısım okuyucuya ödev olarak bırakılıyor
Yeni D3 kullanıcıları için bütün bunlar büyük bir sürpriz ya da şok olarak geliyor. Yeni bir veritabanı getirip elinizde sadece dosya G/Ç, B-tree indeksleri ve sorgu optimize edici kütüphaneleri olması, geri kalan her şeyi de sizin bağlamanız gerekmesi gibi
D3’ün DOM manipülasyon modülü
d3-select’in React ile değiştirilmiş hali. Bunun mümkün olması ve iyi çalışması, D3 tasarımının ne kadar iyi olduğunun kanıtıHedefinize göre gerekli araç olabilir de olmayabilir de
Hâlâ easing ve scaling gibi çeşitli yardımcı fonksiyonlarını kullanıyorum, ama gerçek bileşenleri güncel framework’lerle yapıyorum. Benim durumumda Vue 3 ve TypeScript
Yine de D3.js’in sunduğu güzel yıllar ve veri görselleştirmede birçok iyi pratiği öğretmiş olması için minnettarım
Mike Bostock’un varsayılanları ve demoları hem ilham vericiydi hem de iyi bir standart örneğiydi; ayrıca Tufte’un minimalizmiyle de iyi uyuyordu
D3 ile jQuery bir ölçüde benziyor ve ikisi de kolayca spagetti koda dönüşebiliyor. VisX gibi araçlar, kullandıkları D3’ün üzerine ciddi bir yapı ekleyip işi makul tutuyor
Yine de saf D3 kullanmaya kıyasla daha özelleştirilmiş bir şey yapmak istediğinizde araçla savaşmanız gereken, dolayısıyla daha kısıtlı bir his verip vermediğini merak ediyorum
GG’den ilham alan bir başka araç da adı da uygun olan ggplot2 ve R dili için
Çok daha kısa ve işlevsel programlamaya daha yakın bir arayüz sunuyor; ayrıca CSV’yi pipe ile aktararak hızlıca grafik üretmeye yarayan nadir bir araç olan Rush, yani shell için R one-liner’larıyla da iyi çalışıyor
Bu araçlar genelde tarayıcı özelliklerine bağımlı oluyor ya da sunucu tarafı üretim için headless browser kullanan hantallaşmış sunucu tarafı render çözümleri kullanıyor
Özellikle programatik olarak Venn diyagramı oluşturabilmek güzel olurdu. Garip şekilde bu alanda neredeyse hiçbir şey yok
Bazı JavaScript grafik kütüphaneleri bunu destekliyor ama genel olarak destek neredeyse yok gibi görünüyor
gnuplot iyi görünüyor ama Venn diyagramı desteği yok
Aynı zamanda OpenSearch Dashboards’un bağımlılıklarından biri, bu yüzden kullanıcıların loglar ve gözlemlenebilirlik verileri üzerinde özel panolar oluşturmasına imkân veriyor[2]
Vega kütüphanesi, başkalarının bahsettiği D3 öğrenme eğrisi sorununu bir ölçüde hafifletebilir gibi görünüyor
[1] https://vega.github.io/vega/docs/
[2] https://opensearch.org/docs/latest/dashboards/visualize/vega...