Data Visualization with Python Matplotlib for Beginner — Part 2

Cindy Wanady
12 min readDec 12, 2020

--

Hi All! Kembali lagi pada modul data visualisasi bagian ke-2.

Kita akan mengenali lebih dalam berbagai visualisasi jenis data dan tujuannya.

Ada banyak sekali jenis visualisasi data, dari yang sederhana hingga yang kompleks. Setiap jenis visualisasi biasanya lebih tepat digunakan untuk suatu tujuan tertentu. Secara garis besar, ada empat tujuan visualisasi yang disampaikan oleh Andrew Abela sesuai gambar berikut.

Berikut penjelasannya:

1. Perbandingan/Komparasi

Jika ingin membandingkan suatu sekumpulan nilai dengan nilai lainnya, ingin melihat mana yang lebih besar, mana yang lebih tinggi, mana yang naik, dsb. Untuk data yang terkait dengan waktu, visualisasi yang digunakan biasanya berupa line-chart. Sedangkan, jika yang dibandingkan adalah kategorikal, maka lebih cocok menggunakan bar-chart.

2. Distribusi

Bila ingin melihat distribusi/persebaran data di suatu variabel. Visualisasi yang lazim digunakan adalah histogram. Bisa melihat apakah datanya banyak terkumpul di nilai-nilai kecil, berat di kanan, atau simetris, ataupun berdistribusi normal. Untuk melihat distribusi di dua variabel, scatterplot juga bisa digunakan.

3. Komposisi

Digunakan untuk melihat komposisi dari suatu variabel, jika di-breakdown terhadap suatu dimensi data. Visualisasi yang biasa digunakan adalah stacked bar-chart untuk data kategorikal, atau stacked line-chart untuk data terkait waktu.

4. Keterhubungan/Relasi

Ketika ingin melihat keterhubungan antara suatu variabel dengan variabel lain. Misalnya ingin cek, jika variabel A semakin tinggi, apakah variabel B juga semakin tinggi, atau justru lebih rendah, atau tidak ada keterhubungannya. Visualisasi yang biasa digunakan untuk tujuan ini adalah scatter-plot.

Membuat Multi-Line Chart

Dari dataset pada bagian sebelumnya, kita akan mencoba untuk melakukan breakdown berdasarkan brand

Kode untuk membaca dataset dan penambahan kolom baru dataset telah diberikan.

Output:

Kustomisasi Legend

Berhubung brand-nya ada banyak, dan defaultnya di tengah makanya jadi menutupi grafiknya, maka kita akan menggunakan function khusus:

Beberapa parameter yang bisa ditambahkan untuk legend:

  • loc: untuk menentukan posisi legend, berikut beberapa lokasi legend yang bisa didefinisikan:
  1. ‘upper left’, ‘upper right’, ‘lower left’, ‘lower right’:legend diletakkan di pojok dari axes (atas kiri, atas kanan, bawah kiri, atas kiri)

2. ‘upper center’, ‘lower center’, ‘center left’, ‘center right’: legend diletakkan di tepi axes (atas tengah, bawah tengah, tengah kiri, tengah kanan)

3. ‘center’: legend diletakkan di tengah-tengah axes

4. ‘best’: matplotlib akan memilih satu dari sekian kemungkinan lokasi legend di atas yang paling tidak overlap dengan isi grafik

  • bbox_to_anchor: biasanya digunakan untuk adjust lokasi dari legend. Bisa berisi 2 angka yang menunjukkan koordinat x dan y (misal (1.6,0.5) berarti geser 1.6 ke kanan dan 0.5 ke atas). Bisa juga berisi 4 angka, angka ketiga dan keempat menyatakan width (lebar) dan height (tinggi) dari legend.
  • shadow: jika diisi True, maka kotak legend akan memiliki bayangan.
  • ncol: jumlah kolom dari isi legend, defaultnya adalah 1
  • fontsize: ukuran huruf pada legend
  • title: memberikan judul pada legend
  • title_fontsize: ukuran huruf pada judul legend

Output:

Kalau sudah di breakdown by brand seperti ini terlihat ya trend sepanjang Oktober-Desember 2019 ini mirip semua. Jadi kemungkinan tidak ada faktor dari brand yang membuat GMV kita naik.

Coba kita breakdown berdasarkan province:

Output:

