Project Eksplorasi Data Ritel QPedia menggunakan R

I. INTRODUCTION

Pada project kali ini sahabat Whitecyber, kali ini Whitecyber Team sedang mengerjakan Project untuk menganalisa Data dari Perusahaan Retail menggunakan bahasa pemprograman R Language. Yuk simak dan urutkan bagaimana tahapan dan proses demi prosesnya.

Qpedia merupakan salah satu perusahaan e-commerce yang ada pada DQ Universe. Saat ini, Qpedia sedang gencar untuk memperbanyak mitra berupa warung-warung kecil di berbagai daerah terpencil untuk memperluas jangkauan bisnis. Qpedia akan membantu mitra Qpedia melalui strategi untuk meningkatkan pendapatan mitra dan melakukan analisis untuk menjamin ketersediaan stok barang disetiap mitra.

Dalam rangka membantu Mitra ini, Qpedia perlu melakukan evaluasi dan analisis terhadap data penjualan dari masing-masing mitra. Dikarenakan data penjualan mitra ini cukup besar, Kroma selaku pimpinan dari QPedia, meminta bantuan Whitecyber Team untuk melakukan analisis data. 

Kita buat kisahnya dulu ya … seperti ini Sahabatku …

Namaku Faris dan saat ini saya sebagai Owner Whitecyber, saya meminta seorang data analyst di Whitecyber Team untuk membantu Roma yang sedang bingung. Melihat Roma yang sedang mengalami kesulitan, Saya dan Whitecyber Team akan siap membantunya. 

Hari ini ketika aku baru saja duduk ke meja kerjaku, Dedi langsung menghampiri aku dan menjelaskan terkait program analisa yang akan dilakukannya. 

“Halo Pak, kamu sudah tahu kan kalau kita akan evaluasi untuk mitra Qpedia dibulan ini?” ucap Dedi padaku. 

“Hi Ded .. , yaaap. Aku sudah tahu tentang program ini” balasku, dengan agak sedikit terkejut melihat kedatangan Dedi. 

“Baiklah, sepertinya kita akan membutuhkan bantuan untuk analisis data penjualan mitra ya. Untuk saat ini, kita akan melakukan evaluasi untuk Mitra Toserba Xera terlebih dahulu. Aku sudah mengirimkan data penjualan mereka lewat email. Mohon bantuannya ya, Pak Faris!” ucap Dedi sambil menepuk pundakku.

“Baik Ded, siap!” aku menjawabnya dengan penuh semangat. Sepertinya ini akan menjadi suatu analisa yang sangat menarik, bila kita ulas dan kita bahas disini ….

.

BERKENALAN DENGAN DATA RETAIL

Import dan Eksplorasi Awal Data

Segera setelah aku mendapatkan file berisi data dari Kroma, aku langsung mengecek file tersebut dan mendapati bahwa data yang akan digunakan berformat TSV (Tab Separated Value). Untuk project kali ini, aku memutuskan untuk menggunakan bahasa pemrograman R.

Sebelum melakukan analisa lebih lanjut, hal pertama yang harus aku lakukan tentu saja melakukan load data ke dalam workspace dan memperoleh gambaran besar dari data yang akan diolah.

Instruksi :

  1. Load dataset ke dalam workspace dengan menggunakan function read.csv() dan simpan ke dalam variable bernama data
  2. Tampilkan 5 data teratas dengan menggunakan function head()
  3. Tampilkan 5 data terbawah dengan menggunakan function tail()
  4. Tampilkan informasi mengenai struktur data dengan menggunakan function str()

Code

#Load data dan simpan ke dalam variable bernama ‘data’
data <- read.csv("https://storage.googleapis.com/dqlab-dataset/transaksi_stok_dan_penjualan.tsv", header = TRUE, sep = "\t")

#Tampilkan 5 data teratas
head(data, 5)

#Tampilkan 5 data terbawah
tail(data, 5)

