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 :
- Load dataset ke dalam workspace dengan menggunakan function
read.csv()
dan simpan ke dalam variable bernamadata
- Tampilkan 5 data teratas dengan menggunakan function
head()
- Tampilkan 5 data terbawah dengan menggunakan function
tail()
- 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
- melalui penggunaan function
aggregate()
dapat ditampilkan penjualan dalam 3 bulan ini (April hingga Juli). - 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
- menerapkan function
aggregate()
untuk mendapatkan pembelian per customer. - 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:
- Dengan menggunakan function
aggregate()
, tampilkan perbandingan stok masuk dan penjualan per bulan - 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 :
- Dengan menggunakan function
aggregate()
, tampilkan data jumlah transaksi dengan harga barang yang dibeli. - 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 ..