Selain itu, perhatikan juga bahwa pada grafik tersebut, list warnanya berbeda, tidak default seperti pada brand. Itu karena di function plot() ditambahkan parameter cmap (yakni, color map) yang mendefinisikan sekelompok warna yang akan diberikan untuk tiap line. Di sini yang digunakan adalah ‘Set1’, yakni satu set warna yang biasa digunakan untuk warna yang diskrit. Untuk mengetahui jenis-jenis color map, bisa dilihat di halaman web berikut: https://matplotlib.org/3.1.0/tutorials/colors/colormaps.html.

Dari grafik ini, terlihat ada beberapa provinsi yang mendominasi kenaikan GMV, seperti DKI Jakarta dan Jawa Barat. Tapi karena provinsinya banyak, yang bawah-bawah jadi kurang jelasnya. Bercampur semua begitu garisnya.

Membuat Line Chart GMV Breakdown by Top Provinces

Pada bagian sebelumnya, sudah terlihat cukup jelas jika kenaikan GMW disebabkan oleh provinsi. Berhubung kita fokusnya ke provinsi-provinsi yang GMV-nya besar, kalau begitu kita highlight untuk top 5 provinsi saja, yang lainnya kita gabungkan menjadi ‘other’,

Output:

Setelah itu, membuat kolom baru, misalnya ‘province_top’. Seperti sebelumnya, manfaatkan function apply & lambda.

Kemudian, setelah memiliki kolom baru, grafiknya bisa di update. Sebagai catatan, untuk mengubah ukuran figure, juga bisa menggunakan function plt.gcf().set_size_inches yang diletakkan di akhir code, sebelum plt.show().

Hasil grafiknya menjadi seperti ini:

Membuat Anotasi

Untuk membuat annotate, gunakan function plt.annotate. Parameter pertama adalah isi teksnya, dan parameter kedua adalah koordinat dari point yang dianotasi.