#Tampilkan informasi mengenai struktur dari data
str(data)

.

Result

> #Load data dan simpan ke dalam variable bernama ‘data’
> data <- read.csv("https://storage.googleapis.com/dqlab-dataset/transaksi_stok_dan_penjualan.tsv", header = TRUE, sep = "\t")

> #Tampilkan 5 data teratas
> head(data, 5)
  No.Transaksi Jenis.Transaksi    Tanggal Nama.Pelanggan Kode.Produk
1            1      Stok Masuk 01-04-2020              -     Item-01
2            1      Stok Masuk 01-04-2020              -     Item-02
3            1      Stok Masuk 01-04-2020              -     Item-03
4            1      Stok Masuk 01-04-2020              -     Item-04
5            1      Stok Masuk 01-04-2020              -     Item-05
            Nama.Produk Jumlah Harga
1             Batere AA     44     -
2 Bawang Putih 200 gram     26     -
3 Gula Pasir Putih 1 kg     50     -
4          Kopi Instant     27     -
5     Mi Goreng Instant    100     -

> #Tampilkan 5 data terbawah
> tail(data, 5)
     No.Transaksi Jenis.Transaksi    Tanggal Nama.Pelanggan Kode.Produk
1838          589      Stok Masuk 30-07-2020              -     Item-18
1839          590      Stok Masuk 31-07-2020              -     Item-02
1840          590      Stok Masuk 31-07-2020              -     Item-03
1841          590      Stok Masuk 31-07-2020              -     Item-07
1842          590      Stok Masuk 31-07-2020              -     Item-09
               Nama.Produk Jumlah Harga
1838     Telur Ayam Negeri     79     -
1839 Bawang Putih 200 gram     26     -
1840 Gula Pasir Putih 1 kg     50     -
1841     Sabut Cuci Piring      6     -
1842            Roti Tawar     15     -

> #Tampilkan informasi mengenai struktur dari data
> str(data)
'data.frame':	1842 obs. of  8 variables:
 $ No.Transaksi   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ Jenis.Transaksi: chr  "Stok Masuk" "Stok Masuk" "Stok Masuk" "Stok Masuk" ...
 $ Tanggal        : chr  "01-04-2020" "01-04-2020" "01-04-2020" "01-04-2020" ...
 $ Nama.Pelanggan : chr  "-" "-" "-" "-" ...
 $ Kode.Produk    : chr  "Item-01" "Item-02" "Item-03" "Item-04" ...
 $ Nama.Produk    : chr  "Batere AA" "Bawang Putih 200 gram" "Gula Pasir Putih 1 kg" "Kopi Instant" ...
 $ Jumlah         : int  44 26 50 27 100 56 6 25 15 67 ...
 $ Harga          : chr  "-" "-" "-" "-" ...

.

Mengubah Tipe Data Tanggal

Aku melihat bahwa tipe data dari variabel Tanggal adalah character dan langsung menyadari bahwa untuk keperluan analisis selanjutnya akan lebih mudah apabila variable Tanggal tersebut memiliki tipe data date. Oleh karena itu, tugas selanjutnya yang akan Aksara lakukan adalah mengubah tipe data dari variabel Tanggal menjadi date dan menambahkan satu variabel bernama Bulan_Tahun untuk menyimpan data bulan dan tahun.

Code

#Ubah tipe data variabel Tanggal menjadi date
data$Tanggal <- as.Date(data$Tanggal, "%d-%m-%Y")

#Cek apakah tipe data dari variabel Tanggal sudah menjadi date
str(data$Tanggal)

#Tambahkan kolom baru untuk menyimpan data bulan dan tahun
data$Bulan_Tahun <- format(data$Tanggal, "%m-%Y")

#Tampilkan 5 data teratas
head(data, 5)

.

Result

> #Ubah tipe data variabel Tanggal menjadi date
> data$Tanggal <- as.Date(data$Tanggal, "%d-%m-%Y")

