Berkenalan Dengan Seaborn Python | Belajar Mudah Visualisasi Data Bagian 0
Pada artikel Kali ini kita akan Berkenalan Dengan Seaborn Python, yaitu salah satu library pada Python untuk visualisasi data. Libary ini sangat berguna ketika Anda bekerja untuk memahami suatu data yang sederhana maupun kompleks. Oleh karena itu, tunggu apalagi. Mari kita membahas mengenai Seaborn.
Berkenalan Dengan Seaborn
Seaborn adalah library untuk membuat grafik dan statistik dengan menggunakan Python. Library ini di bangun berdasarkan library matplotlib serta terintegrasi dengan struktur data pada panda.
Berikut adalah beberapa fungsi yang dapat di lakukan oleh seaborn:
- API berorientasi set data untuk memeriksa hubungan antara beberapa variabel
- Dukungan khusus untuk menggunakan variabel kategori untuk menunjukkan observasi atau statistik agregat
- Pilihan untuk memvisualisasikan distribusi univarian atau bivarian dan untuk membandingkannya di antara subkumpulan data
- Estimasi otomatis dan plot model regresi linier untuk berbagai jenis variabel dependen
- Tampilan yang nyaman pada keseluruhan struktur kumpulan data yang kompleks
- Abstraksi tingkat tinggi untuk menyusun kisi multi-plot yang memungkinkan Anda membuat - visualisasi kompleks dengan mudah
- Kontrol yang simple untuk styling gambar matplotlib dengan beberapa tema bawaan
- Tool untuk memilih palet warna untuk menampilkan pola sesuai denga aslinya dalam data Anda
Seaborn bertujuan agar visualisasi menjadi bagian penting dari proses eksplorasi dan pemahaman data. Seaborn berorientasi pada fungsi plotting berdasarkan dataset yang beroperasi pada dataframe
dan array yang berisi seluruh dataset yang secara internal melakukan pemetaan semantik dan agregasi statistik yang diperlukan untuk menghasilkan grafik informatif.
Instalasi Seaborn
Instalasi Seaboard dapat dilakukan dengan dua cara yaitu:
pip install seaborn
Atau jika Anda menggunakan Anaconda distribution
conda install seaborn
Dependencies
Ada beberapa dependencies yang perlu diperhatikan sebelum menjalankan seaborn pada komputer/laptop Anda.
Diantaranya:
- Python 3.6 +
- numpy
- scipy
- pandas
- matplotlib
optional:
- statsmodels, di gunakan untuk membuat grafik regresi
- fastcluster untuk klustering matriks yang besar
Memulai Seaborn
Setelah Anda selesai menginstall Seaborn, maka saat nya untuk berkenalan dengan seaborn Python. Seaborn memiliki contoh dataset yang dapat Anda coba. Untuk memulainya silahkan eksekusi perintah ini. (Anda dapat menggunakan Jupyter notebook atau Python IDE lainnya, pada artikel ini, pada artikel ini adalah menggunakan Jupyter Notebook karena kelebihannya dapat di eksekusi pada cell dan menampilkan hasilnya pada cell dibawahnya).
import seaborn as snsdf = sns.load_dataset("penguins")sns.pairplot(df, hue="species")
Jika Anda menggunakan Jupyter Notebook, pastikan menyalakan matplotlib mode untuk dapat langsung melihat hasilnya. Namun, jika tidak Anda harus memanggil fungsi matplotlib.pyplot.show()
di bawah nya. Perintah nya adalah:
import matplotlib.pyplot as pltplt.show()
Overview Fungsi Plot Pada Seaborn
Semakin sering Anda berinteraksi dan berkenalan dengan seaborn Python, maka Anda akan melihat serangkaian fungsi plot. Pada artikel selanjutnya kita akan mengeksplorasi fitur spesifik yang dapat dilakukan oleh masing-masing fungsi. Artikel ini hanya akan memperkenalkan kepada Anda mengenai berbagai jenis fungsi yang akan Anda hadapi dalam menggunakan Seaborn.
Fungsi Sama Untuk Tugas Serupa
Penamaan pada Seaborn adalah flat; seluruh fungsionalitas dapat di akses di dengan sederhana. Sebenarnya, kode pada Seaborn itu sendiri terstruktur secara hierarki, dengan fungsi modul untuk mencapai tujuan visualisasi serupa dengan cara yang berbeda. Pada sebagian besar dokumentasi mengenai seaborn yang telah di susun oleh para maintenernya. Maka, Anda akan menemukan nama-nama seperti "relasional", "distribusi", dan "kategorikal".
Sebagai contoh, modul distribusi untuk mendefinisikan fungsi-fungsi yang memiliki spesialisasi dalam merepresentasikan distribusi data. Termasuk metode yang sudah kita kenal kenal dengan baik seperti histogram:
penguins = sns.load_dataset("penguins")sns.histplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")
Bersamaan dengan opsi yang sama, namun mungkin kita kurang familiar, seperti pada contoh kernel density estimation :
Fungsi yang berada di dalam modul memiliki banyak kode yang mendasari dan menawarkan fitur serupa yang mungkin tidak ada pada komponen lain dari library (seperti multiple="stack"
pada contoh di atas). Library ini dirancang untuk memfasilitasi peralihan di antara representasi visual yang berbeda saat Anda menelusuri kumpulan data, karena representasi yang berbeda sering kali memiliki kekuatan dan kelemahan yang saling melengkapi.
Fungsi Figure-Level vs Axes-Level
Selain dengan modul yang berbeda, ada yang dinamakan cross-cutting classification dari fungsi Seaborn sebagai "axes-level" atau "figure-level". Contoh di atas adalah fungsi "axes-level". Fungsi ini untuk membuat plot data ke dalam satu object matplotlib.pyplot.Axes
, yang merupakan nilai dari fungsi tersebut.
Sebaliknya, "figure-level" berinterface dengan matplotlib melalui objek seaborn, biasanya adala FacetGrid
, yang mengelola suatu gambar. Setiap modul memiliki fungsi "figure-level" tunggal, yang menawarkan satu antarmuka ke dalam berbagai fungsi "axes-level".
Sebagai contoh, displot()
adalah fungsi "figure-level" untuk modul distribusi. Secara default adalah untuk menggambar suatu histogram, menggunakan kode yang sama seperti pada histplot():
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")
Untuk membuat kernel density plot
, Anda dapat menggunakan kode yang sama seperti pada kdeplot()
, lalu pilih menggunakan parameter kind parameter kind
:
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack", kind="kde")
Anda akan melihat bahwa plot figure-level sebagian besar terlihat seperti pada axes-level, namun ada beberapa perbedaan. Terutama pada penempatan posisi legenda yang berada di luar plot. Selain itu, mereka pun memiliki bentuk yang sedikit berbeda
Fitur yang paling berguna pada fungsi figure-level adalah kemudahannya dalam mebuat gambar dengan banyak sub-plot.. Misalnya, dibanding menumpukkan tiga plot distribusi untuk setiap spesies penguin dalam satu sumbu yang sama, kita dapat memisahkannya dengan memplot setiap distribusi pada seluruh kolom gambar, seperti pada contoh di bawah ini:
sns.displot(data=penguins, x="flipper_length_mm", hue="species", col="species")
Fungsi figure-level membungkus axes-level, lalu meneruskan argumen kata kunci yang spesifik (seperti ukuran bin pada histogram) kepada fungsi yang mendasarinya. Ini berarti mereka cukup fleksibel, namun ada sisi negatifnya, yaitu: parameter khusus ini tidak muncul pada docstrings. Beberapa fitur mungkin sulit untuk dapat ditemukan, Anda mungkin perlu melihat d dokumentasi yang lengkap sebelum memahami bagaimana cara untuk mencapai tujuan tertentu dalam penggunaannya.
Fungsi axes-level membuat plot self-contained
Fungsi axes-level memiliki kemampuan untuk bertindak sebagai pengganti drop-in pada fungsi yang terdapat pada matplotlib. Fungsi ini dapat menambahkan label pada sumbu dan legenda secara otomatis tanpa mengubah apa pun di luar sumbu tempat mereka ditarik. Ini berarti fungsi tersebut dapat disusun menjadi angka kompleks pada matplotlib dengan hasil yang dapat di prediksi.
Fungsi axes-level memanggil secara internal pada matplotlib.pyplot.gca()
, yang menghubungkan ke interface "state-machine" pada matplotlib. Sehingga, plot akan di gambar pada sumbu "currently-active". Selain itu, mereka pun menerima ax=
argumen, yang terintegrasi dengan interface berorientasi objek, serta memungkinkan Anda untuk menentukan dengan tepat ke mana arah plot harus pergi:
f, axs = plt.subplots(1, 2, figsize=(8, 4), gridspec_kw=dict(width_ratios=[4, 3]))sns.scatterplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", ax=axs[0])sns.histplot(data=penguins, x="species", hue="species", shrink=.8, alpha=.8, legend=False, ax=axs[1])f.tight_layout()
Fungsi figure-level
Sebaliknya, fungsi figure-level tidak dapat (dengan mudah) di buat dengan menggunakan plot lain. Secara desain, fungsi ini "memiliki" gambar mereka sendiri, termasuk inisialisasi, sehingga tidak ada disarankan untuk menggunakan fungsi figure-level dalam menggambar plot kepada sumbu yang ada. Keterbatasan ini memungkinkan fungsi figure-level untuk mengimplementasikan fitur lain seperti meletakkan legenda di luar plot.
Namun demikian, ada kemungkinan untuk melampaui fungsi yang terdapat pada figure-level dengan cara mengakses sumbu matplotlib pada objek yang dikembalikan, lalu menambahkan elemen lain ke dalam plot seperti ini:
import matplotlib.pyplot as plttips = sns.load_dataset("tips")g = sns.relplot(data=tips, x="total_bill", y="tip")x = np.linspace(0, 10, 100)plt.plot(x, x + 1, linestyle='dashed', color="r")
Menyesuaikan plot dari fungsi figure-level
Fungsi figure-level menghasilkan sebuah FacetGrid
instance, yang memiliki beberapa metode untuk menyesuaikan atribut plot dengan cara pengorganisasian subplot. Misalnya, Anda dapat mengubah label pada sumbu eksternal hanya denga menggunakan satu baris kode:
g = sns.relplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", col="sex")g.set_axis_labels("Panjang Flipper (mm)", "Panjang Bill (mm)")
Meskipun mudah, hal ini menambahkan sedikit kerumitan, karena Anda perlu ingat bahwa metode ini bukan bagian dari API matplotlib dan hanya ada pada saat menggunakan fungsi figure-level.
Menentukan ukuran gambar
Untuk menambah atau mengurangi ukuran plot pada matplotlib, Anda dapat mengatur lebar dan tinggi dari seluruh gambar, baik ketika di dalam rcParams global, ketika sedang menyiapkan plot (misalnya dengan parameter figsize
dari matplotlib.pyplot.subplots()
), atau dengan memanggil metode pada objek gambar (misalnya matplotlib.Figure.set_size_inches()
). Saat menggunakan fungsi axes-level pada Seaborn, aturan yang sama akan berlaku, yaitu: ukuran plot ditentukan oleh ukuran gambar yang menjadi bagiannya dan layout sumbu pada gambar tersebut.
Saat menggunakan fungsi figure-level, ada beberapa perbedaan utama. Pertama, fungsi itu sendiri memiliki parameter untuk mengontrol ukuran gambar. Kedua, height
dan aspect
, memiliki parameter ukuran sedikit berbeda dibandingkan width
. Parameter height
dalam matplotlib (menggunakan parameter pada seaborn, width = height * apsect
). Yang paling perlu diperhatikan adalah, parameter tersebut sesuai dengan ukuran setiap subplot , bukan ukuran gambar secara keseluruhan
Untuk mengilustrasikan perbedaan antara kedua pendekatan ini, berikut adalah output default dari matplotlib.pyplot.subplots() dengan satu subplot:
f, ax = plt.subplots()
f, ax = plt.subplots(1, 2, sharey=True)
Sebaliknya, plot yang dibuat oleh fungsi figure-level akan berbentuk persegi. Untuk mendemonstrasikannya, mari kita membuat plot kosong dengan menggunakan FacetGrid
secara langsung. Hal ini terjadi di balik layar dalam fungsi seperti relplot(), displot()
atau catplot()
:
g = sns.FacetGrid(penguins)
Ketika menambahkan kolom, gambar tersebut akan menjadi lebih lebar, sehingga subplotnya akan memiliki ukuran dan bentuk yang sama:
g = sns.FacetGrid(penguins, col="sex")
Dan Anda dapat menyesuaikan ukuran dan bentuk setiap subplot tanpa memperhitungkan jumlah total baris dan kolom pada gambar:
g = sns.FacetGrid(penguins, col="sex", height=3.5, aspect=.75)
Hasilnya adalah Anda dapat menetapkan variabel faceting
tanpa berhenti memikirkan tentang bagaimana Anda perlu menyesuaikan ukuran gambar total. Kelemahannya adalah, ketika Anda ingin mengubah ukuran gambar, Anda perlu mengingat bahwa segala sesuatunya bekerja sedikit berbeda dari yang dilakukan oleh matplotlib.
Kelebihan relatif dari fungsi figure-level
Keuntungan | Kekurangan |
---|---|
Faceting mudah oleh variabel data | Banyak parameter tidak ada dalam tanda tangan fungsi |
Legenda di luar plot secara default | Tidak boleh menjadi bagian dari gambar matplotlib yang lebih besar |
Kustomisasi tingkat gambar yang mudah | API berbeda dari matplotlib |
Selain itu, fungsi figure-level memiliki beberapa kompleksitas tambahan yang dapat membuat hal-hal menjadi lebih membingungkan bagi pemula. Namun, dengan fitur-fitur yang berbeda, memberinya keunggulan tambahan. Dokumentasi resmi tutorial dari Seaborn, sebagian besar menggunakan fungsi figure-level, karena fungsi tersebut menghasilkan plot yang lebih bersih, dan direkomendasikan untuk digunakan pada aplikasi yang lebih besar lagi. Satu situasi di mana fungsi ini bukan pilihan yang baik adalah ketika Anda perlu membuat sesuatu yang kompleks dan mandiri untuk menyusun berbagai jenis plot yang berbeda. Pada titik ini, disarankan untuk menyiapkan gambar dengan menggunakan matplotlib secara langsung dan mengisi masing-masing komponen menggunakan fungsi axis-level.
Menggabungkan beberapa tampilan pada data
Dua fungsi pembuatan plot yang penting pada Seaborn tidak cocok dengan skema klasifikasi yang telah di bahas pada bagian sebelumnya. Fungsi-fungsi ini, jointplot() dan pairplot() , menggunakan berbagai jenis plot dari modul yang berbeda untuk merepresentasikan berbagai aspek kumpulan data dalam satu gambar. Kedua plot terserbut adalah fungsi figure-level dan membuat gambar dengan jumlah subplot yang banyak secara default. Namun keduanya menggunakan objek yang berbeda dalam mengelola gambar: JointGrid dan PairGrid.
jointplot() berfungsi untuk memplot hubungan atau distribusi gabungan dua variabel sambil menambahkan sumbu marginal yang menunjukkan distribusi univarian dari masing-masing variabel secara terpisah:
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")
Sama seperti hal nya pada pairplot() - Fungsi ini menggabungkan gambar gabungan dan marginal - Tidak hanya terfokus pada satu hubungan antar data, melainkan memvisualisasikan setiap kombinasi secara bersamaan.
sns.pairplot(data=penguins, hue="species")
Di belakang layar, fungsi ini menggunakan fungsi axes-level yang telah Anda temui pada scatterplot() dan kdeplot(). Fungsi ini pun memiliki parameter kind
yang memungkinkan Anda dengan cepat menukarnya ke dalam representasi yang berbeda:
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", kind="hist")
Kesimpulan
Pada artikel ini Anda telah berkenalan dengan seaborn Python, yang merupakan salah satu library yang paling sering digunakan untuk visualisasi data menggunakan Python. Anda telah mengetahui beberapa fungsi dasar pada library ini. Namun, masih banyak yang akan kita bahas pada website ini mengenai Seaborn. Oleh karena itu, tetap datangi website ini untuk mendapatkan update terbaru dan tidak terlewatkan.
Comments
Post a Comment