Data Visualization with Python Matplotlib for Beginner — Part 1

Anjar Desmiarti
8 min readNov 16, 2020

--

Hello my friends! Welcome to my Medium! Introduce me Anjar Desmiarti. On this occasion, my post is in the form of “Data Analyst Career Track Series” from DQLAB about “Data Visualization With Python Matplotlib For Begineer — Part 1”. Mentor data on this topic is Hendra Hadhil Choiri, Data Scientist Gojek

1. Pengenalan Matplotlib dan Persiapan Dataset

Apa dan Kenapa Matplotlib?

Dalam menganalisa data, sering kali menggunakan visualisasi data untuk memahami karakteristik maupun trend di dalam data yang dimiliki.

Salah satu library di python yang biasa digunakan untuk keperluan visualisasi data adalah 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 Dataset

Dataset ‘https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/retail_raw_reduced.csv', berikut di code editor:

import pandas as pd
dataset = pd.read_csv ('https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/retail_raw_reduced.csv')
print('Ukuran dataset : %d baris dan %d kolom\n' % dataset.shape)
print ('Lima data teratas:')
print(dataset.head())

Penjelasan dataset:

  • 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.

Penambahan Kolom Order Month pada Dataset

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.

Penambahan Kolom GMV pada Dataset

Selanjutnya, bagaimana dengan GMV? Definisikan GMV adalah 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())

Membuat Data Agregat

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

2. Plot Pertama dengan Matplotlib

Plot Pertama: Membuat Line Chart Trend Pertumbuhan GMV

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

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

Cara standar untuk menggunakan matplotlib yaitu dengan memanggil function plt.plot lalu definisikan nilai di sumbu-x dan sumbu-y. Dalam hal ini, definisikan kolom order_month di sumbu-x (parameter pertama), dan kolom gmv di sumbu-y (parameter kedua). Setelah selesai mendefinisikan komponen chart-nya, lalu panggil plt.show()untuk menampilkan grafiknya.

Cara Alternatif: Fungsi .plot() pada pandas Dataframe

Dengan pendekatan lain, dimungkinkan juga melakukan visualisasi dengan matplotlib tanpa membuat variabel baru.

Misalnya dengan code seperti ini:

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

Grafik yang dihasilkan pun serupa kan?

3. Kustomisasi Grafik — Part 1

Anatomi dari Figure

Ini tentang kustomisasi grafik. Saya pikir ini akan membantumu mengerjakan grafik dari data hasil rapat tadi. Sebelum mulai kustomisasi, ada baiknya kita pahami dulu anatomi dari sebuah Figure di maplotlib. Bisa dilihat sesuai di gambar berikut,

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.

Memahami komponen-komponen di atas sudah cukup untuk melakukan berbagai visualisasi dengan matplotlib. Untuk anatomi yang lebih lengkap, bisa dilihat di link berikut: https://matplotlib.org/3.1.3/gallery/showcase/anatomy.html.

Mengubah Figure Size

Mari kita mulai kustomisasinya. Enaknya mulai dari mana dulu ya?Bagaimana kalau kita ubah ukuran grafiknya dulu? Soalnya kalau ukuran grafiknya yang diubah belakangan, biasanya banyak komponen lain yang berubah bentuknya. Caranya, sebelum mulai membuat plot, kita tambahkan kode berikut sebelum melakukan plotting grafik.

plt.figure(figsize=(15,5))

Menambahkan Title and Axis Labels

Beberapa hal yang lazim dimodifikasi pada sebuah grafik adalah judul (title) dan label di sumbu-x & sumbu-y (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')

Kustomisasi Title and Axis Labels

Melakukan berbagai modifikasi dengan menambahkan parameter ke dalam function-nya. 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 ‘#42DDF5’ untuk warna biru muda.

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

Mari modifikasi judul, xlabel, dan ylabel dengan parameter-parameter di atas, misalnya seperti ini:

plt.xlabel('Order Month', fontsize=15)
plt.ylabel('Total Amount', fontsize=15)

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’, ‘|’, ‘*’.

Misalnya ingin ubah grafiknya menjadi seperti ini:

dataset.groupby(['order_month'])['gmv'].sum().plot(color='green', marker='o', linestyle='-.', linewidth=2)
plt.title('Monthly GMV Year 2019', loc='center', pad=40, fontsize=20, color='blue')

Kustomisasi Grid

Caranya dengan menambahkan plt.grid() dengan parameter yang mirip dengan line. Contohnya di sini:

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

3.Kustomisasi Grafik — Part 2

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))

Dapat dilihat bahwa plt.ticks() yang sebelumnya, digantikan dengan nilai baru yaitu nilai awal dibagi dengan 1 milyar (1000000000).

Menentukan Batas Minimum dan Maksimum 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.

Menambahkan Informasi Pada Plot

Dilihat dari trend-nya, mulai bulan Oktober 2019, GMV kita naik drastis setelah sebelumnya stagnan di angka 200–300 milyar per bulan. Kita bisa mulai dengan menambahkan info ini di grafik. Caranya seperti ini,

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

Menyimpan Hasil Plot Menjadi File Image

menyimpan sebagai file gambar dengan function savefig seelum plt.show(),

plt.savefig('monthly_gmv.png')

Kita bisa menyimpannya ke berbagai tipe file, seringnya sih jpg, png, atau kadang pdf juga bisa. Untuk mengetahui format lengkapnya, kita bisa menggunakan code berikut:

plt.gcf().canvas.get_supported_filetypes()

dengan outputnya menunjukkan ke dalam tipe file apa saja dapat disimpan

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 code di python.

Jadi, coba disimpan dengan settingan seperti ini ya:

plt.savefig(‘monthly_gmv.png’, quality=95)

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

the main material about
1. prepare the required data first,
2. plotting from the prepared data,
3. customize various components on the chart that has been made, such as figure size, title / title, axis labels, axis ticks, style of line / points on the chart, 4. grid, text, and so on,
5. save the created image

Thank you (❁´◡`❁)

--

--

Anjar Desmiarti
Anjar Desmiarti

No responses yet