> #Cek apakah tipe data dari variabel Tanggal sudah menjadi date
> str(data$Tanggal)
 Date[1:1842], format: "2020-04-01" "2020-04-01" "2020-04-01" "2020-04-01" "2020-04-01" ...

> #Tambahkan kolom baru untuk menyimpan data bulan dan tahun
> data$Bulan_Tahun <- format(data$Tanggal, "%m-%Y")

> #Tampilkan 5 data teratas
> head(data, 5)
  No.Transaksi Jenis.Transaksi    Tanggal Nama.Pelanggan Kode.Produk
1            1      Stok Masuk 2020-04-01              -     Item-01
2            1      Stok Masuk 2020-04-01              -     Item-02
3            1      Stok Masuk 2020-04-01              -     Item-03
4            1      Stok Masuk 2020-04-01              -     Item-04
5            1      Stok Masuk 2020-04-01              -     Item-05
            Nama.Produk Jumlah Harga Bulan_Tahun
1             Batere AA     44     -     04-2020
2 Bawang Putih 200 gram     26     -     04-2020
3 Gula Pasir Putih 1 kg     50     -     04-2020
4          Kopi Instant     27     -     04-2020
5     Mi Goreng Instant    100     -     04-2020 

.

Mengubah Tipe Data Numerik

Setelah aku selesai mengubah tipe data dari variabel Tanggal, mendadak Senja rekan kerjaku yang sedang duduk di sebelahku menunjuk ke arah layar komputer.

“Wah Faris, coba lihat deh, ada variabel yang bernama Harga, tapi tipe data dari variabel tersebut adalah character. Coba kamu cek kembali, apakah benar bahwa variabel tersebut memang menyimpan data character”, ujar Senja.

Aku yang sempat terkejut gara-gara Senja, melihat kembali dan menyadari bahwa variabel Harga yang menyimpan data angka memiliki tipe data character. Tidak menunggu lebih lama lagi, Aku langsung bergegas untuk mengubah tipe data Harga menjadi numerik.

“Thank you, Nja, karena mata kamu yang sangat jeli melihat kesalahan ini,” kataku pada Senja. 

“Tapi, lain kali jangan ngagetin ya,” tambahku.

Senja pun tertawa,” Maaf ya, Faris, hehehe.”

Code

#Ubah tipe data variabel Harga menjadi numerik
data$Harga <- as.numeric(data$Harga)

#Ubah data NA menjadi 0
data$Harga[is.na(data$Harga)] <- 0

#Cek apakah tipe data dari variabel Harga sudah menjadi tipe numerik
str(data$Harga)

#Tampilkan 5 data teratas
head(data, 5)

.

Result

> #Ubah tipe data variabel Harga menjadi numerik
> data$Harga <- as.numeric(data$Harga)

> #Ubah data NA menjadi 0
> data$Harga[is.na(data$Harga)] <- 0

> #Cek apakah tipe data dari variabel Harga sudah menjadi tipe numerik
> str(data$Harga)
 num [1:1842] 0 0 0 0 0 0 0 0 0 0 ...

> #Tampilkan 5 data teratas
> head(data, 5)
  No.Transaksi Jenis.Transaksi    Tanggal Nama.Pelanggan Kode.Produk
1            1      Stok Masuk 2020-04-01              -     Item-01
2            1      Stok Masuk 2020-04-01              -     Item-02
3            1      Stok Masuk 2020-04-01              -     Item-03
4            1      Stok Masuk 2020-04-01              -     Item-04
5            1      Stok Masuk 2020-04-01              -     Item-05
            Nama.Produk Jumlah Harga Bulan_Tahun
1             Batere AA     44     0     04-2020
2 Bawang Putih 200 gram     26     0     04-2020
3 Gula Pasir Putih 1 kg     50     0     04-2020
4          Kopi Instant     27     0     04-2020
5     Mi Goreng Instant    100     0     04-2020

