Data Visualization with Python Matplotlib for Beginner — Part 1

Reyvan Maulid Pradistya
13 min readDec 4, 2020

--

Halo semua! Balik lagi bersama aku Reyvan Maulid Pradistya. Bagi yang baru masuk dan tahu blog Medium ini, selamat datang! Kali ini, aku dapat tantangan untuk mengerjakan Challenge dari DQLab tentang “Data Visualization with Python Matplotlib for Beginner — Part 1”. Setelah sekian lama, daku tidak menulis, akhirnya semangat aku pulih dan bangkit lagi! Jujur aja nih, proses pengerjaan challenge “Data Visualization with Python Matplotlib for Beginner — Part 1” ini tidak semudah yang aku bayangkan. Cukup menguras energi dan otak tentunya, bukan hal yang biasa tapi luar biasa tentunya. Kalian bisa akses di dqlab.id dan cobain deh modulnya rasanya aahhh mantaap! Ohiya, untuk data mentor pada topik ini yaitu Kak Hendra Hadhil Choiri, seorang Data Scientist dari Gojek.

Ohiya, sekedar info aja bagi sahabat data semua. Kalian bisa banget mulai untuk belajar Data Science di DQLab. Karena akan ada free voucher belajar dari DQLAB. Caranya kalian bikin akun di dqlab.id/signup, kemudian kalian login dan segera redeem vouchernya menggunakan kode voucher DQLABSPESIAL. Buruan segera redeem vouchernya yaa! Karena promo ini hanya berlaku sampai dengan tanggal 9 Desember 2020 ini. Gausah pikir panjang, jangan lewatkan kesempatan ini nghokeyyyy!

Pada artikel bahasan kali ini, kita akan belajar bersama-sama untuk mengerti pemanfaatan library matplotlib dalam melakukan visualisasi data menggunakan pemrograman python. Pada Part 1 ini, kamu diharapkan dapat memahami bagaimana membuat sebuah plot dengan matplotlib, dan mampu memodifikasi berbagai komponen di dalam plot tersebut. Nghokeeyyy, langsung aja kita ke substansinya!

Pengenalan Matplotlib dan Persiapan Dataset

Apa dan Kenapa Matplotlib

Kalian pernah kebayang ga sih? Angka, angka, angka dan angkaaa teruuussss. Kayak ada sesuatu yang kurang. Kenapa angka itu kita ga jadiin aja dalam bentuk visualisasi aja? Jadi, Visualisasi tentunya membantu kita untuk menafsirkan dan menginterpretasi suatu data. 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.

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 Dataset

Dataset yang akan kita gunakan dalam bahasan kali ini adalah data penjualan. Tujuannya adalah untuk melihat performa bisnis suatu perusahaan.

“Datanya ada di file ‘https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/retail_raw_reduced.csv'”

Berdasarkan output dari running data penjualan, terdapat sekitar 5000 baris dan 9 kolom. Berikut adalah 5 data teratasnya yang rata-rata berasal dari DKI Jakarta dan dibagi ke dalam 4 kota administratif yaitu Jakarta Selatan, Utara, Barat dan Timur.

Penjelasan Dataset

Kalau sebelumnya tadi pengenalan dataset, sekarang kita beranjak ke penjelasan masing-masing dataset berikut:

  • 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

(bisa dilihat di gambar pengenalan dataset ya)

Penambahan Kolom Order Month pada Dataset

LOH? Emangnya di data kita tadi ada info GMV ya? Gimana mau bikin grafik kalau kolomnya tidak ada?

Sebelum membuat grafiknya, kita pastikan dulu bahwa datanya sudah siap. Kita bisa memanfaatkan library pandas dan numpy untuk mengolah data.

“membuat grafik GMV bulanan, bayangan kita tentu adalah sebuah line chart dengan sumbu-x berupa bulan, dan sumbu-y adalah total GMV di bulan tersebut.

Saat ini, kita hanya punya data berupa order_date yang merupakan tanggal transaksi. Tapi, tidak masalah. Aku bisa membuat kolom baru order_month dengan kode seperti ini.

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.

Berdasarkan output dari running data penjualan, terdapat sekitar 5000 baris dan 11 kolom. Berikut adalah 5 data teratasnya yang rata-rata berasal dari DKI Jakarta dan dibagi ke dalam 4 kota administratif yaitu Jakarta Selatan, Utara, Barat dan Timur. Terdapat perubahan dari awalnya 9 kolom menjadi 11 kolom, Sekarang isi dataframe menjadi seperti ini, sudah ada kolom order_month dan gmv.

