Data Visualization with Python Matplotlib for Beginner — Part 2

Reyvan Maulid Pradistya
19 min readDec 12, 2020

--

Halo haloo semua! Kembali lagi bersama saya Reyvan Maulid Pradistya di medium! Masih melanjutkan untuk challenge sebelumnya, yang berhubungan dengan data visualization tentunya diaplikasikan menggunakan Python. Berbicara tentang data visualization, saya ada sedikit cerita dulu nih sebelum kita mulai.

Kalian disini pasti tahu tentang tipe belajar manusia. Sejauh yang saya ketahui ada tiga: Visual, Auditori dan Kinestetik. Well, saya adalah salah satu orang dengan tipe belajar visual. Jadi, saya lebih mudah mencerna suatu informasi bilamana ada gambar disertai dengan visualisasi yang menarik! Pasti terbantu banget kan dengan adanya data visualization ini. Kerap kali berhubungan banget dengan tipe saya. Tidak cuma daku seorang, pasti ada juga kan yang sama denganku. Benerbener insightful dehhh belajar seru dan asik menggunakan Data Visualization especially menggunakan Matplotlib dengan Python!

Sesuai dengan judul, pembahasan kali ini akan melanjutkan tentang artikel sebelumnya yaitu Data Visualization with Python Matplotlib for Beginner — Part 2. Buat kalian yang ketinggalan dengan pembahasan sebelumnya (Part 1) bisa klik langsung disini. Sedikit informasi juga nih buat temen-temen yang pengen banget belajar data science dan ingin mencoba produktif untuk persiapan berkarir di ranah industri data, kalian bisa banget cobain modul gratisnya dan akses project challengenya disini! Rasanyaa ahhh mantaappp!

__________________________________________________________________

Pada pembahasan kali ini, kita akan membahas mengenai salah satu library paling catchy dan powerful dalam Python yaitu Matplotlib. Pembahasan ini tentunya akan membekali kita untuk mengerti pemanfaatan library matplotlib dalam melakukan visualisasi data menggunakan pemrograman python. Melalui part 2 ini, kita akan mempelajari berbagai metode visualisasi dan tujuannya, dan diharapkan mampu membuatnya dengan matplotlib.

Are you ready guys? Let’s us begin!

Jenis-Jenis Visualisasi Data dan Tujuannya

Mari kita mulai dengan bahasan yang ringan terlebih dahulu ya! Kita akan membahas tentang jenis-jenis visualisasi.

Ada sebuah kata bijak yang mengatakan bahwa:

“Information graphics should be aesthetically pleasing but many designers think about aesthetics before they think about structure, about the information itself, about the story the graphic should tell” — Alberto Cairo

Artinya kita dalam membuat visualisasi data haruslah terlihat menarik secara estetika. Tentunya agar pengguna kita dapat dengan mudah menginterpretasikan hasil analisis kita. Bukan begitu?

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 masing-masing 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. Misalnya kalian ingin membandingkan data penjualan produk pada periode tertentu, disarankan menggunakan line-chart, sedangkan data penjualan masing-masing kategori produk makanan dan minuman disarankan 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.

Sampai sini sudah cukup paham ya sejauh ini? Oke, next!

Membuat Multi-line Chart dan Kustomisasi Lanjutan

Kali ini, kita akan mencoba membuat multi-line chart berdasarkan dataset yang kemarin. Buat yang ketinggalan, kalian bisa akses datasetnya disini. Aplikasi multi-line chart ini digunakan untuk breakdown datanya berdasarkan dimensi, misalnya berdasarkan brand atau province. Nanti akan terlihat bagian mana yang paling berperan dalam kenaikan GMV ini.

Berikut syntax yang digunakan untuk menampilkan multi-line chart:

Berikut output yang dihasilkan:

Berdasarkan grafik multi-line chart, memunculkan chart yang dibreakdown berdasarkan brand (dapat dilihat kecenderungan berdasarkan warnanya)

Kustomisasi Legend

