Visualisasi data adalah hal yang penting dalam bekerja dengan data karena membantu orang memahami apa yang terjadi dengan data kita. Sulit untuk menyerap informasi data secara langsung dalam bentuk mentah, tetapi visualisasi dapat memicu minat dan keterlibatan orang. Inilah sebabnya mengapa mempelajari visualisasi data penting agar sukses dalam bidang data.
Matplotlib adalah salah satu library visualisasi data Python yang paling populer karena sangat fleksibel, dan Anda dapat memvisualisasikan hampir semua hal dari awal. Anda dapat mengontrol banyak aspek visualisasi Anda dengan paket ini.
Di sisi lain, Seaborn adalah paket visualisasi data Python yang dibangun di atas Matplotlib. Seaborn menawarkan kode tingkat tinggi yang jauh lebih sederhana dengan berbagai tema bawaan di dalam paket. Paket ini sangat bagus jika Anda menginginkan visualisasi data yang cepat dengan tampilan yang menarik.
Dalam artikel ini, kita akan membahas kedua paket tersebut dan mempelajari cara memvisualisasikan data Anda dengan paket ini. Mari kita mulai.
Visualisasi dengan Matplotlib
Seperti yang disebutkan di atas, Matplotlib adalah paket Python yang serbaguna di mana kita dapat mengontrol berbagai aspek visualisasi. Paket ini didasarkan pada bahasa pemrograman Matlab, tetapi kita menerapkannya di Python.
Library Matplotlib biasanya sudah tersedia di environment Anda, terutama jika Anda menggunakan Anaconda. Jika tidak, Anda dapat menginstalnya dengan kode berikut.
pip install matplotlib
Setelah instalasi, kita akan mengimpor paket Matplotlib untuk visualisasi dengan kode berikut.
import matplotlib.pyplot as plt
Mari kita mulai dengan plotting dasar dengan Matplotlib. Sebagai permulaan, saya akan membuat data sampel.
import numpy as np
x = np.linspace(0,5,21)y = x**2
Dengan data ini, kita akan membuat line plot dengan paket Matplotlib.
plt.plot(x, y, 'b')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Sample Plot')
Pada kode di atas, kita memasukkan data ke dalam fungsi matplotlib (x dan y) untuk membuat line plot sederhana dengan garis biru. Selain itu, kita mengontrol axis label dan title dengan kode di atas.
Mari kita coba membuat beberapa plot matplotlib dengan fungsi subplot.
plt.subplot(1,2,1)
plt.plot(x, y, 'b--')
plt.title('Subplot 1')
plt.subplot(1,2,2)
plt.plot(x, y, 'r')
plt.title('Subplot 2')
Pada kode di atas, kita membuat dua plot berdampingan. Fungsi subplot mengontrol posisi plot; misalnya, plt.subplot(1,2,1) berarti kita akan memiliki dua plot dalam satu baris (parameter pertama) dan dua kolom (parameter kedua). Parameter ketiga adalah untuk mengontrol plot mana yang sedang kita rujuk. Jadi plt.subplot(1,2,1) berarti plot pertama dari satu baris dan dua kolom plot.
Itulah dasar-dasar fungsi Matplotlib, tetapi jika kita ingin lebih mengontrol visualisasi Matplotlib, kita perlu menggunakan Object Oriented Method (OOM). Dengan OOM, kita akan menghasilkan visualisasi langsung dari objek gambar dan memanggil atribut apa pun dari objek yang ditentukan.
Saya akan memberi Anda contoh visualisasi dengan Matplotlib OOM.
buat figure instance (Kanvas)
fig = plt.figure()
#tambahkan axes ke kanvas
ax = fig.add_axes([0.1, 0.1, 0.7, 0.7]) #kiri, bawah, lebar, tinggi (berkisar dari 0 hingga 1)
#tambahkan plot ke axes di dalam kanvas
ax.plot(x, y, 'b')
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
ax.set_title('Plot with OOM')
Hasilnya mirip dengan plot yang kita buat sebelumnya, tetapi kodenya lebih kompleks. Pada awalnya, tampaknya kontraproduktif, tetapi menggunakan OOM memungkinkan kita mengontrol hampir semua hal dengan visualisasi kita. Misalnya, dalam plot di atas, kita dapat mengontrol di mana letak axes di dalam kanvas.
Untuk melihat perbedaan menggunakan OOM dibandingkan dengan fungsi plotting normal, mari kita letakkan dua plot dengan axes yang saling tumpang tindih.
#buat figure instance (Kanvas)
fig = plt.figure()
#tambahkan dua axes ke kanvas
ax1 = fig.add_axes([0.1, 0.1, 0.7, 0.7])
ax2 = fig.add_axes([0.2, 0.35, 0.2, 0.4])
#tambahkan plot ke masing-masing axes di dalam kanvas
ax1.plot(x, y, 'b')
ax1.set_xlabel('X label Ax 1')
ax1.set_ylabel('Y label Ax 1')
ax1.set_title('Plot with OOM Ax 1')
ax2.plot(x, y, 'r--')
ax2.set_xlabel('X label Ax 2')
ax2.set_ylabel('Y label Ax 2')
ax2.set_title('Plot with OOM Ax 2')
Pada kode di atas, kita menentukan objek kanvas dengan fungsi plt.figure dan menghasilkan semua plot ini dari objek figure. Kita dapat menghasilkan sebanyak mungkin axes dalam satu kanvas dan meletakkan plot visualisasi di dalamnya.
Kita juga bisa secara otomatis membuat objek figure dan axes menggunakan fungsi subplot.
fig, ax = plt.subplots(nrows = 1, ncols =2)
ax[0].plot(x, y, 'b--')
ax[0].set_xlabel('X label')
ax[0].set_ylabel('Y label')
ax[0].set_title('Plot with OOM subplot 1')
Menggunakan fungsi subplots, kita membuat figures dan daftar objek axes. Pada fungsi di atas, kita menentukan jumlah plot dan posisi plot dalam satu baris dan dua kolom.
Untuk objek axes, itu adalah daftar semua axes untuk plot yang dapat kita akses. Dalam kode di atas, kita mengakses objek pertama dalam daftar untuk membuat plot. Hasilnya adalah dua plot, satu diisi dengan line plot sementara yang lain hanya axes saja.
Karena subplots menghasilkan daftar objek axes, Anda dapat mengiterasinya dengan cara yang sama seperti kode di bawah ini.
fig, axes = plt.subplots(nrows = 1, ncols =2)
for ax in axes:
ax.plot(x, y, 'b--')
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
ax.set_title('Plot with OOM')
plt.tight_layout()
Anda dapat mengubah-ubah kode untuk menghasilkan plot yang dibutuhkan. Selain itu, kita menggunakan fungsi tight_layout karena ada kemungkinan plot tumpang tindih.
Mari kita coba beberapa parameter dasar yang dapat kita gunakan untuk mengontrol plot Matplotlib. Pertama, mari kita coba mengubah ukuran kanvas dan piksel.
fig = plt.figure(figsize = (8,4), dpi =100)
Parameter figsize menerima pasangan dua angka (lebar, tinggi) di mana hasilnya mirip seperti plot di atas.
Selanjutnya, mari kita coba menambahkan legenda ke plot.
fig = plt.figure(figsize = (8,4), dpi =100)
ax = fig.add_axes([0.1, 0.1, 0.7, 0.7])
ax.plot(x, y, 'b', label = 'First Line')
ax.plot(x, y/2, 'r', label = 'Second Line')
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
ax.set_title('Plot with OOM and Legend')
plt.legend()
Dengan menetapkan parameter label ke plot dan menggunakan fungsi legend, kita dapat menampilkan label sebagai legenda.
Terakhir, kita dapat menggunakan kode berikut untuk menyimpan plot kita.
fig.savefig('visualization.jpg')
Ada banyak plot khusus di luar line plot yang ditunjukkan di atas. Kita dapat mengakses plot ini menggunakan fungsi-fungsi ini. Mari kita coba beberapa plot yang mungkin membantu pekerjaan Anda.
Scatter Plot
Selain line plot, kita dapat membuat scatter plot untuk memvisualisasikan hubungan fitur menggunakan kode berikut.
plt.scatter(x,y)
Histogram Plot
Histogram Plot memvisualisasikan distribusi data yang diwakili dalam bin.
plt.hist(y, bins = 5)
Boxplot
Boxplot adalah teknik visualisasi yang mewakili distribusi data menjadi kuartil.
plt.boxplot(x)
Pie Plot
Pie Plot adalah plot berbentuk lingkaran yang mewakili proporsi numerik dari plot kategorikal — misalnya, frekuensi nilai kategorikal dalam data.
freq = [2,4,1,3]
fruit = ['Apple', 'Banana', 'Grape', 'Pear']
plt.pie(freq, labels = fruit)
Masih ada banyak plot khusus dari library Matplotlib yang dapat Anda periksa di sini.
Visualisasi dengan Seaborn
Seaborn adalah paket Python untuk visualisasi statistik yang dibangun di atas Matplotlib. Keunggulan Seaborn adalah kemampuannya untuk menyederhanakan pembuatan visualisasi dengan gaya yang menarik. Paket ini juga bekerja sama dengan Matplotlib, karena banyak API Seaborn terhubung dengan Matplotlib.
Mari kita coba menggunakan paket Seaborn. Jika Anda belum menginstal paketnya, Anda dapat melakukannya dengan menggunakan kode berikut.
pip install seaborn
Seaborn memiliki API bawaan untuk mendapatkan dataset sampel yang dapat kita gunakan untuk menguji paketnya. Kita akan menggunakan dataset ini untuk membuat berbagai visualisasi dengan Seaborn.
import seaborn as sns
tips = sns.load_dataset('tips')tips.head()
Menggunakan data di atas, kita akan mengeksplorasi plot-plot Seaborn, termasuk plot distribusi, kategorikal, relation, dan matriks.
Distributional Plots
Plot pertama yang akan kita coba dengan Seaborn adalah distributional plot untuk memvisualisasikan distribusi fitur numerik. Kita dapat melakukannya dengan kode berikut.
sns.displot(data = tips, x = 'tip')
Secara default, fungsi displot akan menghasilkan plot histogram. Jika kita ingin memperhalus plot, kita dapat menggunakan parameter KDE.
sns.displot(data = tips, x = 'tip', kind = 'kde')
Distributional plot juga dapat dibagi menurut nilai kategorikal dalam DataFrame menggunakan parameter hue.
sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker')
Kita bahkan dapat membagi plot lebih lanjut dengan parameter row atau col. Dengan parameter ini, kita menghasilkan beberapa plot yang dibagi dengan kombinasi nilai kategorikal.
sns.displot(data = tips, x = 'tip', kind = 'kde', hue = 'smoker', row = 'time', col = 'sex')
Cara lain untuk menampilkan distribusi data adalah dengan menggunakan boxplot. Seaborn dapat memfasilitasi visualisasi dengan mudah dengan kode berikut.
sns.boxplot(data = tips, x = 'time', y = 'tip')
Menggunakan violin plot, kita dapat menampilkan distribusi data yang menggabungkan boxplot dengan KDE.
sns.violinplot(data = tips, x = 'time', y = 'tip')
Terakhir, kita dapat menampilkan titik data ke plot dengan menggabungkan violin plot dan swarm plot.
sns.violinplot(data = tips, x = 'time', y = 'tip')
sns.swarmplot(data = tips, x = 'time', y = 'tip', palette = 'Set1')
Categorical Plots
Categorical Plots adalah berbagai API Seaborn yang digunakan untuk menghasilkan visualisasi dengan data kategorikal. Mari kita eksplorasi beberapa plot yang tersedia.
Pertama, kita akan mencoba membuat count plot.
sns.countplot(data = tips, x = 'time')
Count plot akan menampilkan bar dengan frekuensi nilai kategorikal. Jika kita ingin menampilkan jumlah angka dalam plot, kita perlu menggabungkan fungsi Matplotlib ke dalam API Seaborn.
p = sns.countplot(data = tips, x = 'time')
p.bar_label(p.containers[0])
Kita dapat memperluas plot lebih lanjut dengan parameter hue dan menampilkan nilai frekuensi dengan kode berikut.
p = sns.countplot(data = tips, x = 'time', hue = 'sex')
for container in p.containers:
ax.bar_label(container)
Selanjutnya, kita akan mencoba membuat barplot. Barplot adalah plot kategorikal yang menunjukkan agregasi data dengan error bar.
sns.barplot(data = tips, x = 'time', y = 'tip')
Barplot menggunakan kombinasi fitur kategorikal dan numerik untuk memberikan statistik agregasi. Secara default, barplot menggunakan fungsi agregasi rata-rata dengan error bar confidence interval 95%.
Jika kita ingin mengubah fungsi agregasi, kita dapat memasukkan fungsi ke dalam parameter estimator.
import numpy as np
sns.barplot(data = tips, x = 'time', y = 'tip', estimator = np.median)
Relational Plots
Relational Plots adalah teknik visualisasi untuk menunjukkan hubungan antara fitur. Relational Plots utamanya digunakan untuk mengidentifikasi pola yang ada dalam dataset.
Pertama, kita akan menggunakan scatter plot untuk menunjukkan hubungan antara fitur numerik tertentu.
sns.scatterplot(data = tips, x = 'tip', y = 'total_bill')
Kita dapat menggabungkan scatter plot dengan distributional plot menggunakan joint plot.
sns.jointplot(data = tips, x = 'tip', y = 'total_bill')
Terakhir, kita dapat secara otomatis memplot hubungan berpasangan antara fitur-fitur dalam DataFrame menggunakan pairplot.
sns.pairplot(data = tips)
Matrix Plots
Matrix Plots adalah visualisasi data berbentuk matriks dengan kode warna. Ini digunakan untuk melihat hubungan antara fitur atau membantu mengenali kelompok (cluster) dalam data.
Misalnya, kita memiliki matriks data korelasi dari dataset kita.
tips.corr()
Kita bisa memahami dataset di atas dengan lebih baik jika kita merepresentasikannya dalam plot berwarna. Itulah mengapa kita akan menggunakan heatmap plot.
sns.heatmap(tips.corr(), annot = True)
Plot matriks juga dapat menghasilkan hierarchal clustering plot yang menyimpulkan nilai-nilai dalam dataset kita dan mengelompokkannya sesuai dengan kesamaan yang ada.
sns.clustermap(tips.pivot_table(values = 'tip', index = 'size', columns = 'day').fillna(0))
Kesimpulan
Visualisasi data adalah bagian penting dari dunia data karena membantu audiens memahami apa yang terjadi dengan data dengan cepat. Paket standar Python untuk visualisasi data adalah Matplotlib dan Seaborn. Dalam artikel ini, kita telah mempelajari penggunaan dasar dari paket-paket tersebut dan memperkenalkan beberapa visualisasi yang dapat membantu pekerjaan kita.
Comments