Plot Pertama dengan Matplotlib

Membuat Data Agregat

Selanjutnya untuk menampilkan plot grafik data agar lebih nyaman dilihat secara visual. Aku ingin mencoba untuk mengeksekusinya. Tapi sebelum itu, aku mencoba untuk mengerjakan sendiri dulu beberapa susunan kode grafiknya menggunakan matplotlib. Tapi sebelum itu, kita akan membuat data agregatnya dulu yaps! Berikut syntaxnya:

Plot Pertama: Membuat Line Chart Trend Pertumbuhan GMV

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

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.

Interpretasi: Secara keseluruhan, dilihat dari tren pertumbuhan penjualan per bulan menghasilkan kecenderungan meningkat. Dengan demikian dapat diketahui melalui grafik plot line berikut.

Cara Alternatif: Fungsi .plot() pada pandas Dataframe

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

Berikut adalah output grafik:

Kesimpulannya ialah ada dua cara untuk membuat plot menggunakan matplotlib:

  1. Kita dapat menggunakan fungsi plt.plot() dari library matplotlib.pyplot as plt
  2. atau dengan menggunakan fungsi .plot() langsung dari variabel dataframe, yaitu dataset pada kasus kita sebelumnya.

Dengan grafik yang sudah aku buat ini saja, sudah bisa melihat trend dan insight-nya. Untuk analisis cepat, grafik seperti ini terkadang sudah cukup.

Tapi untuk presentasi ke atasan, tentu kita harus membuat grafik yang lebih ‘cantik’.

Kustomisasi Grafik — Part 1

Anatomi dari Figure

Kira-kira sampai sini sudah excited dan seruuu ga nihhh belajar visualisasi data lewat python? Seruuu bggtttt!!!!!

Selanjutnya kita masuk bagian kustomisasi

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. Kita coba dengan mengubah ukuran Figure-nya. Caranya, sebelum mulai membuat plot, kita tambahkan kode berikut sebelum melakukan plotting grafik

Berikut adalah hasil output grafik setelah kustomisasi:

Dalam contoh ini, ukuran Figure telah diubah agar memiliki panjang 15 inch, dan lebar 5 inch. Sehingga line chart-nya bisa memanjang ke kanan dan lebih mudah dilihat trend-nya. Jadi lebih terlihat menarik bukaann?

Menambahkan Title and Axis Labels

Kamu juga bisa menambahkan title dan 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:

Dannnn hasilnya sebagai berikut…..

Sekarang terlihat bahwa chart ini sudah memiliki judul, dan label teks di kedua sumbunya. Jadi, cukup mudah bukaann?

Kustomisasi Title and Axis Labels

“Itu kan untuk menambahkan, lalu bagaimana caranya untuk kustomisasi?”

Kita bisa melakukan berbagai modifikasi dengan menambahkan parameter ke dalam function-nya. Jadi semakin jelas dan mudah dimengerti.

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:

Berikut adalah output grafik tersebut:

Kustomisasi Line dan Point

“Ini garis charts-nya enggak harus warna standar kok. Bisa kamu ganti, tahu kan caranya?”

“Biar lebih menarik juga ya. Caranya seperti ini bukan?”

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:

Jika telah selesai dikustomisasi line dan pointnya, akan menghasilkan seperti ini:

Tuhkaannn, jadi terlihat lebih menarik bukann? Jadi makin terlihat jelas point dan garisnya

Kustomisasi Grid

“Nah, kamu sudah paham soal mengubah warna garis chart. Selanjutnya aku mau kasih tahu kamu soal kustomisasi grid juga yang berguna agar nilai di masing-masing titik bisa mudah dipetakan ke sumbu-y. Caranya dengan menambahkan grid.

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

Berikut setelah dilakukan kustomisasi grid:

Terlihat ada garis grid berwarna abu-abu

Kustomisasi Grafik — Part 2

“Bagaimana, apakah sudah cukup grafiknya seperti ini?”

“Sepertinya ada yang belum tepat. Ini titik-titik di sumbu y, nilainya masih aneh. 2.0, 2.5, 3.0 dsb lalu di atasnya 1e11. Kayaknya bisa dibuat lebih jelas lagi. Buat saja dalam bentuk miliar agar lebih mudah dipahami.”