Selain itu ada beberapa parameter untuk anotasi yang bisa ditambahkan:

  • xytext: Koordinat dari teks. Jika tidak diisi,maka teks akan diletakkan di koordinat point yang dianotasi (parameter kedua)
  • arrowprops:Konfigurasi dari panah yang ditambahkan di anotasi, berupa dictionary. Beberapa hal yang bisa diset:
  • arrowstyle: menentukan bentuk dari panah penunjuk. Isinya bisa berupa bentuk seperti ‘->’, ‘-|>’, ‘<->’, ‘-[‘, dsb. Bisa juga berupa tulisan seperti ‘fancy’, ‘simple’, ‘wedge’, etc.
  • connectionstyle: menentukan bentuk dari garis panahnya. Ada beberapa nilai yang bisa digunakan, misalnya ‘arc’ dan ‘arc3’ yang berupa garis lurus, ‘angle’ untuk garis berbelok siku, ‘angle3’ untuk garis berbelok lengkung, atau ‘bar’ untuk berbelok siku dua kali.
  • color: menentukan warna dari panah

Berikut adalah kode yang digunakan untuk menganotasi multi-line chart dari 5 propinsi dengan GMV tertinggi

Output:

Membuat Subset Data

Pada bagian ini, kita akan fokuskan untuk analisis behavior transaksi di DKI Jakarta pada bulan Oktober-Desember 2019 ini, karena trend-nya mirip dengan overall GMV.

Berhubung kita mau fokus ke provinsi DKI Jakarta dan bulan Oktober-Desember 2019, kita filter saja datanya dan disimpan ke dataframe baru

Output:

Membuat Pie Chart

Untuk membuat Pie Chart, kita terlebih dahulu membuat datafram agregat.

Misalnya gmv_per_city_dki_q4, masukkan datanya ke function plt.pie().

Beberapa parameter yang bisa dimodifikasi:

  • labels: array yang berisikan label/tulisan yang ditunjukkan untuk masing-masing bagian pie.
  • colors: array yang berisikan warna untuk masing-masing bagian pie.
  • autopct: format untuk nilai persentasi yang ditampilkan, bisa berupa string atau function.
  • shadow: jika diisi True, maka ada bayangan untuk pie chart-nya. Defaultnya adalah False.
  • radius: jari-jari dari pie-chart

Output:

Membuat Bar Chart

Alternatif lain untuk membandingkan GMV tiap kota adalah dengan barchart. Saya lebih menyukai visualisasi ini karena lebih mudah terlihat perbandingan antar kota

Output:

Perhatikan di sini juga ditambahkan parameter rotation di plt.xtick() untuk memutar label di sumbu-x.

Sebagai catatan, jika ingin barchart-nya horizontal, maka bisa mengganti parameternya menjadi kind=’barh’, dengan tentu saja tidak lupa juga harus menyesuaikan sumbu x dan y nya.

Membuat Multi-Bar Chart

Dari grafik ini, kelihatannya Jakarta Selatan dan Jakarta Pusat lumayan mendominasi GMV. Tapi apakah ini konsisten di setiap bulan?

Mari kita coba buat multi-barchart.

Output:

Membuat Stacked Chart

Sebagai pembanding, coba kita ubah multi-bar chart sebelumnya menjadi stacked barchart.

Output:

Kesimpulan yang bisa didapatkan:

Dari kedua chart tersebut, kita sama-sama bisa melihat pola bahwa kebanyakan GMV turun dari bulan Oktober ke November, tetapi lalu naik pesat di bulan Desember. Untuk di Jakarta Barat, GMV November justru naik dari Oktober. Sedangkan di Jakarta Selatan, GMV Desember justru lebih kecil daripada GMV Oktober”,

Padahal Jakarta Selatan adalah penyumbang GMV paling besar ya. Berarti kita harus menyarankan tim bisnis untuk genjot lagi penjualan di sana, agar trend-nya naik kembali, seperti kota-kota lainnya.

Membuat Agregat Data Customer

Data ini sudah bisa jadi dasar bagi kami untuk membuat kampanye yang meningkatkan transaksi. Kalau dilihat, ini di Jakarta Barat potensinya lagi baik ya. Tiap bulan growth-nya positif.

Bagaimana dengan customer kita di DKI Jakarta? Apakah ada pola-pola menarik, terutama di Q4 2019?

Untuk melihat pola tersebut, kita coba lihat summary dari tiap customer. Kita akan membuat dataframe baru dengan nama data_per_customer

Output:

Di sini menggunakan function agg untuk melakukan agregasi data. Data agregat per customer yang diambil yaitu jumlah orders (banyaknya unique order_id), total quantity, dan total GMV.

Lalu didapatkan 711 customers yang bertransaksi di DKI Jakarta pada Q4 2020.

Jika diurutkan dari jumlah order terbanyak, bisa dilihat bahwa customer_id 12748 telah melakukan 29 transaksi dengan jumlah quantity mencapai 557, dan GMV lebih dari 175 Juta! Customer-customer seperti ini harus tetap dijaga agar semakin loyal dengan produk.

Membuat Histogram — Part 1

Dari dataframe baru ini kita bisa melihat persebaran datanya sekaligus untuk masing-masing variabel dengan menggunakan histogram.

Aku pun menggunakan function plt.hist dan memasukkan variabel yang ingin dicek. Parameter lain yang bisa ditambahkan yaitu:

  • bins: jumlah bin (kelompok nilai) yang diinginkan
  • range: nilai minimum dan maksimum yang ditampilkan
  • orientation: ‘horizontal’ atau ‘vertikal’
  • color: warna bar di histogram

Mulai dari variabel orders, dimulai tanpa parameter apapun.

Output:

Terlihat bahwa datanya terlalu berat ke kiri, hampir semua customer hanya bertransaksi kurang dari 10, maka dari itu perlu set range-nya, misalnya hanya dari 1 sampai 5.

Output:

Membuat Histogram — Part 2

Output:

Membuat Histogram — Part 3

Kita akan coba membuat distribusi dari nilai GMV. Kita harus menormalisasi ticks label di sumbu-x karena angka yang menunjukkan GMV bisa jadi terlalu panjang.

Output:

Membuat Scatterplot

Sekarang, coba kita lihat apakah variabel tersebut berkorelasi.

Untuk membuat scatterplot, aku perlu menggunakan function plt.scatter dengan memasukkan variabel-variabel yang akan dibuat scatterplot.

Contoh untuk melihat scatterplot quantity vs GMV:

Output:

Terlihat bahwa memang semakin besar quantity-nya, GMV cenderung semakin tinggi. Tapi masalahnya datanya banyak terkumpul di nilai-nilai kecil, sehingga tidak begitu terlihat detailnya di area situ.

Output:

Di sini semakin jelas bahwa quantity dan GMV itu berkorelasi positif. Jadi jika suatu customer telah membeli dengan banyak quantity, maka kemungkinan GMV dari dia juga semakin besar.

Beberapa hal yang telah kita pelajari dengan berbagai jenis visualisasi dengan matplotlib, diantaranya:

  1. membuat multi line-chart yang dapat digunakan untuk melihat komparasi dari GMV dari berbagai provinsi, dari bulan ke bulan.
  2. menghasilkan pie chart atau multi bar-chart untuk melihat komposisi GMV per kota.
  3. untuk melihat distribusi GMV atau quantity, kita bisa gunakan histogram.
  4. membuat scatterplot yang bisa memperlihatkan relasi antara quantity dan GMV.

MINI PROJECT

Case 1: Menentukan brand top 5

Lakukan analisis untuk top brands di bulan Desember 2019, di bawah ini adalah beberapa hal yang perlu dilakukan. Silakan ditambahkan dengan visualisasi-visualisasi lain yang kira-kira dapat memberikan insight tambahan.

Case 1:

Buat variabel baru (e.g. dataset_top5brand_dec) yang berisi data penjualan bulan Desember 2019, hanya untuk top 5 brand dengan quantity terjual terbanyak selama bulan Desember 2019. Sebutkan top 5 brands tersebut! Untuk visualisasi-visualisasi selanjutnya, hanya gunakan data frame ini.

Output:

Case 2: Multi-line chart daily quantity untuk brand top 5

Lakukan analisis untuk top brands di bulan Desember 2019, di bawah ini adalah beberapa hal yang perlu dilakukan. Silakan ditambahkan dengan visualisasi-visualisasi lain yang kira-kira dapat memberikan insight tambahan.

Case 2:

Buat visualisasi multi-line chart untuk daily quantity terjualnya, breakdown per brand. Maka, akan terlihat 1 tanggal di mana ada salah satu brand yang mengalami lonjakan (quantity lebih tinggi dari tanggal-tanggal lain). Beri anotasi untuk titik lonjakan tersebut.

Expected Output:

Syntax:

Case 3: Kuantitas penjualan brand top 5 selama Desember 2019

Cari tahu jumlah product untuk masing-masing brand yang laku selama bulan Desember 2019. Gunakan barchart untuk visualisasinya, urutkan dengan yang kiri adalah brand dengan product lebih banyak.

Expected Output:

Syntax:

Case 4: Penjulan produk diatas 100 dan dibawah 100 selama Desember 2019

Case 4:

Gunakan stacked chart, untuk breakdown barchart yang di Case 3, antara product yang terjual >= 100 dan < 100 di bulan Desember 2019. Apakah ada pola yang menarik?

Case 3: Cari tahu jumlah product untuk masing-masing brand yang laku selama bulan Desember 2019. Gunakan barchart untuk visualisasinya, urutkan dengan yang kiri adalah brand dengan product lebih banyak

Expected Output:

Syntax:

Case 5: Murah atau mahalkah harga produk brand top 5

Case 5:

Gunakan histogram untuk melihat distribusi harga product-product yang ada di top 5 brand tersebut (untuk tiap product_id, ambil median harganya). Bagaimana persebaran harga product nya? Cenderung banyak yang murah atau yang mahal?

Expected Output:

Syntax:

Case 6a: Korelasi quantity vs GMV

Case 6a:

Untuk setiap product_id, cek scatterplot antara quantity dan GMV, apakah ada korelasi? Bagaimana dengan median harga vs quantity? Apakah product yang murah cenderung dibeli lebih banyak?

Expected Output:

Syntax:

Case 6b: Korelasi median harga vs quantity

Case 6b:

Untuk setiap product_id, cek scatterplot antara quantity dan GMV sudah kamu lakukan pada Case 6a? Untuk Case 6b ini bagaimanakah dengan median harga vs quantity? Apakah product yang murah cenderung dibeli lebih banyak?

Expected Output:

Syntax

Summary:

Dari session ini, berdasarkan materi-materi yang telah aku pelajari dan praktikkan dalam modul ini, berikut summary materi yang telah didapatkan pengetahuan (knowledge) dan praktek (skill), diantaranya :

  • membuat multi line-chart
  • membuat pie chart atau multi bar-chart
  • membuat grafik distribusi suatu data dengan menggunakan histogram.
  • membuat scatterplot yang dikustomisasi secara langsung untuk menampilkan hasil visualisasi yang menarik dan memberikan insight kepada pembaca. Serta,
  • mengerjakan mini project untuk memvisualisasikan data produk retail berdasarkan pengetahuan (knowledge) dan praktek (skill) yangtelah diperoleh pada bab-bab sebelumnya.

Source: https://dqlab.id

--

--

No responses yet