Setelah kita belajar mengenai berbagai kustomisasi. Ada lagi, kita akan menggunakan kustomisasi legend. Berhubung brand-nya ada banyak, dan defaultnya di tengah makanya jadi menutupi grafiknya. Solusinya adalah kita pakai function khusus yaitu legend.

Atur komponen legend menggunakan function plt.legend() seperti yang ditunjukkan oleh potongan kode berikut ini:

Beberapa parameter yang bisa ditambahkan untuk legend:

  • loc: untuk menentukan posisi legend, berikut beberapa lokasi legend yang bisa didefinisikan:
  • ‘upper left’, ‘upper right’, ‘lower left’, ‘lower right’:legend diletakkan di pojok dari axes (atas kiri, atas kanan, bawah kiri, atas kiri)
  • ‘upper center’, ‘lower center’, ‘center left’, ‘center right’: legend diletakkan di tepi axes (atas tengah, bawah tengah, tengah kiri, tengah kanan)
  • ‘center’: legend diletakkan di tengah-tengah axes
  • ‘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

Berikut adalah hasil output setelah ditambahkan legend

Bandingkan dengan gambar sebelumnya, tentu pergerakannya akan lebih kelihatan jelas bukan? Dengan kustomisasi legend yang ditempatkan sebelah kanan akan jauh lebih terlihat pergerakannya sehingga mudah untuk dianalisis. Dengan demikian brand S jauh terlihat dan tidak terpotong seperti pada gambar sebelumnya

Kustomisasi Colormap

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. Sekarang kita akan masuk ke breakdown berdasarkan province.

Berikut adalah syntax yang digunakan:

Berikut adalah output grafiknya:

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 disini

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

Oke, sudah terlihat cukup jelas jika kenaikan GMV 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’,

Langkah 1: Buat variabel untuk 5 propinsi dengan GMV tertinggi

Cara membuat variabelnya kalian bisa mengaplikasikan syntax berikut:

top_provinces = (dataset.groupby(‘province’)[‘gmv’]
.sum()
.reset_index()
.sort_values(by=’gmv’,ascending=False)
.head(5))
print(top_provinces)

Berikut adalah hasil outputnya:

Dari data tersebut, kita dapat melihat bahwa DKI Jakarta memiliki GMV tertinggi diikuti Jawa Barat di posisi kedua. Sedangkan Jawa Timur berada pada posisi kelima

Langkah 2: Buat satu kolom lagi di dataset dengan nama province_top

dataset[‘province_top’] = dataset[‘province’].apply(lambda x: x if (x in top_provinces[‘province’].to_list()) else ‘other’)

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

Langkah 3: Plot multi-line chartnya

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

Sehingga hasil grafiknya akan menjadi seperti ini:

Dengan demikian grafik tersebut menjadi lebih ringkas sehingga hanya memunculkan 5 teratas berdasarkan provinsi yang memperoleh GMV tertinggi

Membuat Anotasi

Anotasi itu mirip seperti teks, hanya saja ada suatu titik tertentu yang kita tunjuk untuk diberikan informasi tambahan. Selain itu, kita bisa menambahkan panah melalui 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

Anotasi Pertama

Kita akan memberikan informasi berupa teks untuk mengisyaratkan bahwa GMV bagian other memiliki peningkatan yang cukup pesat. Berikut syntaxnya:
plt.annotate(‘GMV other meningkat pesat’, xy=(5, 900000000),
xytext=(4, 1700000000), weight=’bold’, color=’red’,
arrowprops=dict(arrowstyle=’fancy’,
connectionstyle=”arc3",
color=’red’))

Anotasi Kedua

Selanjutnya, pada anotasi kedua kita akan memberikan informasi mengenai GMV DKI Jakarta mendominasi dari provinsi lainnya

plt.annotate(‘DKI Jakarta mendominasi’, xy=(3, 3350000000),
xytext=(0, 3700000000), weight=’bold’, color=’red’,
arrowprops=dict(arrowstyle=’->’,
connectionstyle=”angle”,
color=’red’))

Berikut adalah hasil grafik setelah diberikan anotasi:

Jadi terlihat mudah bukan dengan menggunakan anotasi, pembacaan data akan lebih terlihat dan memunculkan informasi baru

Membuat Subset Data

Ternyata ada sebuah challenge, dimana ada request kalau provinsi ‘other’ ini, kita analisis lagi di lain waktu saja dan fokuskan untuk analisis behavior transaksi di DKI Jakarta pada bulan Oktober-Desember 2019 ini, karena trend-nya mirip dengan overall GMV.

Kemudian, kita akan coba cek terlebih dahulu perbandingan GMV di kota-kota di DKI Jakarta itu seperti apa

Caranya kita filter saja datanya dan disimpan ke dataframe baru dengan menggunakan data frame dataset_dki_q4.

Berikut adalah syntax dalam membuat subset data untuk dataset baru DKI Jakarta

dataset_dki_q4 = dataset[(dataset[‘province’]==’DKI Jakarta’)& (dataset[‘order_month’] >= ‘2019–10’)]
print(dataset_dki_q4.head())

Jika dijalankan maka akan menghasilkan data 5 teratas sebagai berikut:

Membuat Pie Chart

Selanjutnya kita diberikan tugas untuk membuat pie chartnya. Sebelumnya, Kita perlu membuat dulu dataframe agregat. Berikut caranya:

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

Berikut syntax yang bisa digunakan untuk membuat pie-chart:

Dan hasilnya ialah sebagai berikut:

Berdasarkan pie-chart, Jakarta Selatan memiliki perbandingan GMV paling tinggi proporsinya jika dibandingkan dengan kota lain di DKI Jakarta (36,23%). Sedangkan Jakarta Utara memiliki proporsi GMV paling rendah (11,92%)

Membuat Bar Chart

“Selain menggunakan pie chart, kita bisa pakai bar chart, tidak?”

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

Syntax dalam praktik membuat bar chart mirip dengan line chart, tentukan nilai untuk sumbu-x dan sumbu-y, lalu tambahkan parameter kind=’bar’ seperti berikut ini:

Sehingga hasil grafiknya sebagai berikut:

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.

Jadi, visualisasinya akan semakin terlihat perbandingan antar kota jika menggunakan bar chart.

Membuat Multi-Bar Chart

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

“Bentar yah, ini aku buatkan dulu multi-barchart untuk analisisnya,”

Ini kode yang kutuliskan untuk membuat multi-barchart:

Berikut adalah hasil grafik menggunakan multiple bar — chart

Berdasarkan hasil dari multiple bar-chart, justru Jakarta Selatan lebih dominan tertinggi dibandingkan Jakarta Pusat dari sisi GMV. Tapi, sayangnya Jakarta Barat justru lebih potensial. Hal ini dibuktikan pertumbuhannya(growth) positif setiap bulannya

Membuat Stacked Chart

“Sebagai pembanding saja, bagaimana kalau kita ubah multi-bar chart sebelumnya menjadi stacked barchart?”

Yukkk mari kita ubah sedikit kodenya, seperti ini:

Berikut hasilnya dengan menggunakan stacked bar-chart:

Terlihat, perbandingannya sangat begitu jelas. Warna hijau yang diwakili Jakarta Selatan memiliki perbandingan yang cukup dominan dibandingkan dengan kota lainnya. Kalau dilihat juga, Jakarta Barat tiap bulan growth-nya positif

Membuat Agregat Data Customer

“Oke, 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 itu, coba kita lihat dulu summary untuk tiap customer kita”.

Saya pun membuat dataframe baru bernama data_per_customer_dki_q4. Berikut merupakan syntax yang digunakan untuk membuat dataframe baru

data_per_customer = (dataset_dki_q4.groupby(‘customer_id’)
.agg({‘order_id’:’nunique’,
‘quantity’: ‘sum’,
‘gmv’:’sum’})
.reset_index()
.rename(columns={‘order_id’:’orders’}))
print(data_per_customer.sort_values(by=’orders’,ascending=False))