.

ANALISIS DATA RETAIL

Analisis Penjualan per Bulan

Setelah memahami betul isi dari data yang dimiliki, seperti variabel-variabel yang terdapat di dalam data serta tipe dari masing-masing variabel,  selanjutnya aku ingin memperoleh informasi lebih jauh yang tidak dapat dilihat secara langsung di dalam data. Aku kembali melirik email yang Kroma kirimkan dan melihat bahwa dalam program mitra reward ini, Kroma memerlukan beberapa data untuk dianalisis lebih lanjut.

Data pertama yang harus aku sediakan adalah data mengenai penjualan dalam bulan April hingga Juli karena Kroma ingin mengetahui seperti apakah tingkat penjulan tiap bulannya. Untuk itu aku perlu melakukan langkah-langkah berikut

  1. melalui penggunaan function aggregate() dapat ditampilkan penjualan dalam 3 bulan ini (April hingga Juli).
  2. Visualisasikan data tersebut dengan menggunakan chart yang sesuai.

Code

#Lalu ambillah data dengan jenis transaksi adalah Penjualan
data_penjualan = data[data$Jenis.Transaksi=="Penjualan",]

#Lakukan fungsi aggregasi data untuk mendapatkan penjualan perbulan
penjualan_perbulan = aggregate(x=data_penjualan$Jumlah, 
                     by = list(Bulan_Tahun = data_penjualan$Bulan_Tahun),
                     FUN = sum)

#Keluarkan bar plot dari penjualan perbulan
barplot(penjualan_perbulan$x,
        names.arg =penjualan_perbulan$Bulan_Tahun,
        xlab="Month",
        ylab="Penjualan",
        col="blue",
        main="Penjualan perbulan",
        border="red")

.

Result

.

Hasil Analisis Penjualan Mitra Toserba Xera Bulan April – Juni 2022

Akhirnya, selesai juga aku mengerjakan analisis data eksplorasi seperti yang diminta oleh Roma. Aku mengumpulkan beberapa informasi yang diperoleh terkait performa Mitra Toserba Xera. Berikut adalah report performance yang aku hasilkan dan yang aku laporkan pada Roma: 

Penjualan Mitra Toserba Xera pada bulan April – Juni 2020 semakin menurun. Hal ini terlihat dari bar plot jumlah penjualan barang perbulan. Penjualan tertinggi yang dimiliki oleh Mitra Toserba Xera berada pada bulan April 2020 sejumlah 1753 barang terjual. Namun pada bulan Juni 2020, Mitra Toserba Xera hanya menjual 170 produk.

.

Customer dengan Pembelian Terbesar

Kemudian, aku dapat menentukan siapa saja customer yang telah melakukan transaksi pembelian terbesar di Toserba Xera ini. Aku dapat mengerjakan urutan berikut yaitu 

  1. menerapkan function aggregate() untuk mendapatkan pembelian per customer.
  2. mengurutkan hasil agregasi untuk pembelian per customer dari yang tertinggi hingga yang terendah.

Code

#Tentukan 10 customer mana saja yang memiliki pembelian terbesar!
#Keluarkan data dengan jenis transaksi adalah Penjualan
data_penjualan = data[data$Jenis.Transaksi=="Penjualan",]

#Lakukan fungsi aggregasi data untuk mendapatkan pembelian per customer
pembelian_pelanggan=aggregate(
             x=data_penjualan$Jumlah,
             by = list(Pelanggan =data_penjualan$Nama.Pelanggan),
             FUN = sum)

#Urutkan data pelanggan berdasarkan jumlah pembelian dari yang terbesar ke yang terkecil
pembelian_pelanggan = pembelian_pelanggan[order(-pembelian_pelanggan$x), ]

#Ambil 10 nilai tertinggi dari data diatas
head(pembelian_pelanggan, 10)

.

Result

