DQ-pedia merupakan salah satu perusahaan e-commerce yang ada pada DQ Universe. Saat ini, DQ-pedia sedang gencar untuk memperbanyak mitra berupa warung-warung kecil di berbagai daerah terpencil untuk memperluas jangkauan bisnis. DQ-pedia akan membantu mitra DQ-pedia melalui strategi untuk meningkatkan pendapatan mitra dan melakukan analisis untuk menjamin ketersediaan stok barang disetiap mitra.
Dalam rangka membantu Mitra ini, DQ-pedia perlu melakukan evaluasi dan analisis terhadap data penjualan dari masing-masing mitra. Dikarenakan data penjualan mitra ini cukup besar, Kroma selaku pimpinan dari DQ-Pedia, meminta bantuanku untuk melakukan analisis 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). 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 data dan simpan ke dalam variable bernama ‘data’
data <- read.csv("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 "-" "-" "-" "-" ...
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.
#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
Setelah aku selesai mengubah tipe data dari variabel Tanggal, mendadak Senja rekan kerjaku yang sedang duduk di sebelahku menunjuk ke arah layar komputer.
“Wah Aksara, 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.
#Ubah tipe data variabel Harga menjadi numerik
data$Harga <- as.numeric(data$Harga)
## Warning: NAs introduced by coercion
#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
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.
#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")
penjualan_perbulan
## Bulan_Tahun x
## 1 04-2020 1753
## 2 05-2020 1485
## 3 06-2020 170
Akhirnya, selesai juga aku mengerjakan analisis data eksplorasi seperti yang diminta oleh Kroma. Aku mengumpulkan beberapa informasi yang diperoleh terkait performa Mitra Toserba Xera. Berikut adalah report performance yang aku hasilkan dan yang aku laporkan pada Kroma:
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.
Kemudian, aku dapat menentukan siapa saja customer yang telah melakukan transaksi pembelian terbesar di Toserba Xera ini.
Selanjutnya kamu akan memperoleh 10 pembeli dengan transaksi tertinggi.
#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
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.
Nantinya ketika aku sudah melakukan analisis perbandingan barang keluar dan masuk, informasi yang bisa diperoleh adalah Stok barang masuk setiap bulan berjumlah diantara 4300-4500, sementara jumlah penjualan berkisar di 1400-1700 untuk bulan April dan Mei 2020. Namun penjualan di bulan Juni cukup rendah dengan jumlah sekitar 170 penjualan.
#Perbandingan barang masuk dan keluar perbulan
aggregate(
x=data$Jumlah,
by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$Jenis.Transaksi),
FUN = sum)
## Bulan Jenis_Transaksi x
## 1 04-2020 Penjualan 1753
## 2 05-2020 Penjualan 1485
## 3 06-2020 Penjualan 170
## 4 04-2020 Stok Masuk 4527
## 5 05-2020 Stok Masuk 4306
## 6 06-2020 Stok Masuk 4323
## 7 07-2020 Stok Masuk 4509
#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'))
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.
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.
#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"
)
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:
Ini adalah pelajaran berharga, aku sangat antusias untuk mendapatkan sertifikatku dan membagikannya ke rekan-rekanku di Linkedin!