Analisis Dan Visualisasi Data Menggunakan Python

Muhammad Abdul Hafizh
24 min readMay 23, 2023

--

source: Data Analysis with Python

Python merupakan salah satu bahasa pemrograman yang paling populer di seluruh dunia. Karena penggunaannya yang sangat fleksibel banyak pengembang menggunakan python untuk membuat sebuah aplikasi, game, pengolahan citra, pengembangan web bahkan sampai pembuatan AI (artificial intelligence). Python juga merupakan sebuah tools penting yang digunakan oleh seorang Data Analisis.

Python bersifat open-source, alias dibuka gratis untuk publik. Ini juga artinya ada banyak sekali fitur dan kode buatan kreator yang semakin memperluas kapabilitas Python. Semua alasan ini semakin membuat Python dicintai oleh komunitas pencinta teknologi. Maka dari itu, tidak heran kalau banyak sekali pemula yang mengambil langkah pertamanya untuk belajar soal Python.

Dipython kita juga dapat melakukan visualisasi data yang sangat berguna bagi seorang data analisis. Visualisasi digunakan agar lebih mudah dalam membaca sebuah data. Dengan meanfaatkan beberapa fungsi dari library kita dapat melakukan bentuk visualisasi data yang diinginkan.

Studi Kasus Analisis Data dan Visualisasi Data menggunakan Python

Ada beberapa aplikasi yang dapat digunakan untuk menganalisis data menggunakan python. Pada kesempatan kali ini saya akan menggunakan Google Colab atau Google Collaboratory untuk melakukan analisis dan visualisasi data. Google Collab merupakan salah satu produk Google research yang berbasis Cloud yang dapat digunakan secara gratis tanpa harus melakukan instalasi di lokal komputer.

Pada latihan ini data yang digunakan sama seperti pada artikel sebelumnya mengenai Final Projek yang saya kerjakan, yaitu Analisis Data Penjualan E-Commerce dengan PostgreSQL. Data ini berasal dari Kaggle, yaitu Pakistan’s Largest E-Commerce Dataset dengan beberapa perubahan seperti harga yang tertera sudah dikonversi 1 Rupee = Rp58.

Jika ingin mendapatkan file yang saya gunakan dapat dilihat di github yang sudah saya siapkan, yaitu disini. Setelah meyiapkan data selesai, mari kita mulai menganalisis data menggunakan python di Google Colab!

Import Library

Untuk menganalisis dan melakukan visualisasi di python diperlukan beberapa library atau modul yang digunakan untuk memanggil beberapa fungsi yang akan digunakan nanti. Karena Google Colab sudah terintegrasi dengan library yang akan kita gunakan, maka kita dapat langsung mengimportnya tanpa meng-install terlebih dahulu.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pandas.tseries.offsets import BDay

Dari syntax diatas dapat dijelaskan sebagai berikut:

  • import pandas as pd, digunakan untuk mengimport library “pandas” yang berfungsi untuk memanipulasi data dan disimpan dengan variabel “pd” untuk memudahkan pemanggilan fungsi.
  • import numpy as np, digunakan untuk mengimport library “numpy” yang berfungsi untuk memudahkan melakukan penghitungan data aray atau matriks dan disimpan dengan variabel “np”.
  • import matplotlib.pyplot as plt, digunakan untuk mengimport library matplotlib.plyplot” untuk membuat grafik dasar visualisasi di python dan disimpan dengan variabel “plt”.
  • import seaborn as sns, digunakan untuk mengimport library “seaborn” yang berfungsi untuk memudahkan melakukan visualisasi grafik pola dan plot mirip seperti matplotlib kemudian disimpan dengan variabel “sns”.
  • from pandas.tseries.offsets import BDay, digunakan untuk mengimpor “Bday” yang diambil dari “pandas.tseries.offsets”. Dimana tseries.offsets adalah object Pandas yang berisi satuan date increment yang umum digunakan pada data datetime.

Jika sudah, silahkan dijalankan program tersebut dengan menekan tombol play di blok program dan akan ada tanda “Ceklis Hijau” jika berhasil dijalankan.

Tanda program berhasil dijalankan

Import Dataframe

Selanjutnya melakukan import DataFrame yang akan kita analisis dan visualisasikan dari data yang sudah disiapkan.

path_od = "https://raw.githubusercontent.com/m-abdulhafizh/Dataset-Final-Project-Data-Analysis/main/order_detail.csv"
path_pd = "https://raw.githubusercontent.com/m-abdulhafizh/Dataset-Final-Project-Data-Analysis/main/payment_detail.csv"
path_cd = "https://raw.githubusercontent.com/m-abdulhafizh/Dataset-Final-Project-Data-Analysis/main/customer_detail.csv"
path_sd = "https://raw.githubusercontent.com/m-abdulhafizh/Dataset-Final-Project-Data-Analysis/main/sku_detail.csv"
df_od = pd.read_csv(path_od)
df_pd = pd.read_csv(path_pd)
df_cd = pd.read_csv(path_cd)
df_sd = pd.read_csv(path_sd)

Sumber data tersebut saya ambil dari github yang sebelumnya sudah saya upload dengan format file .csv yang nantinya akan digunakan sebagai DataFrame atau tabel di python.

  • Membuat variabel yang nantinya akan mempermudah pemanggilan data pada file, seperti “path_od” untuk isi file “order detail”, “path_pd” untuk isi file “payment detail”, “path_cd” untuk isi file “customer detail”, path_sd untuk isi file “sku detail”.
  • Sama seperti sebelunya, “df_od”, “df_pd”, “df_cd”, “df_sd” digunakan untuk membuat variabel agar memudahkan pemanggilan link path yang sebelumnya.
  • pd.read_csv, digunakan untuk membaca file yang memiliki format “.csv” dengan menggunakan fungsi yang ada didalam library pandas. Kemudian didalam kurung tersebut dapat diisi variabel path yang sudah dibuat sebelumnya atau dapat langsung memasukkan link filenya tanpa membuat variabel.

Sekarang silahkan jalankan program tersebut untuk melakukkan pemanggilan data.

Memanggil Dataframe

Kita dapat memanggil semua DataFrame yang sudah dijalankan dan dapat dilihat didalam tabel.

Melihat isi tabel “order detail”.

df_od.head()

Hasil yang didapatkan:

5 baris teratas isi tabel order detail

Melihat isi tabel “payment detail”.

df_pd.head()

Hasil yang didapatkan:

5 baris teratas isi tabel payment detail

Melihat isi tabel “customer detail”.

df_cd.head()

Hasil yang didapatkan:

5 baris teratas isi tabel customer detail

Melihat isi tabel “sku detail”.

df_sd.head()

Hasil yang didapatkan:

5 baris teratas isi tabel sku detail

Dapat kita lihat bahwa untuk memanggil dataframe kedalam sebuah tabel diperlukan sebuah syntax yaitu “head()”. secara default perintah head() akan menampilkan 5 baris teratas. Untuk menampilkan lebih dari 5 baris maka tinggal mengisi jumlah baris yang ingin dilihat didalam kurung head. Untuk diketahui, penomoran index pada python akan selalu dimulai dari angka “0”.

Menghubungkan Python dengan SQL

Didalam python kita juga dapat menghubungkannya dengan SQL agar kita bisa melakukan query didalam program python yang dibuat.

from sqlite3 import connect
conn = connect(':memory:')
df_od.to_sql('order_detail',conn, index=False, if_exists='replace')
df_pd.to_sql('payment_detail', conn, index=False, if_exists='replace')
df_sd.to_sql('sku_detail', conn, index=False, if_exists='replace')
df_cd.to_sql('customer_detail', conn, index=False, if_exists='replace')

Berdasarkan program diatas dapatkita analisis sebagai berikut:

  • from sqlite3 import connect, digunakan untuk mengkoneksikan fungsi SQL dengan Python dari dalam library “sqlite3” yang digunakan.
  • Selanjutnya membuat variabel “conn” dengan isi “connect(‘:memory:’)” untuk memudahkan pemanggilan pada saat mengkoneksikan ke sqlite3 dan file disimpan kedalam memori.
  • Kemudian kita dapat membuat nama baru untuk sql pada dataframe dan mengubah(replace) dataframe df_od, df_pd, df_sd, df_cd kedalam bentuk sql dengan fungsi to_sql tanpa menyimpan index(false).

Jalankan program tersebut agar dapat melanjutkan ke blok program berikutnya.

Menjalankan SQL didalam Python

Setelah SQL terkoneksi dengan python kita dapat melakukan query untuk menggabungkan semua file menjadi satu dataset.

df = pd.read_sql("""
SELECT
order_detail.*,
payment_detail.payment_method,
sku_detail.sku_name,
sku_detail.base_price,
sku_detail.cogs,
sku_detail.category,
customer_detail.registered_date
FROM order_detail
LEFT JOIN payment_detail
on payment_detail.id = order_detail.payment_id
LEFT JOIN sku_detail
on sku_detail.id = order_detail.sku_id
LEFT JOIN customer_detail
on customer_detail.id = order_detail.customer_id
""", conn)

Berdasarkan program diatas dapat kita analisis sebagai berikut:

  • df = pd.read_sql(), membuat sebuah variabel dengan nama “df” yang digunakan untuk membaca query SQL didalam program python.
  • Masukkan query untuk menggabungkan semua tabel dengan fungsi “LEFT JOIN” seperti yang sudah dibahas pada artikel sebelumnya didalam tanda “ “ “.
  • Koneksikan query SQL tersebut ke library “sqlite3” dengan menggunakan variabel “conn”.

Silahkan jalankan program tersebut untuk melakukan penggabungan tabel.

Setelah dilakukan penggabungan kita dapat melihat isi dataframe tersebut dengan memanggil variabel “df”. Disini saya akan menampilkan isi dataframe sebanyak 10 baris.

df.head(10)

Setelah dijalankan, maka kita dapat melihat hasilnya sebagai berikut:

10 baris teratas data yang sudah digabungkan

Mengubah tipe data kolom

Untuk memudahkan dalam melakukan analisis data, kita perlu melihat type data yang digunakan didalam data tersebut. Jika ada yang tidak sesuai kita dapat melakukan perubahan tipe data dikolom yang diinginkan.

df.dtypes

“df.dtypes” digunakan untuk melihat tipe data pada setiap kolom pada variabel df. Berikut adalah hasilnya:

Tipe data dari setiap kolom

Dapat dilihat pada gambar diatas bahwa “before_discount”, “discount_amount”, “after_discount”, dan “base_price” memiliki tipe data “float”. Disini kita akan ubah kolom tersebut menjadi tipe data “int” atau integer untuk menghilangkan bagian desimal dari bilangan pecahan (float) dan hanya mempertahankan bilangan bulat (integer).

Selanjutnya kolom lain yang ingin diubah tipe datanya adalah “order_date” dan “registered_date”. Karena kolom tersebut memiliki isi data berupa tanggal maka kita ubah tipe datanya dari “object” menjadi tipe data “datetime”.

Untuk mengubah tipe data dapat menggunakan fungsi “astype” dari variabel dataframe dan memasukkan nama kolom kedalam dictionary yang ingin diubah tipe datanya. Untuk mengubah tipe data kedalam bentuk datetime dapat menggunakan fungsi “to_datetime”. Kemudian kita tampilkan kembali dataframe dengan perintah “df.dtypes”. Berikut ini adalah syntax lengkapnya:

df = df.astype({"before_discount":'int', "discount_amount":'int', "after_discount":'int',"base_price":'int'})
df['order_date']= pd.to_datetime(df['order_date'])
df['registered_date']= pd.to_datetime(df['registered_date'])
df.dtypes

Ketika program diatas dijalankan, maka akan menghasilkan output sebagai berikut:

Tipe data yang sudah diubah

Dapat dilihat bahwa “before_discount”, “discount_amount”, “after_discount”, “base_price ”sudah memiliki tipe data “integer” dan untuk “order_date” dan “registered_date” sudah memiliki tipe data “datetime”.

Kita telah selesai melakukan pengolahan data untuk memudahkan melakukan analisis dan visualisasi data pada soal yang akan dikerjakan.

Soal 1

Akhir tahun ini, perusahaan akan memberikan hadiah bagi pelanggan yang memenangkan kompetisi Festival Akhir Tahun. Tim Marketing membutuhkan bantuan untuk menentukan perkiraan hadiah yang akan diberikan pada pemenang kompetisi nantinya. Hadiah tersebut akan diambil dari TOP 5 Produk dari Kategori Mobiles & Tablets selama tahun 2022, dengan jumlah kuantitas penjualan (valid = 1) paling tinggi.

Jawab:

data1 = pd.DataFrame(df[(df['is_valid']==1) &\
(df['category']=='Mobiles & Tablets') &\
((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]\
.groupby(by=["sku_name"])["qty_ordered"]\
.sum()\
.sort_values(ascending=False)\
.head(5)\
.reset_index(name='qty_2022'))
data1

Berdasarkan kode program diatas dapat kita analisis sebagai berikut:

  • data1 = pd.DataFrame, digunakan untuk membuat variabel bernama “data1” dan menyimpan data dalam bentuk pandas dataframe.
  • df[(df[‘is_valid’]==1), digunakan untuk memfilter data dengan “valid=1”. Pada kode program diatas digunakan tanda back slash “\” (optional) agar program dapat dipisahkan kebaris dibawahnya sehingga memudahkan untuk membaca program tersebut.
  • (df[‘category’]==’Mobiles & Tablets’), digunakan untuk memfilter data dengan “Category = Mobiles & Tablets”.
  • ((df[‘order_date’] >= ‘2022–01–01’) & (df[‘order_date’] <= ‘2022–12–31’))], digunakan untuk memfilter data pada transaksi selama 2022.
  • Pada filter diatas digunakan logika “AND” (&) yang berarti semua kondisi tersebut harus bernilai “TRUE”
  • .groupby(by=[“sku_name”])[“qty_ordered”], digunakan untuk mengelompokkan data berdasarkan nama produk.
  • .sum(), digunakan untuk menjumlahkan penjualan dari setiap produk.
  • .sort_values(ascending=False), digunakan untuk mengurutkan data berdasarkan nilai kuantitas paling banyak.
  • .head(5), digunakan untuk menampilkan 5 baris teratas atau TOP 5 produk
  • .reset_index(name=’qty_2022')), digunakan untuk mengatur ulang indeks dataframe pada “sku_name” dan memberi nama kolom baru sebagai “qty_2022

Kita telah mendapatkan dataframe pada “data1” yang berisi kondisi 5 produk teratas berdasarkan jumlah penjualan dari kategori Mobiles & Tablets. Setelah kode program dijalankan maka akan menghasilkan output sebagai berikut:

Top 5 produk berdasarkan jumlah penjualan dari kategori Mobiles & Tablets

Jadi, dapat disimpulkan bahwa 5 produk teratas berdasarkan jumlah penjualan dari kategori Mobiles & Tablets berturut-turut adalah IDROID_BALRX7-Gold, IDROID_BALRX7-Jet black, IDROID_BALRX7-Jet black, Mobo_ar1, Infinix Hot 4-Black.

Setelah data tersebut didapatkan, selanjutnya kita dapat melakukan visualisasi dengan menggunakan grafik dengan tipe bar horizontal (bar chart) dengan kode program sebagai berikut:

#Sort data untuk dapat digunakan sebagai grafik
data1.sort_values(by=['qty_2022'],\
ascending=True,\
inplace=True)

#Membuat grafik
data1.plot(x='sku_name',
y=['qty_2022'],
kind='barh',
grid = True,
xlabel = 'Quntity',
ylabel = 'Product Name',
figsize=(12,7),
rot = 0,
title = 'TOP 5 Product')

Berdasarkan kode program tersebut hal pertama yang dilakukan adalah mengurutkan DataFrame pada data1 berdasarkan kolom ‘‘qty_2022’’ secara menaik.

  • Di sini, kita menggunakan metode “sort_values” untuk mengurutkan DataFrame data1 berdasarkan kolom ‘‘qty_2022’’.
  • ascending=True menunjukkan pengurutan secara menaik (dari nilai terkecil ke terbesar).
  • inplace=True mengubah DataFrame data1 secara langsung.

Selanjutnya membuat visualisasi bar horizontal dari DataFrame pada data1 menggunakan fungsi plot dan menambahkan beberapa parameter agar lebih menarik dan memudahkan membaca datanya.

  • x=’sku_name’: Menentukan kolom ‘‘sku_name’’ sebagai sumbu x dalam plot.
  • y=[‘qty_2022’]: Menentukan kolom ‘‘qty_2022’’ sebagai sumbu y dalam plot. Dalam kasus ini, hanya ada satu kolom yang ditampilkan.
  • kind=’barh’: Menggunakan jenis plot bar horizontal.
  • grid=True: Menampilkan garis-garis grid dalam plot.
  • xlabel=’Quantity’: Memberi label pada sumbu x sebagai “Quantity”.
  • ylabel=’Product Name’: Memberi label pada sumbu y sebagai “Product Name”.
  • figsize=(12, 7): Menentukan ukuran gambar plot dengan lebar 12 inch dan tinggi 7 inch.
  • rot=0: Mengatur rotasi label sumbu x menjadi 0 derajat (tidak diputar).
  • title=’TOP 5 Product’: Menentukan judul plot sebagai “TOP 5 Product”.

Ketika program dijalankan maka akan menghasilkan output sebagai berikut:

Top 5 produk berdasarkan jumlah penjualan dari kategori Mobiles & Tablets

Dengan visualisasi diatas kita dapat dengan mudah melihat perbedaan dari jumlah penjualan berdasarkan kategori Mobiles & Tablets.

Soal 2

Menindaklanjuti meeting gabungan Tim Werehouse dan Tim Marketing, kami menemukan bahwa ketersediaan stock produk dengan Kategori Beauty & Grooming pada akhir 2022 kemarin masih banyak.

Kami mohon bantuan untuk melakukan pengecekan data penjualan kategori tersebut dengan tahun 2021 secara kuantitas penjualan. Dugaan sementara kami, telah terjadi penurunan kuantitas penjualan pada 2022 dibandingkan 2021. (Mohon juga menampilkan data ke-15 kategori)

Jawab:

Pada soal ini akan saya bagi menjadi beberapa bagian agar lebih mudah untuk menganalisa data.

Bagian Pertama

Pada bagian ini akan dicari total penjualan dari setiap kategori ditahun 2021.

data2 = pd.DataFrame(df[(df['is_valid']==1) &\
((df['order_date'] >= '2021-01-01') & (df['order_date'] <= '2021-12-31'))]\
.groupby(by=["category"])["qty_ordered"]\
.sum()\
.sort_values(ascending=False)\
.reset_index(name='qty_2021'))
data2

Sama seperti soal sebelumnya, berikut ini adalah penjelasan dari kode program diatas:

  • data2 = pd.DataFrame(), digunakan untuk membuat DataFrame yang disimpan dalam variabel data2.
  • Memilih data dari DataFrame “df” berdasarkan beberapa kondisi. Yang pertama “is_valid” harus bernilai “1” dan data yang diambil berada di tahun 2021.
  • Mengelompokkan data berdasarkan kolom “category” dan menghitung jumlah total “qty_ordered” untuk setiap kelompok.
  • Mengurutkan hasil secara menurun (descending) berdasarkan jumlah “qty_ordered”.
  • Mengatur ulang indeks DataFrame dengan kolom “category” dan memberi nama kolom baru sebagai “qty_2021”.

DataFrame disimpan didalam variabel “data2” kemudian dipanggil untuk menampilkan isi data tersebut, maka kita akan mendapatkan total penjualan 2021 dari setiap kategori. Berikut merupakan hasilnya:

15 kategori dari yang terbesar berdasarkan jumlah penjualan di 2021

Bagian kedua

Pada bagian ini akan dicari total penjualan dari setiap kategori ditahun 2022.

data3 = pd.DataFrame(df[(df['is_valid']==1) &\
((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]\
.groupby(by=["category"])["qty_ordered"]\
.sum()\
.sort_values(ascending=False)\
.reset_index(name='qty_2022'))
data3

Untuk penjelasan kode program diatas hampir sama seperti penjelasan pada bagian pertama. yang berbeda hanyalah DataFrame tersebut disimpan kedalam variabel “data3” dan menampilkan total penjualan ditahun 2022. Berikut adalah hasil program diatas:

15 kategori dari yang terbesar berdasarkan jumlah penjualan di 2022

Bagian ketiga

Setelah mendapatkan hasil total penjualan dari setiap kategori ditahun 2021 dan 2022, maka pada bagian ini kita dapat menggabungkannya dan menganalisa perbedaan jumlah penjualan yang terjadi.

Pertama kita gabungkan terlebih dahulu total penjualan pada tahun 2021 dan 2022.

data4 = data2.merge(data3, left_on = 'category', right_on = 'category')
data4

Disini akan menggunakan fungsi merge dari library pandas untuk menggabungkan “data2” dan “data3”

  • data4 dibuat untuk menyimpan hasil penggabungan “data2” dan “data3” dengan fungsi merge.
  • left_on=’category’ menunjukkan bahwa kolom ‘‘category’’ pada “data2” digunakan sebagai kolom pembanding kiri untuk penggabungan.
  • right_on=’category’ menunjukkan bahwa kolom ‘‘category’’ pada “data3” digunakan sebagai kolom pembanding kanan untuk penggabungan.

Ketika kode program dijalankan maka akan menampilkan hasil sebagai berikut:

Hasil penggabungan dataframe pada data2 dan data3

Bagian keempat

Pada bagian ini kita akan menghitung selisih penjualan yang terjadi ditahun 2022 dengan 2021.

data4['qty_growth']=data4['qty_2022']-data4['qty_2021']
data4.sort_values(by=['qty_growth'],ascending=True,inplace=True)
data4

Disini kita akan mendapatkan selisih penjualan ditahun 2021 dan 2022. Berikut adalah penjelasannya:

  • Menambahkan kolom ‘‘qty_growth’’ ke DataFrame pada “data4”.
  • Kemudian mencari selisih dengan menggunakan operasi pengurangan (-) antara kolom ‘‘qty_2022’’ dan ‘‘qty_2021’’ dari DataFrame “data4” untuk menghitung pertumbuhan kuantitas (growth) antara tahun 2021 dan 2022. Hasilnya disimpan dalam kolom baru bernama ‘‘qty_growth’’.
  • ascending=True menunjukkan pengurutan secara menaik (dari nilai terkecil ke terbesar), dan inplace=True mengubah DataFrame “data4” secara langsung.

Setelah program dijalankan maka akan menghasilkan data sebagai berikut:

15 kategori dengan selisih penjualan ditahun 2022 dengan 2021

Selanjutnya kita dapat melakukan visualisasikan data tersebut dengan kode program seperti dibawah ini:

data4.plot(x='category',
y=['qty_growth'],
kind='bar',
grid=True,
xlabel='Category',
ylabel='Qty Growth',
figsize=(12, 7),
rot=45,
title='Qty Growth by Category')

Untuk penjelasan mengenai program diatas sama seperti pada soal sebelumnya, sehingga kita dapat langsung menjalankan program tersebut dan akan mendapatkan hasil sebagai berikut:

Grafik 15 kategori dengan selisih penjualan ditahun 2022 dengan 2021

Berdasarkan data diatas pada kategori Beauty & Grooming mengalami penurunan penjualan sebesar -3982.

Soal 3

Berdasarkan Soal nomor 2, apabila memang terjadi penurunan kuantitas penjualan pada kategori Beauty & Grooming, kami mohon bantuan untuk menyediakan data TOP 20 nama produk yang mengalami penurunan paling tinggi pada 2022 jika dibanding dengan 2021. Hal ini kami gunakan sebagai bahan diskusi pada meeting selanjutnya.

Jawab:

Pertama, kita akan membuat sebuah DataFrame yang berisikan data penjualan pada kategori Beauty & Grooming berdasarkan nama produk ditahun 2021 dan disimpan kedalam variabel “data5” seperti pada program dibawah ini:

data5 = pd.DataFrame(df[(df['is_valid']==1) &\
(df['category']=='Beauty & Grooming') &\
((df['order_date'] >= '2021-01-01') & (df['order_date'] <= '2021-12-31'))]\
.groupby(by=["sku_name"])["qty_ordered"]\
.sum()\
.sort_values(ascending=False)\
.reset_index(name='qty_bg_2021'))
data5

Mirip seperti penjelasan pada sebelum-sebelumnya, kita hanya menambahkan filter untuk kategori Beauty & Grooming dan dikelompokkan sesuai nama produk serta menambahkan total penjualan di tahun 2021 sehingga kita dapat langsung menjalankan program tersebut.

Jumlah penjualan setiap produk dari kategori Beauty & Grooming ditahun 2021

Kedua, kita akan mencari total penjualan dari setiap produk Beauty & Grooming ditahun 2022 kemudian akan disimpan kedalam DataFrame di variabel “data6”.

data6 = pd.DataFrame(df[(df['is_valid']==1) &\
(df['category']=='Beauty & Grooming') &\
((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]\
.groupby(by=["sku_name"])["qty_ordered"]\
.sum()\
.sort_values(ascending=False)\
.reset_index(name='qty_bg_2022'))
data6

Ketika kita jalankan program tersebut, maka akan menampilkan data sebagai berikut:

Jumlah penjualan setiap produk dari kategori Beauty & Grooming ditahun 2022

Ketiga, kita akan menggabungkan data penjualan ditahun 2021 dan 2022 kedalam DataFrame dengan variabel data7.

data7 = data5.merge(data6, left_on = 'sku_name', right_on = 'sku_name')
data7['qty_bg_growth']=data7['qty_bg_2022']-data7['qty_bg_2021']
data7.sort_values(by=['qty_bg_growth'],ascending=True,inplace=True)
data7 = data7.head(20)
data7

Untuk penjelasan mengenai kode diatas mirip pada soal-soal sebelumnya. Kita dapat langsung menjalankan program tersebut dan akan menampilkan 20 nama produk teratas dengan penurunan terbesar dan dapat sebagai berikut:

20 nama produk teratas dengan penurunan kuantitas penjualan pada kategori Beauty & Grooming

Terakhir, kita dapat membuatkan visualisasi dari data tersebut.

data7.sort_values(\
by=['qty_bg_growth'], \
ascending=False,\
inplace=True)

data7.plot(x='sku_name',
y=['qty_bg_growth'],
kind='barh',
grid=True,
xlabel='Qty Growth',
ylabel='Product Name',
figsize=(12, 7),
rot=0,
title='Qty Growth by Product Name',
xlim=(0, data7['qty_bg_growth'].max() * 13.5))

Pada pembuatan grafik, dapat dilihat untuk kode program diatas. Karena “qty_bg_growth ”bernilai negatif maka kita perlu “xlim” yang digunakan untuk membalik sumbu x dan mengatur rentang sumbu x berdasarkan nilai “qty_bg_growth” dari kiri kekanan. Faktor “13.5” digunakan untuk memberikan sedikit ruang ekstra agar batang terlihat dengan baik. Batas kiri sumbu x tetap diatur pada nilai 0.

Untuk lebih jelasnya dapat dilihat pada grafik berikut:

Grafik 20 nama produk teratas dengan penurunan kuantitas penjualan pada kategori Beauty & Grooming

Demikianlah hasil dari Top 20 nama produk yang mengalami penurunan paling tinggi pada 2022 jika dibanding dengan 2021.

Soal 4

Terkait ulang tahun perusahaan pada 2 bulan mendatang, Tim Digital Marketing akan memberikan informasi promo bagi pelanggan pada akhir bulan ini. Kriteria pelanggan yang akan kami butuhkan adalah mereka yang sudah melakukan check-out namun belum melakukan pembayaran (is_gross = 1) selama tahun 2022. Data yang kami butuhkan adalah ID Customer dan Registered Date.

Jawab:

Pertama, kita akan menyiapkan DataFrame untuk menyaring data pelanggan yang sudah melakukan check-out namun belum melakukan pembayaran selama tahun 2022 dan akan disimpan kedalam variabel data8.

data8 = df[(df['is_gross']==1) &\
(df['is_valid']==0) &\
(df['is_net']==0) &\
((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]

Jalankan program diatas untuk disimpan dan kedalam Dataframedata8”.

Kedua, buat sebuah kolom yang akan berisi “ID Customer” dan “Registered Date” dari data8 dan simpan kedalam DataFrame dengan variabel “data9” dengan kode program sebagai berikut:

data9 = data8[['customer_id','registered_date']]
data9

Berikut adalah hasil dari program diatas.

Pelanggan yang sudah melakukan check-out namun belum melakukan pembayaran selama tahun 2022

Karena jumlah baris yang dapat ditampilkan di Google Colab terbatas, maka kita tidak bisa melihat semua Pelanggan yang sudah melakukan check-out namun belum melakukan pembayaran selama tahun 2022.

Untuk dapat melihat pelanggan tersebut dapat dilakukan dengan membuat file csv dari DataFame data9 agar bisa dibuka dilokal dengan cara sebagai berikut:

from google.colab import files
data9.to_csv('audience_list.csv', encoding = 'utf-8-sig',index=False)
files.download('audience_list.csv')

Jika program tersebut dijalankan, maka akan otomatis mendownload data tersebut dalam format .csv dan dapat dibuka melalui Ms. Excel atau Spreadheet.

DataFrame pada data9 yang didownload kedalam file .csv

Soal 5

Bulan depan kami akan membuat Laporan Tahunan yang akan kami sampaikan ke Investor, terkait hal tersebut mohon sediakan data dengan Profit Growth (%) secara keseluruhan tahun 2021 vs 2022 sebagai hasil kinerja tahunan penjualan.

Jawab:

Pertama, kita akan menghitung profit dapat menggunakan rumus:
profit = after_discount-cogs.

kemudian mari kita masukan kedalam kolom di DataFrame “df”.

df['profit'] = df['after_discount'] - df['cogs']

Kedua, mari kita membuat variabel “data10” yang digunakan untuk menyimpan DataFrame yang memiliki “is_valid = 1” dan berada ditahun 2022.

data10 = df[(df['is_valid']==1) &\
((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]

Ketiga, mari kita buat hal serupa untuk tahun 2021 dan disimpan kedalam variabel “data11”.

data11 = df[(df['is_valid']==1) &\
((df['order_date'] >= '2021-01-01') & (df['order_date'] <= '2021-12-31'))]

Keempat, kita dapat membuat ringkasan profit dengan program berikut:

data12 = {\
'Periode Profit':'Total',\
'2021': data11['profit'].sum(), \
'2022': data10['profit'].sum(),\
'Growth (Value)': data10['profit'].sum() - data11['profit'].sum(),\
'Growth': pd.Series(round(((data10['profit'].sum() - data11['profit'].sum())/data11['profit'].sum())*100,2), dtype=str)+'%'
}
pd.DataFrame(data=data12, index=[0])

Berdasarkan program diatas, maka akan membuat DataFrame baru dengan nama “data12” yang berisi ringkasan data profit. DataFrame ini terdiri dari satu baris dengan kolom-kolom sebagai berikut:

  • Periode Profit: Kolom yang menunjukkan periode profit dengan value “Total”.
  • 2021, yaitu kolom yang menunjukkan total profit pada tahun 2021. Nilainya diambil dari hasil penjumlahan kolom ‘‘profit’’ pada DataFrame “data11”.
  • 2022, yaitu kolom yang menunjukkan total profit pada tahun 2022. Nilainya diambil dari hasil penjumlahan kolom ‘‘profit’’ pada DataFrame “data10”.
  • Growth (Value), yaitu kolom yang menunjukkan pertumbuhan profit (dalam nilai) antara tahun 2022 dan 2021. Nilainya dihitung dengan mengurangi total profit tahun 2021 dari total profit tahun 2022.
  • Growth, yaitu kolom yang menunjukkan pertumbuhan profit (dalam persentase) antara tahun 2022 dan 2021. Nilainya dihitung dengan menggunakan rumus (profit tahun 2022 — profit tahun 2021) / profit tahun 2021 * 100 dan dibulatkan menjadi 2 angka desimal.
  • Menggunakan pd.DataFrame() untuk membuat DataFrame baru dengan menggunakan dictionary tersebut sebagai data dan mengatur index=[0]

Berikut merupakan hasil dari program yang telah dijalankan:

Profit Growth (%) secara keseluruhan tahun 2021 vs 2022

Jadi, dapat disimpulkan bahwa Profit Growth (%) secara keseluruhan tahun 2021 vs 2022 yaitu 69,27%

Soal 6

Berdasarkan Soal nomor 5, mohon sediakan data dengan Profit Growth (%) berdasarkan Kategori produk tahun 2021 vs 2022.

Jawab:

Pertama, membuat DataFrame baru dengan nama variabel “data13” yang berisi ringkasan data profit pada tahun 2022 berdasarkan kategori produk. DataFrame ini memuat hasil pengelompokan dan penjumlahan profit berdasarkan kolom ‘‘category’’ pada DataFrame data10”.

data13 = pd.DataFrame(data10\
.groupby(by="category")["profit"].sum()\
.sort_values(ascending=False)\
.reset_index(name='profit_2022'))
data13

Berikut merupakan hasil dari program tersebut:

Jumlah profit dari setiap kategori ditahun 2022

Kedua, lakukan hal yang sama untuk membuat DataFrame baru dengan nama variabel “data14” agar pendapatkan profit dari setiap kategori ditahun 2021.

data14 = pd.DataFrame(data11\
.groupby(by="category")["profit"].sum()\
.sort_values(ascending=False)\
.reset_index(name='profit_2021'))
data14

Berikut merupakan hasil dari program tersebut:

Jumlah profit dari setiap kategori ditahun 2021

Ketiga, kita akan menggabungkan data profit ditahun 2021 dan 2022 dengan menggunakan fungsi “merge” dari library pandas dan dimasukkan kedalam DataFrame dengan nama variable “data15”.

data15 = data14.merge(data13, left_on = 'category', right_on = 'category')
data15

Berikut merupakan hasil dari program tersebut:

Jumlah profit dari setiap kategori ditahun 2021 dan 2022

Keempat, melakukan kalkulasi dan pengurutan pada DataFrame “data15” dengan program sebagai berikut:

data15['Growth (Value)'] = data15['profit_2022']-data15['profit_2021']
data15['Growth (%)'] = round(data15['Growth (Value)']/data15['profit_2021']*100,2)
data15.sort_values(by=['Growth (%)'], ascending = False, inplace = True)
data15

Berdasarkan kode tersebut akan dibuat sebuah kolom dengan penjelasan sebagai berikut:

  • Membuat kolom baru dengan nama ‘‘Growth (Value)’’ pada DataFrame “data15”. Nilainya dihitung sebagai selisih antara kolom ‘‘profit_2022’’ dan kolom ‘‘profit_2021’
  • Membuat kolom baru dengan nama ‘‘Growth (%)’’ pada DataFrame “data15”. Nilainya dihitung sebagai persentase pertumbuhan, yaitu kolom ‘‘Growth (Value)’’ dibagi oleh kolom ‘‘profit_2021’’, kemudian dikalikan dengan 100. Nilai persentase tersebut dibulatkan menjadi 2 angka desimal menggunakan fungsi “round()”.
  • Mengurutkan DataFrame “data15” berdasarkan kolom ‘‘Growth (%)’’ secara menurun (dari yang terbesar ke yang terkecil). Argumen “ascending=False” digunakan untuk mengurutkan secara menurun, dan “inplace=True” digunakan untuk menerapkan perubahan pada DataFrame data15”.

DataFrame pada “data15” akan berisi hasil perhitungan pertumbuhan profit (dalam nilai dan persentase) antara tahun 2022 dan 2021, yang diurutkan berdasarkan pertumbuhan persentase secara menurun.

Profit Growth (%) berdasarkan Kategori produk tahun 2021 vs 2022

Setelah data Profit Growth (%) berdasarkan Kategori produk tahun 2021 vs 2022 didapatkan, selanjutnya kita dapat melakukan visualisasi menggunakan plot.

data15.plot(x='category',
y=['Growth (%)'],
kind='bar',
grid = True,
title = 'Growth 2021 vs 2022',
xlabel = 'Category',
ylabel = 'Growth (%)',
figsize=(12,7),
rot = 90)

Berikut merupakan hasil visualisasi dari program diatas:

Profit Growth (%) berdasarkan Kategori produk tahun 2021 vs 2022

Demikianlah didapatkan hasil Profit Growth (%) berdasarkan Kategori produk tahun 2021 vs 2022.

Soal 7

Pada bulan Oktober hingga Desember 2022, kami melakukan campaign setiap hari Sabtu dan Minggu. Kami hendak menilai, apakah campaign tersebut cukup berdampak pada kenaikan penjualan (before_discount).
Mohon bantuan untuk menampilkan data dengan rata-rata harian penjualan
weekends (Sabtu dan Minggu) vs rata-rata harian penjualan weekdays (Senin-Jumat) per bulan tersebut. Apakah ada peningkatan penjualan pada masing-masing bulan tersebut.

Jawab:

Pertama, kita akan membuat kolom dengan ketentuan seperti diprogram berikut:

df['day']=df['order_date'].dt.day_name()
df['month']=df['order_date'].dt.month_name()
df['month_num']=df['order_date'].dt.month
df.head(5)

Berdasarkan program tersebut dapat dijelaskan bahwa:

  • df[‘day’] = df[‘order_date’].dt.day_name(), digunakan untuk membuat kolom baru dengan nama ‘‘day’’ pada DataFrame “df”. Nilainya diisi dengan nama hari dari tanggal yang terdapat dalam kolom ‘‘order_date’’. Metode “dt.day_name()” digunakan untuk mengambil nama hari dari objek datetime dalam kolom ‘‘order_date’’.
  • df[‘month’] = df[‘order_date’].dt.month_name(), digunakan untuk membuat kolom baru dengan nama ‘‘month’’ pada DataFrame ‘‘df’’. Nilainya diisi dengan nama bulan dari tanggal yang terdapat dalam kolom ‘‘order_date’’. Metode “dt.month_name()” digunakan untuk mengambil nama bulan dari objek datetime dalam kolom ‘order_date’.
  • df[‘month_num’] = df[‘order_date’].dt.month, digunakan untuk membuat kolom baru dengan nama ‘‘month_num’’ pada DataFrame “df”. Nilainya diisi dengan angka bulan dari tanggal yang terdapat dalam kolom ‘‘order_date’’. Metode “dt.month” digunakan untuk mengambil angka bulan dari objek datetime dalam kolom ‘‘order_date’’.
  • Data akan ditampilkan sebanyak 5 baris pertama dari DataFrame “df” menggunakan metode “head(5)”.

Berikut adalah hasil dari program diatas:

5 baris teratas yang telah ditambah kolom day, month, month_num

Kedua, kita akan membuat variabel baru dengan nama “data16” dan melakukan beberapa filter.

data16 = pd.DataFrame(df[(df['is_valid']==1) \
& (df['day'].isin(['Saturday','Sunday']))\
& (df['order_date'] >= '2022-10-01') & (df['order_date'] <= '2022-12-31')]\
.groupby(by=["month_num","month"])["before_discount"].mean()\
.round()\
.sort_values(ascending=False)\
.reset_index(name='avg_profit_weekend'))
data16

Berdasarkan program tersebut dapat dijelaskan bahwa:

  • [‘is_valid’] == 1, digunakan untuk memilih hanya data dengan nilai kolom ‘‘is_valid’’ sama dengan “1” (valid).
  • df[‘day’].isin([‘Saturday’,’Sunday’]), digunakan untuk memilih hanya data dengan nilai kolom ‘‘day’’ yang merupakan hari Sabtu atau Minggu.
  • df[‘order_date’] >= ‘2022–10–01’ dan df[‘order_date’] <= ‘2022–12–31’, digunakan untuk memilih hanya data dengan tanggal pemesanan dibulan Oktober sampai Desember ditahun 2022.
  • Mengelompokkan data yang telah difilter berdasarkan kolom “month_num” dan “month”.
  • Menghitung rata-rata nilai kolom “before_discount” pada setiap kelompok dan dibulatkan dengan metode “round()”.
  • Mengurutkan hasil pengelompokan berdasarkan nilai rata-rata secara menurun.
  • Mengatur ulang indeks dan memberi nama kolom hasilnya menjadi ‘‘avg_profit_weekend’’.

Ketika program dijalankan maka akan menampilkan isi DataFrame “data16” seperti dibawah ini:

Rata-rata profit saat weekend yang diurutkan dari terbesar pada bulan Oktober sampai Desember

Ketiga, kita akan menghitung untuk rata-rata pada weekdays seperti sebelumnya dan akan disimpan dalam variable “data17”.

data17 = pd.DataFrame(df[(df['is_valid']==1) \
& (df['day'].isin(['Monday','Tuesday','Wednesday','Thusday','Friday']))\
& (df['order_date'] >= '2022-10-01') & (df['order_date'] <= '2022-12-31')]\
.groupby(by=["month_num","month"])["before_discount"]\
.mean().round()\
.sort_values(ascending=False)\
.reset_index(name='avg_profit_weekdays'))
data17

Berikut merupakan hasil keluaran dari program tersebut:

Rata-rata profit saat weekend yang diurutkan dari terbesar pada bulan Oktober sampai Desember

Keempat, kita akan menggabungkan kedua data tersebut menggunakan fungsi “merge”.

data18 = data16.merge(data17, left_on = 'month', right_on = 'month')
data18.sort_values(by='month_num_x',ascending=True, inplace=True)
data18 = data18[["month","avg_profit_weekend","avg_profit_weekdays"]]
data18

Sama seperti soal sebelumnya mengenai penjelasan merge, maka dari itu kita akan langsung menjalankan program tersebut dan akan mendapatkan hasil sebagai berikut:

Rata-rata profit saat weekend dan weekdays pada bulan Oktober sampai Desember

Kelima kita akan melakukan visualisasi berdasarkan DataFrame tersebut.

data18.plot(x='month',
y=['avg_profit_weekend','avg_profit_weekdays'],
kind='bar',
grid = True,
xlabel = 'Category',
ylabel = 'Total',
figsize=(12,7))

Berikut adalah hasil visualisasinya:

Graafik Rata-rata profit saat weekend dan weekdays pada bulan Oktober sampai Desember

Demikian didapatkannya rata-rata profit saat weekend dan weekdays pada bulan Oktober sampai Desember. Maka dapat disimpulkan bahwa campaign tersebut cukup berdampak pada kenaikan penjualan.

Soal 8

Mohon bantuan untuk menampilkan data dengan rata-rata harian penjualan weekends (Sabtu dan Minggu) vs rata-rata harian penjualan weekdays (Senin-Jumat) keseluruhan 3 bulan tersebut.

Jawab:

Seperti soal sebelumnya, kita akan langsung membuat variabel dengan nama “data19” dan melakukan filter untuk weekend.

data19 = df[(df['is_valid']==1) &\
(df['day'].isin(['Saturday','Sunday'])) &\
((df['order_date'] >= '2022-10-01') & (df['order_date'] <= '2022-12-31'))]

Selanjutnya, kita akan melakukan hal yang sama untuk weekdays dan disimpan pada variabel “data20”.

data20 = df[(df['is_valid']==1) &\
(df['day'].isin(['Monday','Tuesday','Wednesday','Thusday','Friday'])) &\
((df['order_date'] >= '2022-10-01') & (df['order_date'] <= '2022-12-31'))]

Setelah dilakukan filter, sekarang kita akan mencari informasi statistik penjualan selama 3 bulan mulai dari rata-rata penjualan pada weekend, rata-rata penjualan pada weekdays, selisih nilai penjualan weekend dan weekdays, serta selisih persentase penjualan antara weekend dan weekdays.

data21 = {\
'Periode':'Total 3 months',\
'Avg Weekend Sales': round(data19['before_discount'].mean(),2), \
'Avg Weekdays Sales': round(data20['before_discount'].mean(),2),\
'Diff (Value)': round(data19['profit'].mean() - data20['profit'].mean(),2),\
'Diff (%)': pd.Series(round(((data19['profit'].mean() - data20['profit'].mean())/data19['profit'].mean())*100,2), dtype=str)+'%'
}
pd.DataFrame(data=data21, index=[0])

Berdasarkan program tersebut, maka didapatkan hasil sebagai berikut:

rata-rata harian penjualan weekends vs rata-rata harian penjualan weekdays keseluruhan 3 bulan tersebut

Jadi, dapat disimpulkan bahwa pendapatan saat weekend lebih kecil sebesar 2,26% dibandingkan pendapatan saat weekdays.

Soal 9

Guna mengetahui kemampuan beli pelanggan, kami membutuhkan data dengan AOV (Average Order Value atau Total sales / Total Order) tiap bulan selama tahun 2021 vs 2022.

Jawab:

Pertama, kita akan membuat sebuah DataFrame yang disimpan kedalam variabel baru yang bernama “data22” yang akan berisi total penjualan selama 12 bulan pada tahun 2022.

data22 = pd.DataFrame(df[(df['is_valid']==1) & ((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]\
.groupby(by=['month_num','month'])["before_discount"].sum()\
.round()\
.reset_index(name='sales_2022'))\
.sort_values(by=['month_num'],ascending=True)\
.head(12)
data22

Sehingga didapatkan hasil sebagai berikut:

Total penjualan setiap bulan ditahun 2022

Kedua, kita akan membuat sebuah DataFrame yang disimpan kedalam variabel baru yang bernama “data23” yang akan berisi jumlah pesanan selama 12 bulan pada tahun 2022.

data23 = pd.DataFrame(df[(df['is_valid']==1) & ((df['order_date'] >= '2022-01-01') & (df['order_date'] <= '2022-12-31'))]\
.groupby(by=['month_num','month'])["id"].nunique()\
.round()\
.reset_index(name='order_2022'))\
.sort_values(by=['month_num'],ascending=True)\
.head(12)
data23

Sehingga didapatkan hasil sebagai berikut:

Jumlah pesanan setiap bulan ditahun 2022

Berdasarkan kedua data tersebut, kita mendapatkan total penjualan dan jumlah pesanan ditahun 2022.

Keempat, kita akan membuat sebuah DataFrame yang disimpan kedalam variabel baru yang bernama “data24” yang akan berisi total pesanan selama 12 bulan pada tahun 2021.

data24 = pd.DataFrame(df[(df['is_valid']==1) & ((df['order_date'] >= '2021-01-01') & (df['order_date'] <= '2021-12-31'))]\
.groupby(by=['month_num','month'])["before_discount"].sum()\
.round()\
.reset_index(name='sales_2021'))\
.sort_values(by=['month_num'],ascending=True)\
.head(12)
data24

Sehingga didapatkan hasil sebagai berikut:

Jumlah penjualan setiap bulan ditahun 2022

Kelima, kita akan membuat sebuah DataFrame yang disimpan kedalam variabel baru yang bernama “data25” yang akan berisi jumlah pesanan selama 12 bulan pada tahun 2021.

data25 = pd.DataFrame(df[(df['is_valid']==1) & ((df['order_date'] >= '2021-01-01') & (df['order_date'] <= '2021-12-31'))]\
.groupby(by=['month_num','month'])["id"].nunique()\
.round()\
.reset_index(name='order_2021'))\
.sort_values(by=['month_num'],ascending=True)\
.head(12)
data25

Sehingga didapatkan hasil sebagai berikut:

Jumlah pesanan setiap bulan ditahun 2022

Demikian kita mendapatkan data dari total penjualan dan jumlah pesanan yang terjadi pada tahun 2021. Semua DataFrame pada tahun 2022 dan tahun 2021 akan digabungkan untuk didapatkan nilai “AOV”.

Keenam, kita akan menggabungkan keempat data tersebut menjadi satu DataFrame dan akan disimpan divariabel baru yang bernama “data26”. Pada penggabungkan ini, akan memanfaatkan query SQL untuk menggabungkan kolom yang ada.

Kita akan mengubungkan masing masing data ke library sqlite3” agar dapat melakukan query.

from sqlite3 import connect
conn = connect(':memory:')
data22.to_sql('sales_2022', conn, index=False, if_exists='replace')
data23.to_sql('order_2022', conn, index=False, if_exists='replace')
data24.to_sql('sales_2021', conn, index=False, if_exists='replace')
data25.to_sql('order_2021', conn, index=False, if_exists='replace')

Selanjutnya, kita dapat melakukan query untuk menggabungkan keempat tabel tersebut menggunakan fungsi “LEFT JOIN”.

data26 = pd.read_sql("""
SELECT
sales_2021.*,
order_2021.order_2021,
sales_2022.sales_2022,
order_2022.order_2022
FROM sales_2022
LEFT JOIN order_2022
on order_2022.month_num = sales_2022.month_num
LEFT JOIN sales_2021
on sales_2021.month_num = sales_2022.month_num
LEFT JOIN order_2021
on order_2021.month_num = sales_2022.month_num
""", conn)
data26

Sehingga didapatkan hasil:

Hasil penggabungan total penjualan dan pesanan pada tahun 2022 dan 2021

Jika sudah, kita akan melanjutkan kelangkah ketujuh.

Ketujuh, dari data jumlah penjualan dan pesanan pada tahun 2022 dan 2021 yang sudah digabungkan akan dicari nilai AOV dari setiap bulan pada tahun 2022 dan 2021 sekaligus perbedaan tahun 2021 dan 2022 dengan kode program sebagai berikut:

data26['AOV 2021'] = round(data26['sales_2021']/data26['order_2021'],2)
data26['AOV 2022'] = round(data26['sales_2022']/data26['order_2022'],2)
data26['Diff AOV (value)']= data26['AOV 2022']-data26['AOV 2021']
data26['Diff AOV (%)'] = round((data26['AOV 2022']-data26['AOV 2021'])/data26['AOV 2021']*100,2)
data26

Berdasarkan kode program diatas dapat dijelaskan sebagai berikut:

  • Membuat kolom baru ‘‘AOV 2021’’ dengan nilai rata-rata penjualan per pesanan pada tahun 2021. Kalkulasinya adalah “sales_2021” (total penjualan tahun 2021) dibagi dengan “order_2021”(jumlah pesanan tahun 2021). Hasilnya dibulatkan menjadi 2 angka desimal menggunakan fungsi “round()”.
  • Membuat kolom baru ‘‘AOV 2022’’ dengan nilai rata-rata penjualan per pesanan pada tahun 2022.
  • Membuat kolom baru ‘‘Diff AOV (value)’’ yang mengindikasikan perbedaan nilai AOV antara tahun 2022 dan tahun 2021. Kalkulasinya adalah selisih antara ‘‘AOV 2022’’ dan ‘‘AOV 2021’’.
  • Membuat kolom baru ‘‘Diff AOV (%)’’ yang mengindikasikan perbedaan persentase AOV antara tahun 2022 dan tahun 2021. Kalkulasinya adalah selisih antara ‘‘AOV 2022’’ dan ‘‘AOV 2021’’, kemudian dibagi dengan ‘‘AOV 2021’’ dan dikalikan dengan 100.
AOV (Average Order Value) tiap bulan selama tahun 2021 vs 2022.

Setelah data yang diinginkan didapatkan, terakhir kita dapat membuat visualisasi terkait data tersebut.

data26.plot(x='month',
y=['AOV 2021','AOV 2022'],
kind='bar',
grid = True,
xlabel = 'Month',
ylabel = 'AOV',
figsize=(12,7),
rot = 90,
table = False,
secondary_y = False)

Ketika dijalankan, maka akan mendapatkan hasil sebagai berikut:

Grafik AOV (Average Order Value) tiap bulan selama tahun 2021 vs 2022.

Demikianlah AOV (Average Order Value) tiap bulan selama tahun 2021 vs 2022.

Soal 10

Berdasarkan soal nomor 9, berikan data perbedaan untuk AOV tahun 2021 vs 2022.

Jawab:

Kita telah mendapatkan data AOV dari setiap bulan ditahun 2021 dan 2022 pada soal nomor 9. Berdasarkan data tersebut kita dapat menghitung pertumbuhan berdasarkan jumlah AOV 2021 dan 2022.

aov_2021 = round(data26['sales_2021'].sum()/data26['order_2021'].sum(),2)
aov_2022 = round(data26['sales_2022'].sum()/data26['order_2022'].sum(),2)
data27 = {\
'Periode':'Total',\
'AOV 2021': aov_2021, \
'AOV 2022': aov_2022, \
'Growth (value)': aov_2022-aov_2021,\
'Growth': pd.Series(round((aov_2022-aov_2021)/aov_2021*100,2), dtype=str)+'%'
}
pd.DataFrame(data=data27, index=[0])

Berdasarkan kode diatas, dapat dijelaskan bahwa:

  • aov_2021 untuk menyimpan total nilai AOV ditahun 2021. Kalkulasinya adalah total penjualan tahun 2021 (“sales_2021” dijumlahkan) dibagi dengan total jumlah pesanan tahun 2021 (“order_2021”dijumlahkan). Hasilnya dibulatkan menjadi 2 angka desimal menggunakan fungsi “round()”.
  • aov_2022 untuk menyimpan total nilai AOV ditahun 2022.
  • Membuat DataFrame “data27” dengan kolom ‘‘Periode’’ yang berisi tulisan ‘‘Total’’, ‘‘AOV 2021’’ untuk nilai aov_2021, ‘‘AOV 2022’’ untuk nilai aov_2022, ‘‘Growth (value)’’ untuk nilai perbedaan AOV antara tahun 2022 dan tahun 2021 (aov_2022 — aov_2021), dan kolom ‘‘Growth’’ untuk nilai perbedaan persentase AOV ditahun 2022 dan tahun 2021. Kemudian dikonversi ke tipe data string menggunakan “pd.Series()”.
  • Data tersebut akan dimasukkan kedalam DataFrame pada variabel “data27”.

Berikut adalah hasil dari program tersebut:

Perbedaan untuk AOV tahun 2021 vs 2022

Jadi, dapat disimpulkan bahwa selama tahun 2021 mendapatkan AOV sebesar 277568,15 dan pada tahun 2022 sebesar 347186,56 dengan perbedaan 69618,41 atau 25,08%.

Berdasarkan studi kasus yang telah dikerjakan diatas, maka sampailah dipenghujung artikel mengenai Analisis Dan Visualisasi Data Menggunakan Python. Untuk melihat studi kasus diatas, diakses melalui link Google Colab disini. Berdasarkan penggunaannya, kita dapat langsung melakukan visualisasi menggunakan bahasa pemrograman python dari data hasil yang didapat.

Untuk artikel menarik lainnya mengenai Data Analisis dan juga lanjutan Final Projek yang saya kerjakan pada Bootcamp Data Analysis MySkill, dapat dilihat pada link dibawah ini:

Referensi:

  1. Python.org. What is Python?; https://www.python.org/doc/essays/blurb/
  2. Coursera.org. What Is Python Used For? A Beginner’s Guide; https://www.coursera.org/articles/what-is-python-used-for-a-beginners-guide-to-using-python

--

--