Berikut outputnya:

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! Luar biasa ya. 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. Jadi, pakai histogram bukan?”

“Iya, langsung dikerjakan saja”

Saya 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

Histogram pertama:

import matplotlib.pyplot as plt
plt.clf()
# Histogram pertama
plt.figure()
plt.hist(data_per_customer[‘orders’])
plt.show()

Hasilnya sebagai berikut:

Jika dilihat dari hasilnya, 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. Maka dari itu, kita akan coba membuat histogram kedua

Histogram Kedua

# Histogram kedua
plt.figure()
plt.hist(data_per_customer[‘orders’], range=(1,5))
plt.title(‘Distribution of Number of Orders per Customer\nDKI Jakarta in Q4 2019’,fontsize=15, color=’blue’)
plt.xlabel(‘Number of Orders’, fontsize = 12)
plt.ylabel(‘Number of Customers’, fontsize = 12)
plt.show()

Hasilnya sebagai berikut:

Berdasarkan histogram, dengan menggunakan set range 1–5 dapat diketahui persebaran datanya. Terlihat lebih jelas dan mudah bukan?

Sampai disini sudah jelas ya? Gimana nihh seneng ga belajar visualisasi data menggunakan matplotlib python? Tentu seruu dong yaaa…..

Membuat Histogram — Part 2

Kalau seperti ini, kita juga bisa membuat histogram untuk quantity. Caranya gimana? Perhatikan baik-baik syntax berikut ini yaaa

Dan hasilnya adalaaahhhh………

Dapat disimpulkan bahwa grafik cenderung ke arah sebelah kiri

Membuat Histogram — Part 3

Tugas selanjutnya, saya harus menormalisasi ticks label di sumbu-x karena angka yang menunjukkan GMV bisa jadi terlalu panjang. Berikut adalah syntax yang bisa digunakan:

Terdapat perbedaan dengan syntax sebelumnya, dimana kita harus menormalisasi angka sehingga menjadi jutaan untuk satuannya agar tidak terlalu panjang

Dan hasilnya adalahhhh

Ternyata ketiga variabel tersebut memiliki distribusi yang mirip, grafiknya condong ke kiri.

Membuat Scatterplot

Kalau kalian lihat, ini udah bagus penyajiannya. Tapi apakah variabel tersebut bisa saling berkorelasi? Disini saya akan menggunakan konsep visualisasi “keterhubungan”. Saya pun segera melihatnya dengan scatterplot.

Untuk membuat scatterplot, saya perlu menggunakan function plt.scatter dengan memasukkan variabel-variabel yang akan dibuat scatterplot. Pada praktik ini akan menggunakan dua jenis scatterplot

Contoh untuk melihat scatterplot quantity vs GMV:

Scatterplot Pertama

Kalian bisa menggunakan syntax berikut:

import matplotlib.pyplot as plt
plt.clf()
# Scatterplot pertama
plt.figure()
plt.scatter(data_per_customer[‘quantity’], data_per_customer[‘gmv’])
plt.show()

Hasilnya ialah sebagai berikut:

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. Dengan demikian, perlu dilakukan perbaikan untuk scatterplot menggunakan scatterplot kedua

Scatterplot Kedua

Berikut adalah syntax yang kalian bisa lakukan untuk mengubah scatterplot:

# Scatterplot kedua: perbaikan scatterplot pertama
plt.figure(figsize=(10,8))
plt.scatter(data_per_customer[‘quantity’],data_per_customer[‘gmv’], marker=’+’, color=’red’)
plt.title(‘Correlation of Quantity and GMV per Customer\nDKI Jakarta in Q4 2019’,fontsize=15, color=’blue’)
plt.xlabel(‘Quantity’, fontsize = 12)
plt.ylabel(‘GMV (in Millions)’,fontsize = 12)
plt.xlim(xmin=0,xmax=300)
plt.ylim(ymin=0,ymax=150000000)
labels, locations = plt.yticks()
plt.yticks(labels, (labels/1000000).astype(int))
plt.show()

Hasil outputnya adalah:

Di sini semakin jelas bahwa quantity dan GMV itu berkorelasi positif (mengumpul disertai menyebar). Jadi jika suatu customer telah membeli dengan banyak quantity, maka kemungkinan GMV yang dihasilkan juga semakin besar.

Gimana nih belajarnya sampai sini? Terlihat seruuu bukaannn? Kalian tidak usah ragu lagi jika ingin menganalisis suatu data menggunakan visualisasi menarik, kalian cukup perlu insert library matplotlib pada python, silahkan digunakan sesuai dengan kebutuhan kalian ingin melihat datanya seperti apa? Sesuai konsep visualisasi yang telah saya jelaskan diatas

Sebelum kita lanjut ke case study, silahkan yang mau ambil camilan atau mau cuci tangan dulu silahkan. Candaaa :D

_________________________________________________________________

Mini Project: Here We Go!

Kini kita telah selesai belajar bersama mempelajari bagaimana membuat 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.

Oleh karena itu, saat kita ingin membuat suatu visualisasi dari data yang dimiliki, kita bisa memilih mana jenis yang paling tepat, serta sudah bisa membuatnya dengan matplotlib.

Sekarang ini untuk menguji pemahaman dan keterampilan mengenai visualisasi data. Saya ditantang untuk menyelesaikan sebuah mini project yang harus diselesaikan dengan baik.

Case 1: Menentukan brand top 5

Lakukan analisis untuk top brands di bulan Desember 2019, di bawah ini adalah beberapa hal yang perlu dilakukan. Silahkan 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.

Langkah-Langkah:

  1. Mengambil informasi top 5 brands berdasarkan quantity:

Kalian bisa menggunakan syntax berikut:

Berikut hasil outputnya:

Berdasarkan output diatas, dapat disimpulkan bahwa brand S memiliki kuantitas top brands yang paling besar sebesar 2.197. Sedangkan brand A memiliki kuantitas paling sedikit yaitu 1.315.

2. Membuat dataframe baru, filter hanya di bulan Desember 2019 dan hanya top 5 brands

Kalian bisa membuat dengan syntax berikut:

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

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.

Untuk membuat visualisasinya kalian bisa gunakan syntax berikut:

Berikut hasil visualisasi yang ditampilkan:

Berdasarkan hasil output grafis, terjadi lonjakan kuantitas yang terjual pada setiap tanggal. Lonjakan yang cukup drastis ditunjukkan oleh brand P pada tanggal 6 Desember 2019 sebesar 300. Dimana lonjakan ini lebih tinggi sehingga perlu diberikan anotasi sebagai penanda terjadinya lonjakan

Case 3: Kuantitas penjualan brand top 5 selama Desember 2019

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.

Kalian bisa menggunakan visualisasi bar-chart menggunakan syntax berikut:

Sehingga hasil grafisnya sebagai berikut:

Secara berurutan dari yang paling kiri, Brand S merupakan Brand dengan jumlah produk yang laku terjual paling banyak sebesar 145. Jika dibandingkan dengan Brand P menempati urutan kedua dengan 100 produk yang laku terjual. Walaupun pada kenyataannya, brand P pernah menduduki posisi teratas karena terjadi lonjakan yang drastis (visualisasi sebelumnya) sehingga diberikan anotasi sebagai penanda

Case 4: Penjualan 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?

Untuk memunculkan stacked bar-chart. Dapat menggunakan langkah-langkah berikut:

  1. Membuat dataframe baru, untuk agregat jumlah quantity terjual per product

2. Beri kolom baru untuk menandai product yang terjual >= 100 dan <100 (Hal ini memudahkan untuk pembuatan dan identifikasi stacked bar-chart)

dataset_top5brand_dec_per_product[‘quantity_group’] = dataset_top5brand_dec_per_product[‘quantity’].apply(lambda x: ‘>= 100’ if x>=100 else ‘< 100’)
dataset_top5brand_dec_per_product.sort_values(‘quantity’,ascending=False,inplace=True)

