MakieCon 2023 luar biasa!  |  juliablogger.com

 – Beragampengetahuan
8 mins read

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:

tolok ukur

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. Itu
renamer(["", ""]) 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 menulis grid[1].axis.yscale = log10.
  • Tambahkan dua garis horizontal khusus (mewakili bahasa C referensi)
    untuk kedua plot yang saya capai menggunakan hline! meminta.
  • Tambahkan entri bahasa C secara manual ke keterangan plot
    Saya memperoleh dengan memanipulasi lg Benda.

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 (seperti Figure atau Axis mata 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 gunakan Makie.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.

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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *