email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
AL.Pedia merupakan salah satu perusahaan e-commerce yang ada pada AL. Universe. Saat ini, AL.Pedia sedang gencar untuk memperbanyak mitra berupa warung-warung kecil di berbagai daerah terpencil untuk memperluas jangkauan bisnis. AL.Pedia akan membantu mitra AL.Pedia melalui strategi untuk meningkatkan pendapatan mitra dan melakukan analisis untuk menjamin ketersediaan stok barang disetiap mitra. Dalam rangka membantu Mitra ini, AL.Pedia perlu melakukan evaluasi dan analisis terhadap data penjualan dari masing-masing mitra. Dikarenakan data penjualan mitra ini cukup besar, L selaku pimpinan dari AL.Pedia, meminta bantuanku untuk melakukan analisis data.
Namaku A dan saat ini pekerjaanku adalah seorang Data Analyst. Melihat L yang sedang mengalami kesulitan, aku akan siap membantunya. Hari ini ketika aku baru saja duduk ke meja kerjaku, L langsung menghampiri aku dan menjelaskan terkait program analisa yang akan dilakukannya.
“Halo A, kamu sudah tahu kan kalau kita akan evaluasi untuk mitra AL.Pedia dibulan ini?” ucap L padaku.
“Hi L, yaaap. Aku sudah tahu tentang program ini” balasku, dengan agak sedikit terkejut melihat kedatangan L.
“Baiklah, sepertinya kita akan membutuhkan bantuan untuk analisis data penjualan mitra ya. Untuk saat ini, kita akan melakukan evaluasi untuk Mitra Toserba Alpha terlebih dahulu. Aku sudah mengirimkan data penjualan mereka lewat email. Mohon bantuannya ya, A!” ucap L sambil menepuk pundakku.
“Baik L, siap!” aku menjawabnya dengan penuh semangat. Sepertinya ini akan menjadi suatu analisa yang sangat menarik.
Segera setelah aku mendapatkan file berisi data dari L, 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:
read.csv() dan menyimpan ke dalam variable bernama
datahead()tail()str()#load data dan menyimpan ke dalam variable bernama data
data <- read.csv("https://storage.googleapis.com/dqlab-dataset/transaksi_stok_dan_penjualan.tsv", header = TRUE, sep = "\t")#menampilkan 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 -
#menampilkan 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 -
#menampilkan 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 variabel Tanggal tersebut memiliki tipe data date. Oleh karena itu, tugas selanjutnya yang akan aku lakukan adalah mengubah tipe data dari variabel Tanggal menjadi date dan menambahkan satu variabel bernama Bulan_Tahun untuk menyimpan data bulan dan tahun.
#mengbah tipe data variabel Tanggal menjadi date
data$Tanggal <- as.Date(data$Tanggal, "%d-%m-%Y")#mengecek 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" ...
#menambahkan kolom baru untuk menyimpan data bulan dan tahun
data$Bulan_Tahun <- format(data$Tanggal, "%m-%Y")#menampilkan 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 I rekan kerjaku yang sedang duduk di sebelahku menunjuk ke arah layar komputer. “Wah A, 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 I.
Aku yang sempat terkejut gara-gara I, 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, I, karena mata kamu yang sangat jeli melihat kesalahan ini,” kataku pada I. “Tapi, lain kali jangan ngagetin ya,” tambahku. I pun tertawa, “Maaf ya, A, hehehe.”
#mengubah tipe data variabel Harga menjadi numerik
data$Harga <- as.numeric(data$Harga)#mengubah data NA menjadi 0
data$Harga[is.na(data$Harga)] <- 0#mengecek 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 ...
#menampilkan 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 L kirimkan dan melihat bahwa dalam program mitra reward ini, L memerlukan beberapa data untuk dianalisis lebih lanjut. Data pertama yang harus aku sediakan adalah data mengenai penjualan dalam bulan April hingga Juni, karena L ingin mengetahui seperti apakah tingkat penjulan tiap bulannya. Untuk itu aku perlu melakukan langkah-langkah berikut:
aggregate() untuk dapat menampilkan
penjualan dalam 3 bulan ini (April hingga
Juni).#mengambil data dengan jenis transaksi adalah Penjualan
data_penjualan = data[data$Jenis.Transaksi == "Penjualan",]
head(data_penjualan, 13) No.Transaksi Jenis.Transaksi Tanggal Nama.Pelanggan Kode.Produk
48 10 Penjualan 2020-04-10 Fajri Item-11
49 11 Penjualan 2020-04-10 Fitri Item-11
50 12 Penjualan 2020-04-10 Nita Item-11
51 13 Penjualan 2020-04-10 Rian Item-02
52 13 Penjualan 2020-04-10 Rian Item-03
53 13 Penjualan 2020-04-10 Rian Item-05
54 13 Penjualan 2020-04-10 Rian Item-11
55 14 Penjualan 2020-04-10 Zahra Item-03
56 14 Penjualan 2020-04-10 Zahra Item-05
57 14 Penjualan 2020-04-10 Zahra Item-11
62 16 Penjualan 2020-04-11 Agung Item-05
63 16 Penjualan 2020-04-11 Agung Item-07
64 16 Penjualan 2020-04-11 Agung Item-11
Nama.Produk Jumlah Harga Bulan_Tahun
48 Sabun Cuci Piring 3 14000 04-2020
49 Sabun Cuci Piring 3 14000 04-2020
50 Sabun Cuci Piring 2 14000 04-2020
51 Bawang Putih 200 gram 3 15000 04-2020
52 Gula Pasir Putih 1 kg 2 12500 04-2020
53 Mi Goreng Instant 2 2600 04-2020
54 Sabun Cuci Piring 3 14000 04-2020
55 Gula Pasir Putih 1 kg 3 12500 04-2020
56 Mi Goreng Instant 2 2600 04-2020
57 Sabun Cuci Piring 4 14000 04-2020
62 Mi Goreng Instant 2 2600 04-2020
63 Sabut Cuci Piring 1 7500 04-2020
64 Sabun Cuci Piring 2 14000 04-2020
#menggunakan fungsi aggregasi data untuk mendapatkan penjualan perbulan
penjualan_perbulan = aggregate(x = data_penjualan$Jumlah,
by = list(Bulan_Tahun = data_penjualan$Bulan_Tahun),
FUN = sum)
penjualan_perbulan Bulan_Tahun x
1 04-2020 1753
2 05-2020 1485
3 06-2020 170
#melihat bar plot dari penjualan perbulan
barplot(penjualan_perbulan$x,
names.arg = penjualan_perbulan$Bulan_Tahun,
xlab = "Bulan",
ylab = "Penjualan",
col = "blue",
main = "Penjualan per Bulan",
border = "red")Akhirnya, selesai juga aku mengerjakan analisis data eksplorasi seperti yang diminta oleh L. Aku mengumpulkan beberapa informasi yang diperoleh terkait performa Mitra Toserba Alpha. Berikut adalah report performance yang aku hasilkan dan yang aku laporkan pada L:
Penjualan Mitra Toserba Alpha pada bulan April-Juni 2020 semakin menurun. Hal ini terlihat dari bar plot jumlah penjualan barang per bulan. Penjualan tertinggi yang dimiliki oleh Mitra Toserba Alpha berada pada bulan April 2020 sejumlah 1753 barang terjual. Namun pada bulan Juni 2020, Mitra Toserba Alpha hanya menjual 170 produk.
Kemudian, aku dapat menentukan siapa saja customer yang telah melakukan transaksi pembelian terbesar di Toserba Alpha ini. Aku dapat mengerjakan urutan berikut yaitu:
aggregate() untuk mendapatkan
pembelian per customer.#menggukan fungsi aggregasi data untuk mendapatkan pembelian per customer
pembelian_pelanggan = aggregate(x = data_penjualan$Jumlah,
by = list(Pelanggan = data_penjualan$Nama.Pelanggan),
FUN = sum)
head(pembelian_pelanggan, 13) Pelanggan x
1 Agung 51
2 Agus 54
3 Andi 83
4 Andika 17
5 Anggun 48
6 Ardi 44
7 Asep 36
8 Ayu 40
9 Bagus 54
10 Bambang 20
11 Bayu 9
12 Bella 15
13 Citra 20
#mengurutkan data pelanggan berdasarkan jumlah pembelian dari yang terbesar ke yang terkecil
pembelian_pelanggan = pembelian_pelanggan[order(-pembelian_pelanggan$x), ]
head(pembelian_pelanggan, 22) 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
60 Ujang 71
30 Komang 70
15 Diki 68
17 Fajri 67
37 Murni 67
67 Yuli 66
21 Galang 65
54 Sri 65
44 Rahmad 64
27 Iqbal 63
28 Jaya 62
34 Mahmud 62
#melihat 10 nilai tertinggi dari data di Atas
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 L ingin mengetahui apakah stock yang masuk dengan barang yang terjual seimbang. Langkah yang perlu dilakukan adalah:
aggregate() untuk menampilkan
perbandingan stock masuk dan penjualan per bulan.#membandingkan 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
#memvisualisasikan data dengan chart yang sesuai
#membuat tabel transaksi menggunakan fungsi aggregate
data_transaksi = aggregate(x = data$Jumlah,
by = list(Bulan = data$Bulan_Tahun, Jenis_Transaksi = data$Jenis.Transaksi),
FUN = sum)#mengeluarkan data transaksi penjualan
data_penjualan <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Penjualan",]
data_penjualan Bulan Jenis_Transaksi x
1 04-2020 Penjualan 1753
2 05-2020 Penjualan 1485
3 06-2020 Penjualan 170
#mengeluarkan data transaksi stok masuk
data_stok_masuk <- data_transaksi[(data_transaksi$Jenis_Transaksi) == "Stok Masuk",]
data_stok_masuk Bulan Jenis_Transaksi x
4 04-2020 Stok Masuk 4527
5 05-2020 Stok Masuk 4306
6 06-2020 Stok Masuk 4323
7 07-2020 Stok Masuk 4509
#menggabungkan kedua data di Atas 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)
data_gabungan Bulan Stok_Masuk Penjualan
1 04-2020 4527 1753
2 05-2020 4306 1485
3 06-2020 4323 170
4 07-2020 4509 NA
#memeriksa apakah terdapat NA data. Jika terdapat NA data, kamu dapat menggantinya dengan 0
data_gabungan$Penjualan[is.na(data_gabungan$Penjualan)] <- 0
data_gabungan$Penjualan[1] 1753 1485 170 0
#mengubah format data gabungan dengan melakukan perintah transpose
data_gabung = t(as.matrix(data_gabungan[-1]))
data_gabung [,1] [,2] [,3] [,4]
Stok_Masuk 4527 4306 4323 4509
Penjualan 1753 1485 170 0
#mengubah nama kolom menggunakan bulan
colnames(data_gabung) = data_gabungan$Bulan
data_gabung 04-2020 05-2020 06-2020 07-2020
Stok_Masuk 4527 4306 4323 4509
Penjualan 1753 1485 170 0
#membuat bar plot dengan multiple kategori untuk membandingkan stok masuk dengan penjualan
barplot(data_gabung,
main = 'Perbandingan Penjualan dengan Stok Masuk',
ylab = 'Jumlah Barang',
xlab = 'Bulan',
beside = TRUE,
col = c("red", "blue"))
#mengeluarkan legend dari barplot tersebut
legend('topright', fill = c("red","blue"), legend = c('Stok Masuk', 'Penjualan'))Tadi, aku melakukan analisis untuk membandingkan stok barang masuk dengan penjualan di Mitra Toserba Alpha. Berdasarkan analisis yang kulakukan, dapat diambil kesimpulan bahwa stok persediaan barang di Mitra Toserba Alpha masih cukup banyak mengingat secara rata-rata terdapat sekitar 4000 barang yang masuk kedalam Mitra Toserba Alpha, sementara toko ini hanya menjual sekitar 1400-1700 barang di bulan April dan Mei. Namun penjualan di bulan Juni cukup rendah dengan jumlah sekitar 170 penjualan.
Setiap selesai melakukan suatu tahapan, aku kembali membuka file yang dikirimkan oleh L untuk memastikan bahwa aku sudah mengerjakan analisis yang dibutuhkan oleh L. 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. L ingin mengetahui apakah terdapat perbedaan antara jumlah transaksi dengan harga barang. Langkah yang akan aku tempuh adalah dengan melakukan:
aggregate() untuk menampilkan data
jumlah transaksi dengan harga barang yang dibeli.#analisis hubungan antara Harga Barang dengan Jumlah Transaksi
#memilih data dengan jenis transaksi Penjualan
penjualan <- data[(data$Jenis.Transaksi) == "Penjualan",]
head(penjualan, 13) No.Transaksi Jenis.Transaksi Tanggal Nama.Pelanggan Kode.Produk
48 10 Penjualan 2020-04-10 Fajri Item-11
49 11 Penjualan 2020-04-10 Fitri Item-11
50 12 Penjualan 2020-04-10 Nita Item-11
51 13 Penjualan 2020-04-10 Rian Item-02
52 13 Penjualan 2020-04-10 Rian Item-03
53 13 Penjualan 2020-04-10 Rian Item-05
54 13 Penjualan 2020-04-10 Rian Item-11
55 14 Penjualan 2020-04-10 Zahra Item-03
56 14 Penjualan 2020-04-10 Zahra Item-05
57 14 Penjualan 2020-04-10 Zahra Item-11
62 16 Penjualan 2020-04-11 Agung Item-05
63 16 Penjualan 2020-04-11 Agung Item-07
64 16 Penjualan 2020-04-11 Agung Item-11
Nama.Produk Jumlah Harga Bulan_Tahun
48 Sabun Cuci Piring 3 14000 04-2020
49 Sabun Cuci Piring 3 14000 04-2020
50 Sabun Cuci Piring 2 14000 04-2020
51 Bawang Putih 200 gram 3 15000 04-2020
52 Gula Pasir Putih 1 kg 2 12500 04-2020
53 Mi Goreng Instant 2 2600 04-2020
54 Sabun Cuci Piring 3 14000 04-2020
55 Gula Pasir Putih 1 kg 3 12500 04-2020
56 Mi Goreng Instant 2 2600 04-2020
57 Sabun Cuci Piring 4 14000 04-2020
62 Mi Goreng Instant 2 2600 04-2020
63 Sabut Cuci Piring 1 7500 04-2020
64 Sabun Cuci Piring 2 14000 04-2020
#mengubah data harga menjadi Integer
penjualan$Harga <- as.integer(penjualan$Harga)
#melihat hasil
str(penjualan$Harga) int [1:1392] 14000 14000 14000 15000 12500 2600 14000 12500 2600 14000 ...
#mengubah nilai NA menjadi 0
penjualan$Harga[is.na(penjualan$Harga)] <- 0#menghitung jumlah transaksi berdasarkan rentang harga
data_transaksi <- aggregate(x = penjualan$No.Transaksi,
by = list(Harga = penjualan$Harga),
FUN = length)
#melihat hasil
data_transaksi Harga x
1 1700 10
2 2000 58
3 2600 261
4 5000 34
5 5200 159
6 6500 13
7 7500 16
8 7800 25
9 10500 163
10 12000 73
11 12500 305
12 14000 38
13 15000 157
14 18000 11
15 22300 7
16 24000 53
17 63000 9
#mengurutkan data dari harga termahal
data_transaksi = data_transaksi[order(-data_transaksi$Harga), ]
#melihat hasil
data_transaksi Harga x
17 63000 9
16 24000 53
15 22300 7
14 18000 11
13 15000 157
12 14000 38
11 12500 305
10 12000 73
9 10500 163
8 7800 25
7 7500 16
6 6500 13
5 5200 159
4 5000 34
3 2600 261
2 2000 58
1 1700 10
#visualisasi data hubungan harga barang dengan jumlah transaksi
#sebelum menggunakan perintah hist(), perlu memecah data transaksi di Atas menjadi bentuk data vektor
data_transaksi_freq = as.vector(rep(data_transaksi$Harga, data_transaksi$x))#setelah mendapatkan data di Atas, kita dapat mengeluarkan histogram dari tabel dengan menggunakan perintah hist()
hist(data_transaksi_freq,
main = "Hubungan antara Harga Barang dengan Transaksi",
xlab = "Rentang Harga Barang",
col = "green"
)Aku 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 sampai Rp 15.000 lebih banyak terjual dibanding rentang harga lainnya. Setelah itu, barang dengan harga kurang dari Rp 6.000 menempati posisi kedua. Aku dapat mengambil kesimpulan bahwa barang yang berada di rentang harga ini merupakan barang yang paling laku.