3. Membuat referensi pengurutan brand berdasarkan banyaknya semua product

4. Plot stacked bar-chart

Sehingga hasil grafiknya menjadi:

Berdasarkan stacked bar-chart top 5 brands, terdapat pola yang menarik. Brand S lebih banyak menjual kuantitas produknya dibawah 100. Sedangkan, brand P lebih banyak menjual kuantitas lebih dari sama dengan 100. Artinya brand P lebih berani untuk menjual produk lebih dari 100 walaupun kenyataannya sedikit. Sehingga dengan menggunakan stacked bar-chart akan diketahui perbedaannya dari segi kuantitas

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?

Kalian bisa menggunakan syntax berikut:

Sehingga berikut hasil persebarannya:

Berdasarkan nilai median dari persebaran harga top 5 brands, harganya dapat dikatakan cukup kompetitif dan terjangkau (grafik histogram cenderung ke arah sebelah kiri). Berkisar antara Rp 250.000 hingga Rp 500.000. Kemudian, di angka Rp 500000 memiliki peluang besar dengan produk yang terjual sebesar 120 produk.

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?

Berikut adalah syntax yang bisa digunakan:

Berikut adalah hasil scatter-plotnya:

Di sini semakin jelas bahwa quantity dan GMV itu berkorelasi positif dari top 5 brands(mengumpul disertai menyebar). Artinya jika suatu customer telah membeli dengan kuantitas yang besar, maka kemungkinan GMV yang dihasilkan juga semakin besar.

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?

Berikut syntax yang digunakan untuk melihat scatterplot:

Sehingga hasil scatterplotnya sebagai berikut:

Berdasarkan hasil output, distribusi median harga top 5 brands pada angka Rp 250.000 lebih banyak mengumpul dan menyebar keatas sesuai jumlah kuantitas produk yang dijual (ditunjukkan dengan angka 0–50). Hal tersebut berkorelasi positif yang artinya bahwa semakin murah harga suatu produk maka customer berpeluang besar untuk membeli jumlah produk dengan jumlah yang banyak.

Kesimpulan Case Study:

Dapat disimpulkan bahwa dari kelima top brand, brand S memiliki kuantitas top brands yang paling besar sebesar 2.197. Kemudian, Lonjakan yang cukup drastis ditunjukkan oleh brand P pada tanggal 6 Desember 2019 sebesar 300. Dimana lonjakan ini lebih tinggi sehingga perlu diberikan anotasi. Kemudian, dilihat dari sisi kuantitas produk yang laku terjual, brand S lebih banyak kuantitasnya. Berdasarkan stacked bar-chart top 5 brands, terdapat pola yang menarik. Brand S lebih banyak menjual kuantitas produknya dibawah 100. Sedangkan, brand P lebih banyak menjual kuantitas lebih dari sama dengan 100. Terdapat hubungan positif antara kuantitas dengan GMV yang artinya semakin banyak customer yang membeli produk dalam jumlah yang besar, dapat disimpulkan GMV yang dihasilkan juga akan semakin besar. Terdapat hubungan pula antara median harga dengan kuantitas produk. Hal tersebut berkorelasi positif yang artinya bahwa semakin murah harga suatu produk maka customer berpeluang besar untuk membeli jumlah produk dengan jumlah yang banyak.

Penutup

Finally, akhirnya kita selesai juga menyelesaikan project “Data Visualization with Python Matplotlib for Beginner — Part 2” sehingga saya dapat belajar banyak mengenai hal berikut:

  • 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) yang telah diperoleh pada bab-bab sebelumnya.

_________________________________________________________________

Oke, kalau begitu sekian dulu pembahasan kita kali ini. Terima kasih atas kesediaan kalian dan waktu yang telah diluangkan untuk membaca tulisan ini. Semoga bermanfaat! Happy Weekend! Sampai Jumpa lagi di next topic

Visualization gives you answers to questions you didn’t know you had — Ben Schneiderman

Referensi:

DQLAB

Data Visualization with Python Matplotlib for Beginner — Part 2

--

--