Data Visualization with Python Matplotlib for Beginner — Part 1

Rian Tineges
9 min readNov 27, 2020

--

Source: www.matplotlib.org

Hello Friend! Kembali lagi di medium ku. Pada series sebelumnya kita telah mempelajari mengenai Data Manipulation with Pandas yang terdiri dari Part 1 dan Part 2. Kali ini aku bakalan sharing lagi tentang Data Visualization, jadi simak terus ya artikel ku dan jangan lupa sediakan camilan atau secangkir kopi nikmat untuk menemani kamu yang sedang terpikat akan pekat nya niat dan tekat yang hebat *apaan sih 😆*.

Menurut bebearapa sumber, Data Visualization merupakan salah satu jobdesc yang harus di kuasai oleh seorang Data Scientist. Mengapa ? Karena seorang Data Scientist bekerja sama dengan berbagai divisi di perusahaan semisal divisi IT dengan Marketing, jadi peran Data Scientist itu yang menjembatani antara kedua divisi tersebut. Nah, dikarenakan tidak semua divisi memiliki pengetahuan teknis mengenai Data. Oleh karena itu, diperlukan yang namanya Data Visualization yang fungsinya untuk memudahkan divisi lain untuk memahami informasi yang telah dihasilkan, dengan menerapkan Data Visualization maka penyajian data jadi lebih informatif dan komunikatif.

Adapun tools yang digunakan untuk Data Visualization salah satunya Tableau, sayangnya tools ini berbayar. Tapi jangan sedih karena Python menyediakan library untuk keperluan visualisasi data yaitu matplotlib yang sifatnya open source. Dalam modul ini, akan dijelaskan beberapa hal yang dapat dilakukan dengan matplotlib. Di antaranya:

  • Pengolahan dataset (menggunakan library NumPy & Pandas).
  • Membuat grafik dasar menggunakan matplotlib.
  • Melakukan modifikasi komponen visualisasi, seperti axis, labels, title, dan legend.
  • Menyimpan plot visualisasi yang sudah dibuat

Pengenalan Matplotlib dan Persiapan Dataset

Selama kita mempelajari materi ini, kita akan menggunakan dataset transaksi supermarket kita sepanjang tahun 2019 yang telah disediakan oleh DQLab. Mau tau kira-kira apa aja sih isi dataset nya, perhatikan gambar berikut sama-sama:

order_id : ID dari order/transaksi, 1 transaksi bisa terdiri dari beberapa produk, tetapi hanya dilakukan oleh 1 customer, order_date : tanggal terjadinya transaksi, customer_id : ID dari pembeli, bisa jadi dalam satu hari, 1 customer melakukan transaksi beberapa kali, city : kota tempat toko terjadinya transaksi, province : provinsi (berdasarkan city), product_id : ID dari suatu product yang dibeli, brand : brand/merk dari product. Suatu product yang sama pasti memiliki brand yang sama, quantity : Kuantitas / banyaknya product yang dibeli, item_price : Harga dari 1 product (dalam Rupiah). Suatu product yang sama, bisa jadi memiliki harga yang berbeda saat dibeli.

Dari dataset diatas kita akan membuatkan grafik nya dengan menggunakan library matplotlib. Tapi, untuk membuat grafik GMV bulanan kita perlu membuat kolom bulan terlebih dahulu dalam hal ini nama kolom baru yang akan kita buat adalah order_month. Caranya gimana ? yuk simak code berikut:

import datetime
dataset['order_month']= dataset['order_date'].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d").strftime('%Y-%m'))
print(dataset.head())

Ada beberapa function yang berperan di sini:

  • apply & lambda biasa digunakan untuk membuat kolom baru, berdasarkan suatu kolom lain yang sudah ada (misal .apply(lambda x: x*2) berarti setiap input x di dalam kolom, akan diubah menjadi x*2). Dalam hal ini kolom yang sudah ada adalah dataset[‘order_date’], lalu tiap nilai di dalamnya kita proses agar menjadi month-nya saja
  • Function datetime.datetime.strptime digunakan untuk mengubah date/time dalam bentuk string menjadi tipe data datetime.
  • Function strftime digunakan untuk mengubah format suatu data bertime datetime, dalam hal ini diubah menjadi ‘%Y-%m’, yang berarti outputnya adalah waktu dengan bentuk YYYY-MM atau tahun dan bulan saja, tanggalnya sudah tidak ada.
Outputnya untuk 5 data teratas

Selanjutnya adalah dengan GMV yaitu perkalian setiap entri di kolom item_price dan kolom quantity. Bisa saja menggunakan fungsi apply & lambda seperti tadi, tetapi ada cara yang lebih mudah yaitu dengan mengalikan kedua kolom yang disebutkan secara langsung.

dataset['gmv']=dataset['item_price']*dataset['quantity']
print('Ukuran dataset: %d baris dan %d kolom\n' %dataset.shape)
print('Lima data teratas:')
print(dataset.head())
Output untuk 5 data teratas

Plot Pertama dengan Matplotlib

Selanjutnya kita akan menambahkan data agregat dengan mempraktekkan langsung code berikut ini:

monthly_amount = dataset.groupby('order_month')['gmv'].sum().reset_index()
print(monthly_amount)

Untuk menggunakan matplotlib, bisa memanggil library-nya seperti ini:

import matplotlib.pyplot as plt

Cara standar untuk menggunakan matplotlib yaitu dengan memanggil function plt.plot lalu definisikan nilai di sumbu-x dan sumbu-y. Perhatikan dan praktekkan code berikut:

import matplotlib.pyplot as plt
plt.plot(monthly_amount['order_month'], monthly_amount['gmv'])
plt.show()

Seperti yang kita ketahui bahwa sumbu -x merupakan kolom order_month (parameter pertama), dan sumbu-y kolom gmv (parameter kedua). Sehingga hasilnya sebagai berikut:

Bukan sampai disitu saja, banyak jalan menuju roma. Ada cara alternatif untuk menghasilkan grafik seperti itu, yaitu dengan menggunakan fungsi .plot( ) pada pandas dataframe. Untuk lebih jelasnya pada code dibawah ini:

import matplotlib.pyplot as plt
dataset.groupby(['order_month'])['gmv'].sum().plot()
plt.show()

Kustomisasi Grafik

Ada beberapa istilah dan komponen di sebuah plot, nanti akan mempermudah mengingat function apa yang digunakan untuk memodifikasinya.

  • Figure adalah keseluruhan visualisasi yang kita plot dalam 1 kali menjalankan code.
  • 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.
  • Untuk isi grafiknya sendiri, bisa berupa line (untuk line plot), atau marker (untuk scatter plot), bisa juga bentuk lain seperti bar (untuk bar plot / histogram).
  • Aksesoris lain yang bisa ditambahkan, di antaranya Grid untuk mempermudah melihat tick yang sejajar, dan Text untuk memberikan informasi tambahan berbentuk teks di grafik.

(1) Mengubah Figure Size

Contoh , ukuran Figure akan diubah agar memiliki panjang 15 inch, dan lebar 5 inch. Sehingga line chart-nya bisa memanjang ke kanan dan lebih mudah dilihat trend-nya. Gimana tuh caranya ? Mari perhatikan code dibawah ini:

import matplotlib.pyplot as plt
plt.figure(figsize=(15,5))
dataset.groupby(['order_month'])['gmv'].sum().plot()
plt.show()import matplotlib.pyplot as plt
plt.figure(figsize=(15,5))
dataset.groupby(['order_month'])['gmv'].sum().plot()
plt.show()

(2) Menambah Title and Axis Labels

Untuk menambahkannya, tinggal menambah plt.title, plt.xlabel, dan plt.ylabel di code sebelum plt.show(), misalnya seperti ini:

plt.title('Monthly GMV Year 2019')
plt.xlabel('Order Month')
plt.ylabel('Total GMV')
plt.show()

(3) Kustomisasi Title and Axis Labels

Misalnya, untuk judul/title, parameter yang bisa ditambahkan:

  • loc: digunakan untuk menentukan posisi title, misalnya ‘left’ untuk membuat rata kiri, ‘right’ untuk rata kanan, dan ‘center’ untuk meletakkannya di tengah. Jika tidak didefinisikan, maka defaultnya title ada di tengah.
  • pad: digunakan untuk menambahkan jarak antara judul ke grafik (dalam satuan px), misalnya kita tidak ingin judulnya terlalu menempel dengan grafiknya, jadi kita beri jarak.
  • fontsize: digunakan untuk mengganti ukuran font/huruf (dalam satuan px).
  • color: digunakan untuk mengganti warna huruf judul. Kita bisa menggunakan warna dasar dengan kata seperti ‘blue’, ‘red’, ‘orange’, dsb. Bisa juga dengan hex string, misalnya ‘#FFFFFF’ untuk warna biru muda.

Notes: Untuk xlabel dan ylabel, kita bisa mengganti fontsize dan color, tetapi tidak bisa mengganti loc.

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)
plt.show()
Sekarang judul nya berubah wana menjadi warna biru dan fontsize nya juga terlihat jauh lebih besar dari sebelumnya.

(4) Kustomisasi Line dan Point

Untuk mengubah style dari garis maupun titik di chart, cukup dengan menambahkan parameter di function .plot(). Beberapa parameter yang bisa dikustomisasi:

  • color: mengubah warnanya (sama seperti di title)
  • linewidth: mengubah ketebalan line/garisnya (dalam satuan px)
  • linestyle: mengubah jenis dari garis. Misalnya ‘-’ atau ‘solid’ untuk garis tak terputus (seperti pada default), ‘ — ‘ atau ‘dashed’ untuk garis putus-putus, ‘:’ atau ‘dotted’ untuk garis berupa titik-titik, bisa juga ‘-.’ atau ‘dashdot’ untuk garis dan titik bergantian.
  • marker: mengubah tipe points/titik data di chart. Ada banyak sekali kemungkinan nilai untuk marker ini, yang biasanya digunakan yaitu ‘.’ untuk bulatan kecil/titik, ‘o’ untuk bulatan agak besar, ‘s’ untuk persegi, ‘D’ untuk diamond/wajik, dan bentuk-bentuk lain seperti ‘+’, ‘x’, ‘|’, ‘*’.

Semisal kita ingin merubah grafiknya menjadi seperti dibawah ini dengan kustomisasi Title and Axis Labels yang sama:

dataset.groupby(['order_month'])['gmv'].sum().plot(color='green', marker='o', linestyle='-.', linewidth=2)

(5) Kustomisasi Grid

Kustomisasi grid juga yang berguna agar nilai di masing-masing titik bisa mudah dipetakan ke sumbu-y. Caranya dengan menambahkan grid.

plt.grid(color='darkgray', linestyle=':', linewidth=0.5)

(6) Kustomisasi Axis Ticks

Nilai-nilai di sumbu x dan y bisa diakses melalui function plt.xticks() dan plt.yticks(). Untuk mengubah ticks di sumbu-y menjadi milyar, bisa menambahkan code sebagai berikut:

labels, locations = plt.yticks()
plt.yticks(labels, (labels/1000000000).astype(int))
plt.show()
Dapat dilihat bahwa plt.ticks() yang sebelumnya, digantikan dengan nilai baru yaitu nilai awal dibagi dengan 1 milyar (1000000000)

(7) Menentukan Maksimum dan Minimum Axis Ticks

Di sini dapat dilihat bahwa nilai terkecil di sumbu-y adalah 150. Ini kadang bisa membuat orang tertipu sih, 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 plt.ylim(ymin=0) seperti ini:

plt.ylim(ymin=0)
Untuk mengatur batas maksium, kita tambahkan juga parameter ymax, tetapi sepertinya di sini tidak perlu. Kita juga bisa mengatur batas minimum dan maksimum sumbu-x dengan function plt.xlim.

(8) Menambahkan Plot Informasi Pada Plot

Caranya dengan menambahkan plt.text seperti potongan kode program berikut ini:

plt.text(0.45, 0.72, 'The GMV increased significantly on October 2019', transform=fig.transFIgure, color='red')

Perhatikan bahwa ada beberapa parameter yang diset saat menggunakan plt.text. Dua angka pertama itu adalah koordinat, x dan y. Saat set transform=fig.transFigure, maka koordinatnya berkisar 0 sampai 1 (untuk x dari kanan ke kiri, dan untuk y, dari bawah ke atas).

Jika parameter transform tidak diisi, maka koordinatnya dalam satuan inch (Dalam contoh ini, dari 0–15 dari kiri ke kanan, dan 0–5 dari bawah ke atas). Seperti halnya title atau label, dimungkinkan juga untuk set warna dan ukuran hurufnya.

(9) Menyimpan Hasil Plot Menjadi Format File Image

Setelah kita melakukan berbagai macam kustomisasi untuk mempercantik tampilan grafik sesuai dengan kebutuhan kita, rasanya kurang efektif jika kita harus menjalankan code program tersebut apabila kita ingin melakukan presentasi di rapat tertentu. Oleh karena itu, kita perlu menyimpan grafik yang sudah fix ke format Image. Caranya gampang kok tinggal screenshot atau ngga di snipping tool aja hehehe 😆, lah tapi kualitas gambarnya kurang bagus gimana dong ? Tenang banyak jalan menuju Roma, ada kok alternatif lain. Yaitu kita bisa menyimpan sebagai file gambar dengan function savefig sebelum plt.show( ).

#Dengan monthly_gmv sebagai nama file image yang ingin kita simpan
plt.savefig('monthly_gmv.png')

Pada contoh diatas kita save grafik dalam bentuk file png, karena umumnya begitu. Tapi, kita bisa kok save grafik dalm bentuk file lain seperti .jpg, .svg, atau .pdf. Untuk melihat format apa saja yang bisa kita save, jalankan code program ini pada text editor kalian:

plt.gcf().canvas.get_supported_filetypes()

(10) Pengaturan Parameter Untuk Menyimpan Gambar

Last but not least, 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 code di python.

plt.savefig('monthly_gmv.png', quality=95)

Yang akan menghasilkan kualitas gambar yang tersimpan sebesar 95% dari awal.

Kesimpulan

Gimana temen-temen ? Mantep kan ? 😆 pelan-pelan aja ya bacanya, nanti ngga terasa deh kalo temen-temen udah berhasil melakukan hal ini:

  1. Mempersiapkan data yang diperlukan
  2. Membuat plot dari data yang sudah dipersiapkan tadi
  3. Mengkustomisasi berbagai kompunen chart, seperti figure size, title, axis labels, axis ticks, style dari line/point, grid, dan teks.
  4. Menyimpan grafik dalam bentuk file image

Terimakasih buat yang masih baca artikel ini sampai akhir. Oh iya, jangan lupa sambil dibaca sambil di praktekkan biar makin asyik, dan nantikan materi DQLab selanjutnya di akun medium ku. See you 😜

--

--