Aku pun mencoba untuk mengubah 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:

Berikut adalah outputnya setelah penambahan axis dan ticks

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

Menambahkan Informasi Pada Plot

“Berhubung grafiknya sudah jadi. Ada baiknya kita menambahkan beberapa informasi di dalamnya agar pembaca mendapatkan insight dari grafik tersebut. Gimana menurut kleannn?”

“Boleh juga. Bagusnya kita tambahkan insight apa ya?”

“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,”

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

Berikut insight yang dihasilkan:

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.

Menyimpan Hasil Plot Menjadi File Image

“Oh ya, ini aku mau simpan sebagai file gambar, gimana caranya ya?”

Untuk menyimpan sebagai file gambar, kalau mau cepat, bisa tinggal di-screenshoot saja. Tapi kalau ingin hasil yang bagus, ada trik tersendiri

Kita bisa menyimpan sebagai file gambar dengan function savefig sebelum plt.show(), seperti ini:

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

Ini bisa kamu atur juga resolusinya agar hasil gambarnya lebih berkualitas. Ini kamu inget deh beberapa parameternya.

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:

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

Berikut hasil outputnya:

Mini Project

Aku ditantang untuk membuat sebuah line chart dengan menggunakan matplotlib yang menunjukkan jumlah pembeli harian (daily number of customers) selama bulan Desember.

Setelah mempelajari materinya, tentu saja akuuu bisa buktikan kalau aku mampu!

Studi Kasus dari Senja: Daily number of customers on Desember

Dengan menggunakan dataset yang sama (‘https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/retail_raw_reduced.csv'), buatlah sebuah line chart dengan Matplotlib, yang menunjukkan jumlah pembeli harian (daily number of customers) selama bulan Desember.

Beberapa spesifikasi yang harus diperhatikan:

  • Ukuran figure adalah 10x5
  • 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

Langkah pengerjaannya sebagai berikut:

  1. Import library yang dibutuhkan

Disini kita perlu tiga library yaitu datetime (data berupa deret waktu), pandas untuk manipulasi data dan matplotlib untuk visualisasi grafis

2. Baca dataset retail raw reduced. csv

3. Buat kolom order month

4. Buat kolom gmv

5. Buat plot grafik sesuai instruksi

Berikut hasil outputnya:

Berdasarkan output diatas, terjadi fluktuasi jumlah konsumen di setiap bulannya sesuai dengan tanggal order

Kesimpulan

Akhirnya, aku telah selesai mempelajari dasar-dasar pembuatan chart menggunakan matplotlib. Catatan untukku dan kalian semua adalah untuk membuat visualisasi, harus mempersiapkan dulu data yang dibutuhkan. Lalu membuat plotnya. Selanjutnya, bisa kustomisasi berbagai komponen pada chart, seperti figure size, title/judul, axis labels, axis ticks, style dari line/points di chart, grid, teks, dan lain sebagainya. Setelah selesai, tentunya bisa menyimpan gambarnya.

Congratulations! Aku berhasil menyelesaikan bahasan Data Visualization with Python Matplotlib for Beginner — Part 1. Berdasarkan materi-materi yang telah aku pelajari dan praktekkan, aku sudah mendapatkan pengetahuan (knowledge) dan praktek (skill) yang diantaranya

  • mempersiapkan dulu data yang dibutuhkan,
  • membuat plot dari data yang telah dipersiapkan,
  • mengkustomisasi berbagai komponen di chart yang telah dibuat, seperti figure size, title/judul, axis labels, axis ticks, style dari line/points di chart, grid, teks, dan lain sebagainya,
  • menyimpan gambar yang telah dibuat

Sekian dulu yaa untuk pembahasan kali ini. Buat kalian semua yang pengen jadi data scientist, yuk ikuti kursus online bersama DQLab! Langsung signup sekarang di dqlab.id/signup dan jangan lewatkan kesempatan untuk akses modul gratisnya dan redeem vouchernya nghokeeyyy! PAKAI KODE “DQLABSPESIAL”. Jangan lupa kalau ketagihan, bisa juga kali subscribe buat upgrade ke premiumnyaaaaa. Rasanyaa muantaaappp!

Sampai jumpa! Keep fighting Sahabat Data semuaaa!

--

--

Reyvan Maulid Pradistya
Reyvan Maulid Pradistya

No responses yet