MakieCon 2023 luar biasa! | juliablogger.com – Beragampengetahuan
Oleh: Blog Bogumił Kamiński
Repost dari:
Minggu ini saya berpartisipasi dalam MakieCon 2023.
Konferensi ini didedikasikan untuk Makie, visualisasi data
ekosistem untuk bahasa pemrograman Julia, dengan kinerja dan skalabilitas tinggi.
Apa yang dapat Anda lakukan dengan Makie luar biasa,
termasuk ubin 2D dan 3D, animasi, panel, dll
Jika Anda ingin melihat beberapa etalase, kunjungi situs web Beautiful Makie.
Hari ini saya ingin menulis tentang paket yang didefinisikan AlgebraOfGraphics.jl
bahasa untuk visualisasi data, terutama berguna dengan data tabular.
Wajar untuk membandingkan AlgebraOfGraphics.jl dengan ggplot2 karena keduanya
ekosistem yang memungkinkan pembuatan grafik secara deklaratif. Pada artikel ini saya ingin menekankan
perbedaan penting. ggplot2 dirancang untuk menjadi ekosistem independen.
Sedangkan AlgebraOfGraphics.jl merupakan pelengkap Makie.jl untuk menghasilkan data tabular standar
visualisasi yang mudah. Namun, Anda masih dapat menerapkan semua operasi tingkat rendah yang dilakukan Makie.jl
berikan sel yang dibuat. Dengan demikian, Anda mendapatkan yang terbaik dari kedua dunia:
- sistem deklarasi yang nyaman untuk identifikasi batch;
- kemampuan untuk dengan mudah memodifikasi plot yang dihasilkan untuk menyesuaikannya dengan kebutuhan yang tepat dari seorang ilmuwan data.
Saya ingin menunjukkan kepada Anda bagaimana ini dicapai dengan contoh.
Posting ditulis di bawah Julia 1.9.0-rc1, AlgebraOfGraphics v0.6.14,
CSV v0.10.9, CairoMakie v0.10.4 dan DataFrames v1.5.0.
Kami ingin membuat grafik data berikut yang disimpan dalam format CSV:
aog_csv = """
problem,language,time,size
binary-trees,Java,1.5886075949367087,1.0321384425216316
binary-trees,Julia,4.6075949367088604,0.7836835599505563
binary-trees,Python,28.29113924050633,0.8158220024721878
fannkuch-redux,Java,1.3825857519788918,1.408791208791209
fannkuch-redux,Julia,1.0329815303430079,1.1725274725274726
fannkuch-redux,Python,45.04617414248021,1.043956043956044
fasta,Java,1.5384615384615383,1.7382091592617908
fasta,Julia,1.4487179487179485,0.7395762132604238
fasta,Python,47.30769230769231,1.330827067669173
k-nucleotide,Java,1.2196969696969697,1.203187250996016
k-nucleotide,Julia,1.2474747474747476,0.6314741035856574
k-nucleotide,Python,11.694444444444445,1.3061088977423638
mandelbrot,Java,3.1538461538461533,0.7013215859030837
mandelbrot,Julia,1.0923076923076922,0.5453744493392071
mandelbrot,Python,136.4230769230769,0.6061674008810573
n-body,Java,3.1784037558685445,0.9118187385180649
n-body,Julia,1.9765258215962442,0.6803429271279853
n-body,Python,254.15023474178406,0.7323943661971831
pidigits,Java,1.4107142857142856,0.7009174311926606
pidigits,Julia,1.732142857142857,0.46422018348623856
pidigits,Python,2.071428571428571,0.5201834862385321
regex-redux,Java,6.675,0.6649964209019327
regex-redux,Julia,2.175,0.5433070866141733
regex-redux,Python,1.675,1.0042949176807445
reverse-complement,Java,3.829268292682927,1.110941475826972
reverse-complement,Julia,3.5121951219512195,0.26564885496183205
reverse-complement,Python,16.146341463414636,0.41424936386768446
spectral norm,Java,3.780487804878049,0.631578947368421
spectral norm,Julia,2.707317073170732,0.3583959899749373
spectral norm,Python,275.5365853658537,0.34001670843776105
"""
CSV menyimpan informasi tentang kecepatan dan ukuran kode program
ditulis dalam Java, Julia dan Python versus C untuk sepuluh orang terpilih
masalah komputasi. Data diambil dari
Situs Web Game Tolok Ukur Bahasa Komputer.
Saya membahas interpretasi data ini di Bab 1 buku Julia Data Analytics.
Pertama mari muat ini ke dalam kerangka data:
using AlgebraOfGraphics
using CairoMakie
using CSV
using DataFrames
aog_df = CSV.read(IOBuffer(aog_csv), DataFrame)
Anda akan mendapatkan output berikut:
30×4 DataFrame
Row │ problem language time size
│ String31 String7 Float64 Float64
─────┼───────────────────────────────────────────────────
1 │ binary-trees Java 1.58861 1.03214
2 │ binary-trees Julia 4.60759 0.783684
3 │ binary-trees Python 28.2911 0.815822
4 │ fannkuch-redux Java 1.38259 1.40879
5 │ fannkuch-redux Julia 1.03298 1.17253
6 │ fannkuch-redux Python 45.0462 1.04396
7 │ fasta Java 1.53846 1.73821
8 │ fasta Julia 1.44872 0.739576
9 │ fasta Python 47.3077 1.33083
10 │ k-nucleotide Java 1.2197 1.20319
11 │ k-nucleotide Julia 1.24747 0.631474
12 │ k-nucleotide Python 11.6944 1.30611
13 │ mandelbrot Java 3.15385 0.701322
14 │ mandelbrot Julia 1.09231 0.545374
15 │ mandelbrot Python 136.423 0.606167
16 │ n-body Java 3.1784 0.911819
17 │ n-body Julia 1.97653 0.680343
18 │ n-body Python 254.15 0.732394
19 │ pidigits Java 1.41071 0.700917
20 │ pidigits Julia 1.73214 0.46422
21 │ pidigits Python 2.07143 0.520183
22 │ regex-redux Java 6.675 0.664996
23 │ regex-redux Julia 2.175 0.543307
24 │ regex-redux Python 1.675 1.00429
25 │ reverse-complement Java 3.82927 1.11094
26 │ reverse-complement Julia 3.5122 0.265649
27 │ reverse-complement Python 16.1463 0.414249
28 │ spectral norm Java 3.78049 0.631579
29 │ spectral norm Julia 2.70732 0.358396
30 │ spectral norm Python 275.537 0.340017
Mulailah dengan kode lengkap yang menghasilkan plot:
fig = Figure(resolution = (900, 600))
aog_plt = data(aog_df) *
mapping(:problem, [:time, :size];
marker=:language,
color=:language,
col = dims(1) => renamer(["", ""])) *
visual(Scatter; markersize=15, strokewidth=1)
grid = draw!(fig, aog_plt,
axis=(; xticklabelrotation=pi/6),
palettes=(; marker=[:rect, :circle, :diamond],
color=["lightgray", "gold", "lightblue"]))
grid[1].axis.yscale = log10
hlines!(grid[1].axis, 1.0; color="red")
hlines!(grid[2].axis, 1.0; color="red")
lg = AlgebraOfGraphics.compute_legend(grid)
push!(lg[1][1], [LineElement(color="red")])
push!(lg[2][1], "C")
Legend(fig[1, end+1], lg...)
fig
Ini menghasilkan gambar berikut:

Pada gambar tersebut kita dapat melihat bahwa Julia cukup baik pada keduanya
waktu dan ukuran kode dibandingkan dengan bahasa pemrograman lain.
Namun, hari ini saya ingin fokus pada plot.
Hal pertama adalah menunjukkan plotnya.
Jika Anda menggunakan Jupyter Notebook atau VS Code, plot hanya akan ditampilkan.
Namun, jika Anda bekerja di terminal, tampilan otomatis diaktifkan
mati secara default. Anda harus lari Makie.inline!(false) meminta
menyalakan. Setelah merilisnya setiap kali Anda mencoba untuk menunjukkan
gambar itu akan terbuka di penampil gambar default Anda.
Sekarang izinkan saya mengomentari kode plotting.
Jika Anda belum pernah menggunakan AlgebraOfGraphics.jl maka saya sarankan Anda terlebih dahulu
baca tutorial AlgebraOfGraphics.jl sebagai kode
Saya telah menggunakan relatif maju.
Garis yang menghasilkan aog_plt objek menggunakan AlgebraOfGraphics.jl
pesanan. Seperti yang Anda lihat menggunakan * kita dapat mengikat data, dengan operasi pemetaan
dan perintah visualisasi. Menarik dalam kasus yang disajikan
fakta bahwa data sumber saya berisi dua kolom :time Dan :size
yang ingin saya gambar pada subplot terpisah. Ini bukan masalah di
AlgebraOfGraphics.jl. Saya hanya perlu melewati vektor [:time, :size]
Untuk membuatnya bekerja. Setelah itu col = dims(1) => renamer(["", ""]) petunjuk
sinyal bahwa saya ingin mereka diplot dalam subplot terpisah. Iturenamer(["", ""]) nonaktifkan tampilan judul subplot seperti yang saya miliki
nama seri masih ditampilkan sebagai label sumbu y.
Sekarang perhatikan draw! meminta. Ini memasukkan spesifikasi plot
dihasilkan di AlgebraOfGraphics.jl menjadi figur Makie. Hal baiknya adalah
bahwa dimungkinkan untuk menyesuaikan plot dengan beralih axis Dan palettes
argumen kata kunci.
Kode yang sangat menarik bagi saya datang berikutnya. Itu grid Mengubah
terkait dengan objek Makie standar. Jadi nanti saya bisa sesuaikan dengan keinginan saya
menggunakan primitif Makie. Dalam hal ini, yang ingin saya lakukan adalah:
- Ubah sumbu y sel pertama menjadi skala logaritmik.
Saya dapat dengan mudah mencapai ini dengan menulisgrid[1].axis.yscale = log10. - Tambahkan dua garis horizontal khusus (mewakili bahasa C referensi)
untuk kedua plot yang saya capai menggunakanhline!meminta. - Tambahkan entri bahasa C secara manual ke keterangan plot
Saya memperoleh dengan memanipulasilgBenda.
Yang penting adalah bahkan untuk non-ahli Makie pun bisa
mencari cara untuk mengubah objek yang mendasari untuk mencapai apa yang saya inginkan
tanpa usaha yang berarti.
Tentu saja orang mungkin ingin AlgebraOfGraphics.jl menjadi graf lengkap
sistem seperti ggplot2. Namun, saya pikir pilihan yang dibuat di dalamnya benar.
Saya menghargai bahwa API AlgebraOfGraphics.jl relatif kecil.
Dengan cara ini, Anda dapat dengan mudah mempelajari cara melakukan hal-hal sederhana dan standar.
Ini juga berarti nyaman untuk melakukan analisis data eksplorasi
(saat Anda sering perlu melakukan banyak sel sederhana).
Nanti, jika saya menyiapkan plot berkualitas publikasi yang perlu saya kerjakan
beberapa kustomisasi non-standar saya dapat menggunakan fungsi Makie
untuk mencapai ini.
Inilah hal-hal utama yang saya pelajari di MakieCon 2023:
- Ekosistem Makie menawarkan banyak fungsi lanjutan
sulit ditemukan di paket plotting lainnya. Saya sering perlu mempersiapkan diri
Batch berkualitas tinggi untuk publikasi. Dalam hal ini nilai tertentu
Makie’s memungkinkan Anda menyempurnakan setiap detail plot
seperti yang Anda inginkan. - AlgebraOfGraphics.jl tidak setara dengan ggplot2
(adalah sistem grafik mandiri yang lengkap). Saya merasa lebih mudah
pikirkan AlgebraOfGraphics.jl sebagai satu set fungsi tambahan yang dibangun di atasnya
oleh Makie dan menyediakan cara mudah untuk membuat visualisasi data tabular.
Namun, nanti Anda dapat mundur ke primitif Makie untuk menyesuaikan sel lebih lanjut jika diperlukan.
Selain itu, jika Anda ingin mulai bekerja dengan ekosistem Makie, Anda perlu mengetahui bahwa:
- Penting bagi Anda untuk membaca tutorial Makie terlebih dahulu.
Untuk fleksibilitas lengkap tentang cara menata sel Anda, Makie.jl memperkenalkan
beberapa konsep (sepertiFigureatauAxismata pelajaran) yang perlu Anda pelajari jika Anda
ingin percaya diri bekerja dengannya. - Ekosistem Makie menyediakan sejumlah backend diagram yang berbeda dalam fungsionalitas.
Saya menggunakan CairoMakie.jl karena saya sering membutuhkan ubin 2D non-interaktif
kualitas publikasi. Sebagai hal yang spesifik dalam hal ini yang perlu Anda ketahui
bahwa jika Anda bekerja di terminal yang perlu Anda gunakanMakie.inline!(false)
perintah untuk mengaktifkan tampilan plot secara otomatis (ini tidak diperlukan di Jupyter Notebook
dan Kode VS) jika Anda mau (Anda juga dapat menyimpan plot Anda secara eksplisit
ke dalam file).
Sebelum menutup, saya mengucapkan terima kasih kepada Dr. Lazaro Alonso Silva yang telah mengundang saya ke acara ini.
Konferensi ini merupakan pengalaman khusus. Komunitas Makie luar biasa dan penuh dengan anggota yang luar biasa.
Saya juga sangat menghargai bantuan dari Pietro Vertechi dan Fabian Greimel
memberi saya banyak saran bermanfaat tentang cara mendapatkan hasil maksimal dari AlgebraOfGraphics.jl.
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#MakieCon #luar #biasa #juliablogger.com