> #Tentukan 10 customer mana saja yang memiliki pembelian terbesar!
> #Keluarkan data dengan jenis transaksi adalah Penjualan
> data_penjualan = data[data$Jenis.Transaksi=="Penjualan",]

> #Lakukan fungsi aggregasi data untuk mendapatkan pembelian per customer
> pembelian_pelanggan=aggregate(
+              x=data_penjualan$Jumlah,
+              by = list(Pelanggan =data_penjualan$Nama.Pelanggan),
+              FUN = sum)

> #Urutkan data pelanggan berdasarkan jumlah pembelian dari yang terbesar ke yang terkecil
> pembelian_pelanggan = pembelian_pelanggan[order(-pembelian_pelanggan$x), ]

> #Ambil 10 nilai tertinggi dari data diatas
> head(pembelian_pelanggan, 10)
    Pelanggan  x
63      Wulan 87
35      Marta 85
68      Zahra 85
3        Andi 83
53       Siti 82
36 Mita, Mira 81
29      Kardi 77
26      Indah 73
18      Farah 71
31     Krisda 71

.

Analisis Perbandingan Barang Masuk dan Keluar

Data berikutnya yang harus aku sediakan adalah data mengenai perbandingan barang masuk dan keluar karena Kroma ingin mengetahui apakah stock yang masuk dengan barang yang terjual seimbang.

Langkah yang perlu dilakukan adalah: 

  1. Dengan menggunakan function aggregate(), tampilkan perbandingan stok masuk dan penjualan per bulan
  2. Visualisasikan data tersebut dengan menggunakan chart yang sesuai.

Code

#Perbandingan barang masuk dan keluar perbulan
aggregate(
  x=data$Jumlah, 
  by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$Jenis.Transaksi), 
  FUN = sum)

#Visualisasikan data dengan chart yang sesuai
#Buat tabel transaksi menggunakan fungsi aggregate
data_transaksi = aggregate(
  x=data$Jumlah, 
  by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$Jenis.Transaksi), 
  FUN = sum)

#Keluarkan data transaksi penjualan dan stok masuk
data_penjualan <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Penjualan",]
data_stok_masuk <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Stok Masuk",]

#Gabungkan kedua data diatas menggunakan fungsi merge dengan left join
data_gabungan = merge(data_stok_masuk,data_penjualan,by='Bulan', all.x=TRUE)
data_gabungan = data.frame(Bulan = data_gabungan$Bulan,
                           Stok_Masuk = data_gabungan$x.x,
                           Penjualan = data_gabungan$x.y)

#Periksa apakah terdapat NA data. Jika terdapat NA data, kamu dapat menggantinya dengan 0
data_gabungan$Penjualan[is.na(data_gabungan$Penjualan)] <- 0

#Ubah format data gabungan dengan melakukan perintah transpose. Lalu ubah nama kolom menggunakan bulan
data_gabung = t(as.matrix(data_gabungan[-1]))
colnames(data_gabung) = data_gabungan$Bulan

#Keluarkan bar plot dengan multiple kategori untuk membandingkan stok masuk dengan penjualan. Lalu keluarkan legend dari barplot tersebut.
barplot(data_gabung,
        main='Perbandingan Penjualan dengan Stok Masuk',
        ylab='Jumlah Barang', 
        xlab='Bulan',
        beside = TRUE, 
        col=c("red","blue"))
legend('topright',fill=c("red","blue"),legend=c('Stok Masuk','Penjualan'))

.

Result

.

Hasil Analisis Stok Barang Masuk Dengan Penjualan di Mitra Toserba Xera

Tadi, aku juga melakukan analisis untuk membandingkan stok barang masuk dengan penjualan di Mitra Toserba Xera. Berdasarkan analisis yang kulakukan, dapat diambil kesimpulan bahwa stok persediaan barang di Mitra Toserba Xera masih cukup banyak mengingat secara rata-rata terdapat sekitar 4000 barang yang masuk kedalam Mitra Toserba Xera sementara toko ini hanya menjual sekitar 1400-1700 barang di bulan April dan Mei.

