Tutorial membuat barchart dengan SEABORN

Tutorial Membuat Barchart dengan SEABORN (Studi Kasus Kemacetan Jakarta)

Tutorial membuat barchart dengan SEABORN

Halo sahabat pembaca semuanya, kali ini saya ingin menulis dan berbagi hal yang tidak pernah saya bagikan sebelumnya. Apa itu? Yaitu adalah tutorial hands-on data science. Lebih tepatnya pada kesempatan kali ini saya ingin berbagi tentang tutorial membuat barchart dengan seaborn. Saya ingin membagikan ini karena dalam 2-3 tahun terakhir banyak sekali saya belajar tentang data science, baik itu untuk analysis dan juga analytics. Bagi yang ingin tahu apa perbedaan keduanya, silakan bisa langsung cek saja tulisan saya sebelumnya mengenai apa itu data sains.

Kali ini saya ingin berbagi tentang tutorial sederhana, yaitu membuat barchart atau barplot menggunakan Seaborn di Python. Barchart pada umumnya adalah pendekatan visualisasi data untuk membandingkan beberapa items dengan satu atau lebih variabel. Visualisasi barchart menggunakan Seaborn ini sangat bermanfaat jika kita memerlukan kustomisasi tingkat tinggi, di mana seringkali dibutuhkan jika ingin menyiapkan gambar untuk publikasi di jurnal.

Agar lebih menarik, kali ini saya akan mendemonstrasikan pembuatan barchart menggunakan dataset asli. Dataset yang akan kita gunakan adalah dari Dinas Perhubungan DKI Jakarta mengenai kecepatan rata – rata kendaraan di jam – jam sibuk tahun 2020. Jam sibuk ini dibagi menjadi 2, yaitu pagi dan sore. Menurut Kadishub DKI Jakarta, jam sibuk pagi dimulai dari pukul 06.00 – 10.00, sementara jam sibuk sore hari dimulai dari 16.00 – 21.00. Dataset ini dapat diunduh secara gratis dan terbuka di Jakarta Open Data. Berikut adalah tampilan dari dataset tersebut,

Cuplikan Dataset Kecepatan Kendaraan di Jam Sibuk DKI Jakarta tahun 2020

Dengan dataset ini, kita akan mencoba menjawab: “Manakah Ruas Arah Paling Macet di DKI Jakarta pada tahun 2020?”

Berikut ini adalah langkah – langkah yang bisa dilakukan setelah mengunduh dataset tersebut.

Import Library yang Diperlukan

Sebelum kita mulai melakukan visualisasi data, maka import dulu library yang diperlukan. Oh ya, saya mengerjakan ini dengan menggunakan Jupyter Notebook.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

4 library yang dibutuhkan, yaitu Pandas, Numpy, Seaborn, dan Matplotlib. Pandas adalah untuk melakukan manipulasi dataset di tabel, numpy untuk melakukan manipulasi aritmatik, seaborn untuk melakukan visualisasi data, dan matplotlib untuk melakukan kustomisasi grafik Seaborn, karena Seaborn berbasis pada Matplotlib.

Import Dataset ke Pandas Dataframe

Jika sudah diimport dan tidak ada error, maka bisa langsung memasukkan dataset menjadi dataframe Pandas. Pada tutorial ini, saya memberi nama dataset saya dengan dataset.csv , yang merupakan dataset dari Jakarta Open Data.

[1] df = pd.read_csv('dataset.csv') #import dataset ke Pandas Dataframe
[2] df.head() #memunculkan 'kepala' dari dataframe (5 entri teratas)

Maka outputnya menjadi,

Contoh kepala dataset yang telah diimport menjadi Pandas Dataframe

Jika sudah, maka kita memiliki variabel df yang merupakan Pandas Dataframe dari Dataset dan siap untuk divisualisasikan menggunakan Seaborn.

Membuat Barplot dari kecepatan rata-rata pagi dan sore menggunakan Seaborn

Seperti yang dapat dilihat di atas, dataset memiliki kecepatan rata-rata baik pagi maupun sore. Sekarang kita ingin melakukan perbandingan kecepatan untuk masing-masing arah, seperti yang diperlihatkan pada kolom 1. Pada kolom 1, di sana terdapat data ‘Selatan-Pusat’, maksudnya adalah arah dari Jakarta Selatan ke Jakarta Pusat. Di masing – masing arah, terdapat koridor yang masing – masing memiliki kecepatan rata-rata baik di pagi maupun sore hari.

Pada praktik kali ini, kita akan membuat barchart untuk memvisualisasikan rata – rata kecepatan tersebut untuk masing – masing arah. Maka berikut adalah coding nya,

Dengan memasukkan kode di atas, maka akan menghasilkan barchart berikut ini,

Output dari Barchart menggunakan Seaborn

Hore! Kita sudah berhasil menghasilkan bar chart yang pada umumnya sudah cukup mendeskripsikan perbandingan antara kecepatan rata – rata kendaraan di pagi hari untuk setiap ruas arah di Jakarta. Dapat kita lihat dari hasil di atas bahwa arah dari Pusat ke Selatan dan sebaliknya merupakan ruas arah paling macet, di mana rata – rata kecepatan kendaraannya rendah. Sementara untuk arah dari Jakarta Pusat ke Jakarta Timur adalah ruas arah paling ‘mendingan’ di antara yang lain, walaupun pasti juga macet di arah itu.

