Data Visualization with Python Matplotlib for Beginner — Part 1
Halo semua, jumpa lagi bersama saya. Kali ini kita akan membahas mengenai visualisasi pada python menggunakan library matplotlib. Pembahasan kali ini merupakan salah satu modul dari Data Analys Career Track dari DQLab.id yaitu Data Visualization with Python Matplotlib for Beginner — Part 1.
DQLab.id sendiri merupakan situs belajar Data Science yang sangat saya rekomendasikan untuk kamu yang mau menjadi seorang Data Scientist. Pada DQLab.id kita bisa menjalankan kode yang kita tulis langsung pada halaman tersebut tanpa perlu install aplikasi tambahan, jadi sangat memudahkan kita yang ingin kepraktisan.
Oke langsung saja kita ke pembahasan inti, sebenarnya apa itu visualisasi? Visualisasi pada Python merupakan suatu transformasi data dari bentuk tabel menjadi suatu grafik ataupun gambar yang berguna untuk memudahkan kita dalam memahami data yang disajikan.
Ada pepatah mengatakan “Tak kenal maka tak sayang”. Maka dari itu kita akan berkenalan dengan suatu library yang sangat familiar digunakan dalam visualisasi di Python, yaitu Matplotlib.
Apa dan kenapa Matplotlib?
Matplotlib adalah suatu library pada python yang digunakan untuk visualisasi data. Visualisasi sangat berguna untuk menampilkan karakteristik dari data yang dimiliki. Seringkali kita kurang paham data yang disajikan dalam bentuk tabel, maka visualisasi disini akan sangat membantu.
Pada pembahasan kali ini, ada beberapa hal yang dapat dilakukan oleh matplotlib, diantaranya :
1. Pengolahan dataset (biasanya menggunakan library NumPy dan Pandas)
2. Membuat visualisasi dalam bentuk grafik
3. Melakukan modifikasi komponen grafik
4. Menyimpan plot visualisasi yang sudah dibuat
Pengenalan Dataset
Kali ini kita akan menggunakan dataset dari suatu transaksi supermarket pada tahun 2019. Dataset yang digunakan yaitu bernama retail_raw_reduced berformat csv.
Kita akan coba membaca dataset tersebut dengan menggunakan fungction read_csv dan simpan data pada variabel dataset. Lihat juga jumlah baris dan kolom dari dataset menggunakan function shape lalu tampilkan lima data terakhir menggunakan function head(). Jangan lupa import library pandas nya yah :)
Lalu hasilnya adalah seperti berikut :
Penjelasan Dataset
Pada dataset yang sudah kita baca diatas, terdapat beberapa kolom, sekarang kita akan menjelaskan untuk tiap-tiap kolom .
- order_id : ID dari order/ transaksi, 1 transaksi bisa terdiri dari beberapa produk, tapi hanya dilakukan oleh 1 customer
- order_date : tanggal terjaidnya order/transaksi
- customer_id : ID dari pembeli, bisa jadi 1 customer melalukan beberapa kali transaksi
- city : kota terjadinya transaksi
- province : provinsi (berdasarkan city)
- product_id : ID dari suatu product
- brand : merk dari product
- quantity : kualitas/banyaknya product yang dibeli
- item_price : harga suatu product (dalam IDR)
Penambahahan Kolom Order Month pada Dataset
Selanjutnya kita akan membuat kolom baru yaitu order_month, karena pada dataset sebelumnya belum ada kolom tersebut dengan menggunakan kode sebagai berikut.
Penjelasan dari kode diatas yaitu :
- dataset[‘order_month’] : digunakan untuk membuat kolom order_month
- aplly dan lambda : membuat kolom order_month berdasarkan nilai dari kolom order_date
- function datetime.datetime.strptime : mengubah date/time dalam bentuk string menjadi type data datetime
- Function strftime : mengubah format suatu data datetime menjadi format ‘%Y-%m’ yang diambil dari kolom order_date
Hasil dari kode diatas akan menampilkan 5 data teratas.
Terlihat bahwa terdapat penambahan kolom order_month dengan nilai merupakan tahun dan bulan saja.
Penambahan Kolom GMV pada Dataset
Selanjutnya kita akan membuat kolom GMV yang isinya merupakan nilai dari hasil perkalian kolom item_price dan quatity. Kita bisa menggunakan fungsi aplly & lambda, tetapi kita bisa juga langsung mengalikan kedua kolom tersebut. Selanjutnya tampilkan 5 data teratas.
Jika di run hasilnya sebagai berikut :
Membuat Data Aggregat
Selanjutnya kita membuat variabel baru bernama monthly_amount yang nanti akan digunakan untuk membuat plot. Kita akan melakukan grouping kolom order_month menggunakan function groupby(), lalu hasil grouping tersebut kita jumlahkan untuk mendapatkan total gmv pada bulan tersebut menggunakan function sum().
Jika dijalankan akan menghasilan tampilan sebagai berikut :
Plot Pertama : Membuat Line Chart Trend Pertumbuhan GMV
Selanjutnya kita akan menggunakan library matplotlib. Cara standar menggunakan matplotlib yaitu dengan memanggil function plt.plot() lalu definisikan nilai di sumbu-X dan sumbu-Y. Dalam kasus ini definisikan kolom order_month pada sumbu-X (parameter pertama) dan kolom gmv pada sumbu-Y (parameter kedua). Lalu panggil function plt.show() untuk menampilkan hasil plotting.
Selain contoh plotting diatas, kita juga bisa melakukan plotting dengan langsung memanggil function plot() pda data pandas yang sudah dibuat, dengan kata lain tidak perlu membuat variabel baru. Caranya seperti berikut :
Jika dijalankan kedua cara diatas akan menghasilakn grafik line chart yang sama seperti berikut.
Anatomi Figure
Sangat penting kita mengenal anatomi atau komponen apa saja dari sebuah figure, guna nantinya memudahkan dalam potting dan juga kostumisasi grafik yang akan dibuat. Berikut merupakan contoh gambar anatomi dari sebuah figure.
Penjelasan :
- city : kota terjadinya transaksi
- Figure : keseluruhan visualisasi yang kita plot
- Sedangkan satu plot (yang dibuat saat memanggil .plot() atau .scatter()) disebut Axes. Sebuah Figure bisa terdiri dari beberapa Axes.
- Setiap Axes biasanya memiliki sumbu-X (X-axis) dan sumbu-Y (Y-axis). Masing-masing sumbu memiliki komponen sebagai berikut:
- Axis Label: Nama dari sumbu yang ditampilkan.
- Tick: Penanda berupa titik/garis kecil yang berjajar di sumbu, sebagai referensi skala nilai.
- Tick Label: Tulisan di tiap tick yang menyatakan nilainya.
- Isi grafik bisa berupa line (untuk line plot), atau marker (untuk scatter plot), bisa juga bentuk lain seperti bar (untuk bar plot / histogram).
- Grid untuk mempermudah melihat tick yang sejajar, dan Text untuk memberikan informasi tambahan berbentuk teks di grafik
Untuk lebih lengkapnya bisa dilihat dilink berikut
Mengubah Size Figure
Untuk merubah ukuran grafik, dapat ditambahkan kode berikut sebelum melakukan plotting grafik.
plt.figure(figsize=(15, 5))
Sehingga full kodenya seperti berikut :
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Kode diatas akan merubah panjang grafik menjadi 15 inch, dan lebar 5 inch.
Menambahkan Title dan Axis Labels
Selanjutnya kita akan menambahkan judul (title) grafik dan label pada sumbu-X dan sumbu-Y (axis labels) dengan perintah berikut sebelum kode plt.show():
plt.title(‘Monthly GMV Year 2019’)plt.xlabel(‘Order Month’)plt.ylabel(‘Total GMV’)
Hasilnya dari kode diatas akan menghasilkan grafik sebagai berikut :
Kostumisasi Title dan Axis Labels
Selanjutnya kita akan mengkostumisasi title dan axis labels yang sudah kita buat dengan kode seperti berikut :
plt.title(‘Monthly GMV Year 2019’, loc=’center’, pad=40, fontsize=20, color=’blue’)plt.xlabel(‘Order Month’, fontsize=15)plt.ylabel(‘Total Amount’, fontsize=15)
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Penjelasan dari parameter yang dapat digunakan diatas yaitu :
- loc : digunakan untuk menentukan posisi title, misalnya ‘left’ untuk title disebelah kiri grafik. Selain left ada juga ‘right’, ‘center’. Jika tidak didefinisikan, secara default title akan berada ditengah grafik.
- pad : digunakan untuk menambahkan jarak antara judul ke grafik (dalam satuan px)
- fontsize : digunakan untuk mengganti ukuran font (dalam satuan px)
- color : digunakan untuk mengganti warna title. Bisa ‘red’, ‘yellow’, dan lain-lain.
Kostumisasi Line dan Point
Setelah kostumisasi pada title dan axis labels, kita juga bisa kostumisasi pada line chart dan point, seperti warna, bentuk garis ataupun ketebalan garis. Berikut parameter yang dapat digunakan untuk kostumisasi line dan point di chart, cukup dengan menambahkan parameter didalam function plot().
- color : merubah warna line atau point
- linewidth : merubah ketebalan line atau point (dalam satua px)
- linestyle : merubah jenis line , misal ‘-’ atau ‘solid’ untuk garis standar (tidak putus-putus), ‘ — ’ atau ‘dashed’ untuk garis putus-putus, ‘.’ Atau ‘dotted’ untuk garis berupa titik-titik, bisa juga ‘-.’ atau ‘dashdot’ untuk garis dan titik bergantian.
- marker : merubah tipe point/titik data di chart. Nilai marker ini yang biasa digunakan yaitu ‘.’ Untuk bulatan kecil, ‘o’ untuk bulatan agak besar. ‘s’ untuk persegi, ‘D’ untuk diamond atau wajik, dan bentuk lain seperti ‘+’, ‘x’, ‘|’, ‘*’.
Untuk kostumisasi line dan plot kita bisa tambahkan kode seperti berikut.
dataset.groupby([‘order_month’])[‘gmv’].sum().plot(color=’green’, marker=’o’, linestyle=’-.’, linewidth=2)
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Kostumisasi Grid
Kostumisasi grid ini berguna agar nilai di masing-masing titik bisa mudah dipetakan ke sumbu-Y. Caranya dengan menambahkan function plt.grid() sebelum function plt.show() .Contohnya seperti kode berikut.
plt.grid(color=’darkgray’, linestyle=’:’, linewidth=0.5)
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Kostumisasi Axis Ticks
Selanjutnya kita akan kostumisasi axis ticks karena pada grafik sebelumnya terdapat nilai yang masih aneh, yaitu terdapat nilai ‘1e9’. Kita akan buat dalam bentuk miliaran agar lebih mudah dipahami. Nilai di sumbu-x dapat diakses dengan function plt.xticks() dan pada sumbu-y dengan plt.yticks().
Untuk merubah ticks pada sumbu-y bisa menambkan kode seperti berikut.
labels, locations = plt.yticks()plt.yticks(labels, (labels/1000000000).astype(‘int’))
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Menentukan Batas Minimum dan Maksimum Axis Ticks
Pada grafik sebelumnya terlihat bahwa nilai terkecil di sumbu-y adalah 150, seakan-akan GMV di bulan Oktober naik menjadi hampir 3 kali lipat dari September. Untuk itu sebaiknya diset agar sumbu-y nya dimulai dari 0, cukup tambahkan function plt.ylim(ymin=0), pada parameter ‘ymin’ kita set nilai nya dengan 0 untuk nilai minimal. Untuk perepatannya gunakan kode seperti berikut.
plt.ylim(ymin=0)
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Untuk mengatur batas maksimum bisa menggunakan parameter ymax, pada sumbu-x juga bisa menggunakan function plt.xlim().
Menambahkan Informasi Pada Plot
Pada grafik sebelumnya terlihat bahwa GMV pada Bulan Oktober mengalami peningkatan yang sangat signifikan dari bulan sebelumnya. Disini kita bisa tambahkan informasi ini pada grafik menggunakan function plt.text() seperti pada kode berikut.
plt.text(0.45, 0.72, ‘The GMV increased significantly on October 2019’, transform=fig.transFigure , color=’red’)
Parameter pertama dan kedua pada fuction plt.text() diatas merupakan koordinat dari sumbu x dan y. Saat set transform=fig.transFigure, maka koordinatnya berkisar antara 0–1 (untuk x dari kiri ke kanan, y dari bawah ke atas). Seperti halnya title atau label, dimungkinkan juga untuk set warna dan ukuran hurufnya.
Jika dijalankan akan menghasilkan grafik sebagai berikut :
Menyimpan Hasil Plot Menjadi File Image
Setelah grafik dihasilkan, kita bisa menyimpan grafik menjadi file gambar dengan menambahkan function plt.savefig() sebelum function plt.show().
plt.savefig(‘monthly_gmv.png’)
Kita jiga bisa menyimpan dalam berbagai tipe file, seperti jpg, png, atau kadang pdf. Untuk mengetahui format lengkapnya, kita bisa menggunakan kode berikut.
plt.gcf().canvas.get_supported_filetypes()
Pengaturan Parameter untuk Menyimpan Gambar
Ada berbagai parameter yang bisa diatur saat menyimpan gambar, antara lain:
- dpi: Resolusi gambar (dots per inch).
- quality: Kualitas gambar (hanya berlaku jika formatnya jpg atau jpeg), bisa diisi nilai 1 (paling buruk) hingga 95 (paling bagus).
- facecolor: Memberikan warna bagian depan figure, di luar area plot
- edgecolor: Memberikan warna pinggiran gambar
- transparent: Jika nilainya True, maka gambarnya jadi transparan (jika filenya png)
Tapi biasanya, parameter-parameter ini tidak digunakan karena grafik di file gambar bisa jadi berbeda dengan yang muncul saat menjalankan kode di python.
Berikut merupakan full kode yang sudah kita buat untuk membuat grafik diatas.
Mini Project!
Setelah kita membuat grafik dan juga kostumisasi grafik, saatnya kita akan mengasah kemampuan kita dalam seri mini project. Pada mini project ini kita akan membuat line chart yang menunjukkan jumlah pembeli harian (daily number of customers) selama Bulan Desember.
Terdapat beberapa spesifikasi yang harus dilakukan sebelum kita mulai menulis kode.
- Ukuran figure adalah 10 x 5
- Sumbu-x adalah tanggal pembelian, dari tanggal 1–31 Desember 2019
- Sumbu-y adalah jumlah unique customers di tiap tanggal
- Title dan axis label harus ada, tulisan dan style-nya silakan disesuaikan sendiri
Oke saatnya kita menulis kode. Yeahhhh… :D
Langkah penyelesaiannya yaitu sebagai berikut :
- Import library yang dibutuhkan
# Import library yang dibutuhkan
import datetime
import pandas as pd
import matplotlib.pyplot as plt
2. Baca Dataset
# Baca dataset retail_raw_reduced.csv
dataset = pd.read_csv(‘https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/retail_raw_reduced.csv')
3. Buat kolom Order Month
# Buat kolom order_month
dataset[‘order_month’] = dataset[‘order_date’].apply(lambda x: datetime.datetime.strptime(x, “%Y-%m-%d”).strftime(‘%Y-%m’))
4. Buat kolom GMV
# Buat kolom gmv
dataset[‘gmv’] = dataset[‘item_price’] * dataset[‘quantity’]
5. Set ukuran figure menjadi 10x5
plt.figure(figsize=(10, 5))
6. Filter tanggal pembelian hanya pada bulan Desember dan grouping berdasarkan kolom order_date lalu filter jumlah unique customer di tiap tanggal
dataset[dataset[‘order_month’]==’2019–12'].groupby([‘order_date’])[‘customer_id’].nunique()
7. Untuk title dan axis labels, teks dan style-nya dapat disesuaikan sendiri.
Adapun full kode yang kita tulis adalah sebagai berikut.
Grafik yang kita hasilkan yaitu sebagai berikut :
Sampailah kita pada penghujung materi pada kali ini. Akhirnya kita telah berhasil menyelesaikan modul Data Visualization with Python Matplotlib for Beginner — Part 1. Meskipun materi yang kita bahas kali ini cukup intens namun saya yakin kalian dapat mengikutinya dengan sagat baik.
Oke cukup sekian pembahasan kita kali ini. Pastinya masih banyak yang belum kita bahas tentang visualisisi menggunakan Matplotlib pada kali ini. Namun ini bisa menjadi awal kita untuk dapat membuat visualisasi dengan Matplotplib.
Untuk meteri yang lebih lengkap Kamu bisa akses modul-modul yang lain di DQLab.id. So tunggu apa lagi ayo belajar di DQLab.id.