.

Analisis Hubungan Antara Harga Barang dan Jumlah Transaksi

Setiap selesai melakukan suatu tahapan, aku kembali membuka file yang dikirimkan oleh Kroma untuk memastikan bahwa aku sudah mengerjakan analisis yang dibutuhkan oleh Kroma. Saat ini aku ingin melihat apakah terdapat hubungan antara harga barang dengan jumlah transaksi, data selanjutnya yang akan dibandingkan nilainya adalah harga barang dengan jumlah transaksi. Kroma ingin mengetahui apakah terdapat perbedaan antara jumlah transaksi dengan harga barang.

Dan langkah yang akan aku tempuh adalah dengan melakukan : 

  1. Dengan menggunakan function aggregate(), tampilkan data jumlah transaksi dengan harga barang yang dibeli.
  2. Visualisasikan data tersebut dengan menggunakan chart yang sesuai.

.

Code

#Analisis hubungan antara Harga Barang dengan Jumlah Transaksi
#Memilih data dengan jenis transaksi Penjualan
data <- data[(data$Jenis.Transaksi) == "Penjualan",]

#Mengubah data harga menjadi Integer
data$Harga <- as.integer(data$Harga)

#Mengubah nilai NA menjadi 0
data$Harga[is.na(data$Harga)] <- 0

#Menghitung jumlah transaksi berdasarkan rentang harga
data_transaksi <- aggregate(
  x=data$No.Transaksi, 
  by = list(Harga = data$Harga), 
  FUN = length)

#Mengurutkan data dari harga termahal
data_transaksi = data_transaksi[order(-data_transaksi$Harga), ]

#Visualisasi data hubungan harga barang dengan jumlah transaksi
#Sebelum menggunakan perintah hist() kamu perlu memecah data transaksi diatas menjadi bentuk data vektor sebagai berikut
data_transaksi_freq = as.vector(rep(data_transaksi$Harga, data_transaksi$x))

#Setelah mendapatkan data diatas, kita dapat mengeluarkan histogram dari tabel diatas dengan menggunakan perintah hist()
hist(data_transaksi_freq,
     main="Hubungan antara harga barang dengan transaksi",
     xlab="Rentang harga barang",
     col="green"
)

.

Result

.

Hasil Analisis Hubungan Antara Rentang Harga Barang dan Jumlah Transaksi

Aku juga menggunakan bar plot untuk melihat bagaimana hubungan antara rentang harga barang dengan jumlah transaksi. Dari hasil yang kudapatkan, aku dapat mengetahui bahwa barang yang berada pada rentang harga Rp 10.000-Rp15.000 lebih banyak terjual dibanding rentang harga lainnya. Setelah itu, barang dengan harga kurang dari Rp 5000 menempati posisi kedua. Aku dapat mengambil kesimpulan bahwa barang yang berada di rentang harga ini merupakan barang yang paling laku.

Wah senangnya! Aku telah berhasil menyelesaikan rangkaian pelajaran Project: Eksplorasi Data Ritel menggunakan R. Dari materi yang telah aku pelajari dan praktekkan, aku telah:

  • Mampu melakukan pembacaan dataset retail bertipe tsv ke dalam dataframe
  • Mampu melakukan fungsi agregasi count, sum dan average pada dataframe terhadap periode, nama customer dan nama produk
  • Mampu membuat bar chart jumlah transaksi berdasarkan nama produk
  • Mampu membuat histogram terhadap transaksi berdasarkan rentang harga jual

Tamat ceritanya … hehehe. Ditunggu kisah pengerjaan Project dari Whitecyber Team selanjutnya ya ….
Hubungi Team Whitecyber ya teman-teman bila punya problem untuk Analisa Data kalian.

Semoga bermanfaat … Amien ..

Leave a Reply

Your email address will not be published. Required fields are marked *