Namun sebagai data scientist, ada kalanya kita ingin menambahkan beberapa kustomisasi, seperti:

  • Menambah standar deviasi pada bar chart untuk mengetahui sebaran
  • Menambah angka di bar chart untuk mengetahui nilai pastinya
  • Menambahkan transparansi sehingga warna Bar Chart sedikit lebih tipis

Bagaimana caranya menambahkan ketiga hal tersebut? Caranya cukup mudah, yaitu dengan menambah dan mengganti beberapa parameter. Kita masih akan menggunakan kode di atas, namun kali ini saya ingin mendeskripsikan kecepatan rata – rata di sore hari. Bagian yang saya bold menandakan perubahan yang saya lakukan pada coding.

Dengan memasukkan kode di atas, maka berikut ini adalah hasilnya:

Hasil keluaran bar chart kecepatan rata-rata sore hari

Dari tampilan di atas, kita dapat lihat bahwa arah dari Jakarta Pusat ke Jakarta Selatan adalah yang paling rendah kecepatannya, namun kita juga dapat melihat standar deviasinya paling tinggi, menandakan bahwa kemacetan di beberapa koridor memiliki variasi yang tinggi (maksudnya: di beberapa koridor jalan bisa macet sekali, namun di beberapa koridor yang lain agak longgar lah . Hal sebaliknya dapat kita lihat dari Jakarta Pusat ke Jakarta Barat, di mana standar deviasinya kecil. Hal ini menandakan kecepatan rata – rata di beberapa koridor yang ada di arah tersebut memiliki nilai yang cenderung homogen (intinya: di mana – mana macetnya sama).

Oke, biasanya sih dengan visualisasi yang demikian sudah cukup menggambarkan bagaimana sebenarnya kondisi di masing – masing arah.

Namun, namanya manusia kadang maunya lebih. Misalnya, “bang gimana kalo gue mau ngurutin bar chart nya dari yang paling tinggi ke rendah, jadi bos gue enak bacanya?”

Yah intinya semacam sorting gitulah.

Kalau yang ingin memang agak sedikit tricky, karena yang kita ubah bukan gambarnya, tetapi Pandas Dataframe nya. Kita bisa melakukan itu hanya dengan memasukkan satu baris tambahan untuk memanipulasi Pandas Dataframe, baru kita plot ke Seaborn. Begini barisnya:

#Deklarasi variabel sorting
sorting = df.groupby(["arah"])['kecepatan_rata_rata_sore'].aggregate(np.mean).reset_index().sort_values('kecepatan_rata_rata_sore', ascending=False)

Intinya pada baris di atas saya menciptakan variabel sorting untuk melakukan sorting nilai rata – rata dari kecepatan sore, dengan ascending=False, maksudnya dimulai dari yang besar dulu baru ke yang kecil. Dengan ini baru kemudian kita plot deh ke Seaborn, Caranya adalah dengan memasukkan parameter order, sehingga menjadi seperti berikut ini,

Maka, hasilnya akan menjadi seperti berikut,

Barchart Seaborn setelah di sorting

Gambar di atas menampilkan Barchart hasil dari Seaborn setelah disorting, diurutkan dari yang kecepatan paling tinggi, hingga paling rendah. Kecepatan lebih tinggi menandakan bahwa arah tersebut relatif lebih longgar kemacetannya dibandingkan dengan ruas arah yang lebih rendah.

Menggabungkan Barchart kecepatan pagi dan sore

Bagian terakhir ini akan menjawab pertanyaan, “bisa ga sih kalau kita mau menggabungkan barchart kecepatan di pagi dan sore hari menjadi satu?” Jawabannya tentu saja bisa, yaitu dengan terlebih dulu sedikit memodifikasi Dataframe nya. Untuk itu saya membuat dataset baru dan menambahkan 2 kolom baru, yaitu “rata_rata_kecepatan” dan waktu lalu saya simpan dengan nama file ‘dataset2.csv’.

Maka yang pertama kita import dataset2.csv menjadi Pandas Dataframe,

[1] df2 = pd.read_csv('dataset2.csv') #import dataset ke Pandas Dataframe [2] df2.head() #memunculkan 'kepala' dari dataframe (5 entri teratas)

Maka keluarannya adalah seperti berikut ini,

Tampilan kepala dari Dataset 2

Untuk membuat rata – rata kecepatan di pagi dan sore hari muncul dalam satu gambar, cukup tambahkan parameter hue untuk mengambil kategori ‘waktu’, dan palette untuk menentukan warna dari masing-masing bar plot. Berikut adalah kode nya,

Maka hasilnya menjadi seperti berikut ini,

Maka demikianlah sedikit tutorial sederhana ini saya tuliskan. Jika data yang diolah akurat, menurut saya dari hasil pengolahan sederhana di atas dapat memberikan insight untuk data-driven policy making dalam rangka menurunkan angka kemacetan. Hasil di atas tentu dapat menjadi pembuka topik diskusi berikutnya, “mengapa di arah tertentu kecepatan sangat rendah, dan di arah lain sedikit lebih tinggi?”, “ruas koridor mana yang berkontribusi dalam kemacetan paling parah? Mana titik jalan yang paling kritis? Arah mana yang perlu diprioritaskan terlebih dulu untuk diperbaiki?” Dengan menggunakan analisa kebijakan berbasis data, harapannya keputusan yang dihasilkan pun dapat menjadi lebih rasional.

Namun yang terpenting, mudah – mudahan tutorial sederhana SEABORN ini bisa bermanfaat yaa.

Sekian dari saya,

Salam,
Arry Rahmawan