Data ini berisi catatan penjualan yang terperinci dari E-commerce di Amerika Serikat pada tahun 2020. Data penjualan tersebut terdiri Sales, Discount, Profit, Quantity, yang bersal dari 47 negara dan 350 kota.
Di awal akan dilakukan set up awal untuk mengeset chunk dan membersikan environment.
Set up library yang akan digunakan
library(lubridate)
library("tidyr")Mengimpor dataset ecommerce2020 dari folder
data_input yang diberi nama “ecommerce” Di sini kita
akan menggunakan fungsi read.csv() untuk membaca file
ekstensi CSV, yaitu object di R yang disimpan ke dalam sebuah file.
ecommerce = read.csv("data_input/ecommerce2020.csv")Inspect data menggunakan fungsi head() yang berfungsi
untuk memanggil 5 data teratas saja.
head(ecommerce)Mengecek nama kolom di tiap kolom pada data
ecommerce dengan fungsi names()
names(ecommerce)#> [1] "Order.Date" "Row.ID" "Order.ID" "Ship.Mode" "Customer.ID"
#> [6] "Segment" "Country" "City" "State" "Postal.Code"
#> [11] "Region" "Product.ID" "Category" "Sub.Category" "Product.Name"
#> [16] "Sales" "Quantity" "Discount" "Profit"
Mengecek struktur data pada data ecommerce dengan
fungsi str()
str(ecommerce) #> 'data.frame': 3312 obs. of 19 variables:
#> $ Order.Date : chr "01-01-20" "01-01-20" "01-01-20" "01-01-20" ...
#> $ Row.ID : int 849 4010 6683 8070 8071 8072 8073 8074 8075 8076 ...
#> $ Order.ID : chr "CA-2017-107503" "CA-2017-144463" "CA-2017-154466" "CA-2017-151750" ...
#> $ Ship.Mode : chr "Standard Class" "Standard Class" "First Class" "Standard Class" ...
#> $ Customer.ID : chr "GA-14725" "SC-20725" "DP-13390" "JM-15250" ...
#> $ Segment : chr "Consumer" "Consumer" "Home Office" "Consumer" ...
#> $ Country : chr "United States" "United States" "United States" "United States" ...
#> $ City : chr "Lorain" "Los Angeles" "Franklin" "Huntsville" ...
#> $ State : chr "Ohio" "California" "Wisconsin" "Texas" ...
#> $ Postal.Code : int 44052 90036 53132 77340 77340 77340 77340 77340 77340 77340 ...
#> $ Region : chr "East" "West" "Central" "Central" ...
#> $ Product.ID : chr "FUR-FU-10003878" "FUR-FU-10001215" "OFF-BI-10002012" "OFF-ST-10002743" ...
#> $ Category : chr "Furniture" "Furniture" "Office Supplies" "Office Supplies" ...
#> $ Sub.Category: chr "Furnishings" "Furnishings" "Binders" "Storage" ...
#> $ Product.Name: chr "Linden 10\" Round Wall Clock, Black" "Howard Miller 11-1/2\" Diameter Brentwood Wall Clock" "Wilson Jones Easy Flow II Sheet Lifters" "SAFCO Boltless Steel Shelving" ...
#> $ Sales : num 48.9 474.4 3.6 454.6 141.4 ...
#> $ Quantity : int 4 11 2 5 5 4 4 5 14 2 ...
#> $ Discount : num 0.2 0 0 0.2 0.6 0.3 0.2 0.8 0.8 0.8 ...
#> $ Profit : num 8.56 199.26 1.73 -107.96 -187.38 ...
Setelah data berhasil dimasukkan, selanjutnya adalah melakukan perubahan format pada element-element dalam data sehingga sesuai dengan isi data.
# merubah tipe data per kolom
ecommerce$Row.ID <- as.character(ecommerce$Row.ID)
ecommerce$Order.Date <- mdy(ecommerce$Order.Date)
ecommerce$Ship.Mode <- as.factor(ecommerce$Ship.Mode)
ecommerce$Segment <- as.factor(ecommerce$Segment)
ecommerce$Country <- as.factor(ecommerce$Country)
ecommerce$City <- as.factor(ecommerce$City)
ecommerce$State <- as.factor(ecommerce$State)
ecommerce$Region <- as.factor(ecommerce$Region)
ecommerce$Category <- as.factor(ecommerce$Category)
ecommerce$Postal.Code <- as.factor(ecommerce$Postal.Code)
ecommerce$Sub.Category <- as.factor(ecommerce$Sub.Category)
# memeriksa kembali struktur data
str(ecommerce)#> 'data.frame': 3312 obs. of 19 variables:
#> $ Order.Date : Date, format: "2020-01-01" "2020-01-01" ...
#> $ Row.ID : chr "849" "4010" "6683" "8070" ...
#> $ Order.ID : chr "CA-2017-107503" "CA-2017-144463" "CA-2017-154466" "CA-2017-151750" ...
#> $ Ship.Mode : Factor w/ 4 levels "First Class",..: 4 4 1 4 4 4 4 4 4 4 ...
#> $ Customer.ID : chr "GA-14725" "SC-20725" "DP-13390" "JM-15250" ...
#> $ Segment : Factor w/ 3 levels "Consumer","Corporate",..: 1 1 3 1 1 1 1 1 1 1 ...
#> $ Country : Factor w/ 1 level "United States": 1 1 1 1 1 1 1 1 1 1 ...
#> $ City : Factor w/ 350 levels "Aberdeen","Abilene",..: 174 175 99 138 138 138 138 138 138 138 ...
#> $ State : Factor w/ 47 levels "Alabama","Arizona",..: 33 4 47 41 41 41 41 41 41 41 ...
#> $ Postal.Code : Factor w/ 437 levels "1841","1852",..: 169 356 208 296 296 296 296 296 296 296 ...
#> $ Region : Factor w/ 4 levels "Central","East",..: 2 4 1 1 1 1 1 1 1 1 ...
#> $ Product.ID : chr "FUR-FU-10003878" "FUR-FU-10001215" "OFF-BI-10002012" "OFF-ST-10002743" ...
#> $ Category : Factor w/ 3 levels "Furniture","Office Supplies",..: 1 1 2 2 1 1 2 2 2 2 ...
#> $ Sub.Category: Factor w/ 17 levels "Accessories",..: 10 10 4 15 10 6 3 4 4 2 ...
#> $ Product.Name: chr "Linden 10\" Round Wall Clock, Black" "Howard Miller 11-1/2\" Diameter Brentwood Wall Clock" "Wilson Jones Easy Flow II Sheet Lifters" "SAFCO Boltless Steel Shelving" ...
#> $ Sales : num 48.9 474.4 3.6 454.6 141.4 ...
#> $ Quantity : int 4 11 2 5 5 4 4 5 14 2 ...
#> $ Discount : num 0.2 0 0 0.2 0.6 0.3 0.2 0.8 0.8 0.8 ...
#> $ Profit : num 8.56 199.26 1.73 -107.96 -187.38 ...
Analisis kembali kolom-kolom pada data yang memiliki nilak kosong (NaN atau Na)
colSums(is.na(ecommerce))#> Order.Date Row.ID Order.ID Ship.Mode Customer.ID Segment
#> 1990 0 0 0 0 0
#> Country City State Postal.Code Region Product.ID
#> 0 0 0 0 0 0
#> Category Sub.Category Product.Name Sales Quantity Discount
#> 0 0 0 0 0 0
#> Profit
#> 0
Dari analisis di atas diketahui terdapat missing value pada kolom
Order.Date sebanyak 1990 Sehingga untuk mengatasi “Missing
Data” dalam Dataset, kita akan gunakan fungsi drop_na()
dari tidyr package Fungsi drop_na berfungsi
untuk menghapus baris yang memiliki nilai missing value pada kolom
Order.Date
ecommerce <- ecommerce %>% drop_na()
# mengecek kembali Missing Value
colSums(is.na(ecommerce))#> Order.Date Row.ID Order.ID Ship.Mode Customer.ID Segment
#> 0 0 0 0 0 0
#> Country City State Postal.Code Region Product.ID
#> 0 0 0 0 0 0
#> Category Sub.Category Product.Name Sales Quantity Discount
#> 0 0 0 0 0 0
#> Profit
#> 0
anyNA(ecommerce)#> [1] FALSE
Missing value pada data telah berhasil dieliminasi dan data tidak ada lagi missing value
Berikut adalah informasi singkat dari masing-masing kolom pada dataframe ecommerce
summary(ecommerce)#> Order.Date Row.ID Order.ID
#> Min. :2020-01-01 Length:1322 Length:1322
#> 1st Qu.:2020-03-07 Class :character Class :character
#> Median :2020-06-11 Mode :character Mode :character
#> Mean :2020-06-16
#> 3rd Qu.:2020-09-12
#> Max. :2020-12-11
#>
#> Ship.Mode Customer.ID Segment Country
#> First Class :219 Length:1322 Consumer :654 United States:1322
#> Same Day : 89 Class :character Corporate :392
#> Second Class :263 Mode :character Home Office:276
#> Standard Class:751
#>
#>
#>
#> City State Postal.Code Region
#> New York City:116 California :278 98105 : 36 Central:301
#> Los Angeles : 96 Texas :135 10009 : 35 East :361
#> Philadelphia : 78 New York :122 94110 : 30 South :202
#> San Francisco: 77 Washington : 98 10024 : 29 West :458
#> Seattle : 77 Pennsylvania: 85 10035 : 29
#> Chicago : 38 Florida : 64 94122 : 27
#> (Other) :840 (Other) :540 (Other):1136
#> Product.ID Category Sub.Category Product.Name
#> Length:1322 Furniture :261 Binders :208 Length:1322
#> Class :character Office Supplies:807 Paper :202 Class :character
#> Mode :character Technology :254 Accessories:127 Mode :character
#> Furnishings:123
#> Storage :108
#> Art :105
#> (Other) :449
#> Sales Quantity Discount Profit
#> Min. : 0.556 Min. : 1.000 Min. :0.0000 Min. :-3839.990
#> 1st Qu.: 16.902 1st Qu.: 2.000 1st Qu.:0.0000 1st Qu.: 1.677
#> Median : 54.498 Median : 3.000 Median :0.2000 Median : 7.916
#> Mean : 206.738 Mean : 3.792 Mean :0.1617 Mean : 19.343
#> 3rd Qu.: 195.506 3rd Qu.: 5.000 3rd Qu.:0.2000 3rd Qu.: 27.840
#> Max. :7999.980 Max. :14.000 Max. :0.8000 Max. : 1351.990
#>
Dari informasi di atas dapat dirangkum sebagai berikut:
Order.Date pertama dilakukan pada tanggal 1 januari
2020Segment jenis Consumer adalah pembeli
terbanyak, sedangkan Home Office adalah yang paling
sedikit.category adalah
Office SuppliesMelihat data dari kolom Category yang menunjukkan
penjualan (Sales) harga terendah
ecommerce[ecommerce$Sales == min(ecommerce$Sales),]Explanation: Nilai penjualan terendah adalah 0.556 yang berasal dari ‘Sub.Category’ Binders, ‘Category’ Office Supplies, di kota Waco, Texas dan merugi -0.9452
Melihat data dari kolom Category yang menghasilkan
laba(profit)tertinggi
ecommerce[ecommerce$Profit == max(ecommerce$Profit),]Explanation: Nilai laba tertinggi adalah 1351.99 yang berasal dari ‘Sub.Category’ Machines, ‘Category’ Technology, di kota New York City, New York dengan nilai penjualan sebesar 5199.96
Segmen mana yang paling banyak membeli produk Technology?
# inisialisasi kolom Category yang memiliki kategori Technology
tech_product <- ecommerce[ecommerce$Category == "Technology",]
# menampilkan jumlah pembeli per segmen
table(tech_product$Segment)#>
#> Consumer Corporate Home Office
#> 114 83 57
# menampilkan jumlah pembeli dalam bentuk persen
round(prop.table(table(tech_product$Segment))*100,2)#>
#> Consumer Corporate Home Office
#> 44.88 32.68 22.44
Explanation: Dari output yang dihasilkan diketahui bahwa segmen terbanyak yang membeli produk dari kategori teknologi berasal dari segmen Consumer sebesar 44.88% dengan jumlah sebesar 114 Consumer
Berapa kali dan berapa banyak pembeli mendapatkan diskon tertinggi dan pada tanggal berapa? dan siapa pembelinya?
# declare variable strings
str1 = "Diskon tertinggi:"
max_disc = round(max(ecommerce$Discount)*100)
# concatenate two strings using paste function
print_string = paste(str1,max_disc,"%")
print_string#> [1] "Diskon tertinggi: 80 %"
customer_ <- ecommerce[ecommerce$Discount == max(ecommerce$Discount),]
# declare variable strings
str2 = "Jumlah pembeli"
total_customer = nrow(customer_)
# concatenate two strings using paste function
print_string2 = paste(str2,total_customer, "Customers")
print_string2#> [1] "Jumlah pembeli 41 Customers"
(sort(table(customer_$Order.Date),decreasing = T)[1])#> 2020-01-01
#> 3
Explanation: Diskon terbesar adalah 80% yang terjadi pada tanggal 09 Februari 2020, terjadi sebesar 3 kali, dengan jumlah customer sebanyak 41 customers
Berhubungan dengan pertanyaan sebelumnya, siapakah pembelinya?
customer_2 <- customer_[customer_$Order.Date=="2020-01-01",]
(table(customer_2$Segment))#>
#> Consumer Corporate Home Office
#> 3 0 0
Explanation: Semua pembeli yang mendapatkan diskon terbesar berasal dari ‘Segmen’ Consumer
Berapa total pesanan ‘Quantity’ dari masing-masing segmen dan kategori, dan mana yang tertinggi?
`Total Pesanan` <- xtabs(Quantity~Segment+Category,ecommerce)
`Total Pesanan` #> Category
#> Segment Furniture Office Supplies Technology
#> Consumer 425 1631 436
#> Corporate 330 884 300
#> Home Office 194 606 207
plot(`Total Pesanan`)Explanation: Berdasarkan hasil di atas bahwa total pesanan terbanyak terjadi di ‘Segmen’ Consumer dengan ‘Category’ Office Supplies, dengan total pesanan sejumlah 1631
Berapa Total jumlah pesanan dan total profit sejak E-Commerce mulai menjual produk?
paste("Total pesanan/kuantitas dalam setahun:",sum(ecommerce$Quantity),"items")#> [1] "Total pesanan/kuantitas dalam setahun: 5013 items"
paste("Total laba/profit dalam setahun:",sum(ecommerce$Profit))#> [1] "Total laba/profit dalam setahun: 25571.2181"
discount <- ecommerce[ecommerce$Discount >= min(ecommerce$Discount) &
ecommerce$Discount <= max(ecommerce$Discount),]
knitr::kable(table(discount$Discount))| Var1 | Freq |
|---|---|
| 0 | 620 |
| 0.1 | 9 |
| 0.15 | 8 |
| 0.2 | 499 |
| 0.3 | 23 |
| 0.32 | 1 |
| 0.4 | 28 |
| 0.45 | 4 |
| 0.5 | 8 |
| 0.6 | 18 |
| 0.7 | 63 |
| 0.8 | 41 |
Explanation: Berdasarkan data di atas, sebagian besar jumlah data produk yang dijual adalah tanpa diberikannya diskon
Kategori mana yang menghasilkan keuntungan tertinggi?
xtabs(Profit ~ Category, ecommerce)#> Category
#> Furniture Office Supplies Technology
#> -780.7927 13721.6223 12630.3885
Explanation: Kategori dari Office Supplies menghasilkan keuntungan tertinggi sebesar 13721.6223
Kategori mana yang memiliki nilai penjualan tertinggi?
xtabs(Sales ~ Category, ecommerce)#> Category
#> Furniture Office Supplies Technology
#> 84855.70 89967.90 98483.68
Explanation: Penjualan dari kategori ‘Technology’ nilai penjualan tertinggi yaitu sebesar 98483.68
Di mana letak transaksi dengan kerugian terbesar?
ecommerce[ecommerce$Profit==min(ecommerce$Profit),]Explanation: Kerugian besar terjadi ketika jumlah profit menghasilkan nilai minus terbesar, sehingga dapat disimpulkan kerugian terbesar terjadi pada Sub.Category Machines, Category Technology, dengan diskon 50%, yang dijual seharga 7999.98, dan terjadi pada tanggal 11 April 2020
Pada segment apa yang memiliki nilai keuntungan terbesar terjadi?
xtabs(Profit~Segment,ecommerce)#> Segment
#> Consumer Corporate Home Office
#> 13597.689 2593.242 9380.288
Explanation: Nilai keuntungan terjadi pada segment Consumer dengan laba 13597.689
Berapa nilai keuntungan berdasarkan jenis pengiriman dan segment?
xtabs(Profit~Segment+Ship.Mode, ecommerce)#> Ship.Mode
#> Segment First Class Same Day Second Class Standard Class
#> Consumer 2267.5666 1290.9605 1351.6191 8687.5423
#> Corporate 891.8486 -2909.5271 3553.0749 1057.8457
#> Home Office 1035.3848 1457.4782 1833.1047 5054.3198
Explanation: Berdasarkan nilai keuntungan, jenis pengiriman dengan keuntungan terbesar mayoritas memilih jenis pengiriman Standard Class
Penjualan dengan kuantitas tertinggi berdasarkan Sub.Category
xtabs(Profit~Sub.Category, ecommerce)#> Sub.Category
#> Accessories Appliances Art Binders Bookcases Chairs
#> 7932.0722 3049.5318 810.9591 545.1004 -861.2908 2919.5956
#> Copiers Envelopes Fasteners Furnishings Labels Machines
#> 2684.9517 326.6031 143.5404 815.3838 935.7690 -812.1752
#> Paper Phones Storage Supplies Tables
#> 5019.2334 2825.5398 2878.9122 11.9729 -3654.4813
Explanation: Penjualan dengan kuantitas tertinggi terdapat pada Sub-Category Accessories
Diantara data transaksi ecommerce, terdapat beberapa barang yang terjual dengan jumlah barang lebih dari 2. Namun kita lebih tertarik untuk mengetahui berapa banyak transaksi yang menghasilkan keuntungan di atas rata-rata namun hanya terjual dengan jumlah barang yang kurang dari 2. Ketahuilah jumlah transaksi dengan kondisi tersebut!
r <- ecommerce[ecommerce$Quantity < 2 & ecommerce$Profit >
mean(ecommerce$Profit), c("Product.Name", "Profit")]
rpaste("Jumlah transaksi adalah",nrow(r))#> [1] "Jumlah transaksi adalah 22"
Explanation: Dari data di atas dapat diketahui jumlah transaksi berdasarkan kondisi tertentu dapat dilihat dari jumlah baris data atau rows yang berjumlah 22, jadi jumlah transaksi tersebut berjumlah 22
Di antara semua segmen pelanggan e-commerce, segmen manakah yang paling banyak menggunakan jenis pengiriman ‘Same Day’?
knitr::kable(table(ecommerce$Ship.Mode == "Same Day", ecommerce$Segment))| Consumer | Corporate | Home Office | |
|---|---|---|---|
| FALSE | 614 | 371 | 248 |
| TRUE | 40 | 21 | 28 |
Explanation: Dari data di atas dapat diketahui bahwa segmen yang paling banyak menggunakan jenis pengiriman ‘Same Day’ adalah dari pelanggan segmen Consumer dengan nilai 40
Jika kita menganalisis sub kategori dari kategori Peralatan Kantor (Office Supplies), sebutkan 5 subkategori terpopuler, dengan mempertimbangkan jumlah barang yang terjual dari setiap subkategori?
qty <- aggregate(x= Quantity ~ Category + Sub.Category,
data= ecommerce,
FUN= sum
)
qty_subcategory <- qty[order(qty$Quantity , decreasing = T),]
sum(qty$Quantity)#> [1] 5013
head(qty_subcategory,5)Explanation: Dari data di atas dapat diketahui bahwa jumlah barang yang telah terjual adalah 5013 items, dan jumlah barang dari 5 sub kategori terpopuler adalah Binders 883 items, Paper 767 items, Accessories 480 items, Furnishings 426 items, dan Art 406 items
Conclusion:
Sejak tahun 2020 dalam setahun US E-Commerce telah menjual total 37873 items dengan total keuntungan 25571.2181. US E-Commerce ini menjual produk dengan 3 kategori utama: Furniture, Office Supplies, dan Technology. Dari kategori ini, Perlengkapan Kantor atau ‘Office Supplies’ menghasilkan keuntungan tertinggi dengan nilai 13721.6223 dibandingkan dengan yang lain. Akan tetapi ironisnya, kerugian tertinggi dengan jumlah -3839.99 yang terjadi pada tanggal 11 April 2020 ditemukan berasal dari kategori ‘Technology’. Selain itu, kategori Teknologi juga memiliki total harga jual tertinggi dengan nilai 98483.68.
Pembeli yang membeli produk di US E-Commerce berasal dari segmen yang berbeda-beda, seperti: Consumer, Corporate dan Home Office. Segmen ‘Consumer’ memberikan jumlah keuntungan tertinggi dibandingkan dengan lainnya dengan 134119,21.
Pilihan pengiriman terdiri dari 4 jenis : First Class, Same day, Second class, dan Standard class. Berdasarkan data, dari semua segmen, sebagian besar memilih Standard Class sebagai pilihan pengirimannya. Segmen ‘Consumer’ merupakan segmen paling tinggi yang memilih mode Standard Class dan First Class, disusul oleh segmen ‘Corporate’ yang merupakan segmen paling tinggi memilih mode Second Class, kemudian mode Same Day adalah mode yang paling banyak dipilih oleh segmen Home Office.
Recommendation
Dari perhitungan di atas, menunjukkan bahwa ‘Technology’ menjual dengan nilai penjualan tertinggi tetapi kerugian maksimal yang kontradiktif juga berasal dari kategori Teknologi. Hal ini disebabkan karena diskon yang diberikan pada kategori teknologi terlalu tinggi (50%) tanpa memikirkan profitnya. Hitung dua kali sebelum memutuskan berapa persentase diskon yang akan diberikan.
Perlu meningkatkan target pasar di segmen ‘Corporate’ dan segmen ‘Home Office’, kita dapat memberi pelanggan lebih banyak diskon dengan mengambil kembali profit untuk Ecommerce. Berdasarkan perhitungan, pembeli paling banyak membeli dari kategori ‘Office Supplies’ dengan pembelian hampir dua hingga tiga kali lipat dari kategori lainnya.