Perkenalkan nama saya Bagas. Pada kesempatan kali ini, saya akan melakukan explanatory data analysis pada dataset retail. Explanatroy data analysis atau biasa disebut EDA adalah proses kritis uji investigasi awal pada sebuah data untuk mengidentifikasi pola, menemukan anomali, menguji hipotesis, dan memeriksa asumsi melalui statistik ringkasan dan representasi grafis (visual).
Data yang akan digunakan merupakan data penjualan dari sebuah perusahaan retaul yang kedepannya akan kita sebut dengan PT ABCDE. PT ABCDE merupakan perusahaan retail yang menjual berbagai jenis barang seperti Office Supllies, furniture, dan barang-barang teknologi. Perushaan menyediakan berbagai layanan distribusi. Segmen pelanggan yang dilayani PT ABCDE teridi dari corporate, home office, dan juga individual.
Pertama-tama, kita akan memanggil data yang tersimpan devices atau
storage kita. Karena data retail berbentuk csv atau comma-separated
values, kita akan menggunankan perintah read.csv untuk
memanggil data tersebut dan jangan lupa di assign ke object yang
diinginkan.
retail <- read.csv("data_input/retail.csv")
Tahapan selanjutannya adalah melakukan data inspection dengan memanggil sejumlah baris data set yang ingin di analysis
head(retail,n=5)
Lalu dengan menggunakan fungsi glimpse yang terdapat
dalam library dplyr, kita bisa melihat tipe data, jumlah baris,
jumlah kolom, nama kolom, dan value yang ada di setiap kolommnya.
glimpse(retail)
## Rows: 9,994
## Columns: 15
## $ Row.ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17…
## $ Order.ID <chr> "CA-2016-152156", "CA-2016-152156", "CA-2016-138688", "US…
## $ Order.Date <chr> "11/8/16", "11/8/16", "6/12/16", "10/11/15", "10/11/15", …
## $ Ship.Date <chr> "11/11/16", "11/11/16", "6/16/16", "10/18/15", "10/18/15"…
## $ Ship.Mode <chr> "Second Class", "Second Class", "Second Class", "Standard…
## $ Customer.ID <chr> "CG-12520", "CG-12520", "DV-13045", "SO-20335", "SO-20335…
## $ Segment <chr> "Consumer", "Consumer", "Corporate", "Consumer", "Consume…
## $ Product.ID <chr> "FUR-BO-10001798", "FUR-CH-10000454", "OFF-LA-10000240", …
## $ Category <chr> "Furniture", "Furniture", "Office Supplies", "Furniture",…
## $ Sub.Category <chr> "Bookcases", "Chairs", "Labels", "Tables", "Storage", "Fu…
## $ Product.Name <chr> "Bush Somerset Collection Bookcase", "Hon Deluxe Fabric U…
## $ Sales <dbl> 261.9600, 731.9400, 14.6200, 957.5775, 22.3680, 48.8600, …
## $ Quantity <int> 2, 3, 2, 5, 2, 7, 4, 6, 3, 5, 9, 4, 3, 3, 5, 3, 6, 2, 2, …
## $ Discount <dbl> 0.00, 0.00, 0.00, 0.45, 0.20, 0.00, 0.00, 0.20, 0.20, 0.0…
## $ Profit <dbl> 41.9136, 219.5820, 6.8714, -383.0310, 2.5164, 14.1694, 1.…
Dari penggunaan fungsi glimpse, kita dapat mengetahui bahwa data set retail terdiri dari 15 kolom dan 9.994 baris, yang kolom-kolomnya terdiri dari:
colSums(is.na(retail))
## Row.ID Order.ID Order.Date Ship.Date Ship.Mode Customer.ID
## 0 0 0 0 0 0
## Segment Product.ID Category Sub.Category Product.Name Sales
## 0 0 0 0 0 0
## Quantity Discount Profit
## 0 0 0
Dari hasil colSums(is.na(retail)) dapat disimpulkan
bahwa data retail tidak memiliki missing values.
Dari hasil inspeksi kita dapat menyimpulkan bahwa dataset retail :
Oleh sebab itu kita akan menghilankan kolom Row.ID, Order.ID, Customer.ID, Product.ID. Kita juga akan mengubah tipe data dari kolom Order.Date, Ship.Date, Ship.Mode, Segment, Category, dan Sub.Category.
Kemudian akan kita assign ke objek bernama
retail_clean
retail_clean <- retail %>%
select(-Row.ID , -Order.ID , -Customer.ID , -Product.ID) %>%
mutate(Order.Date = mdy(Order.Date),
Ship.Date = mdy(Ship.Date),
Ship.Mode = as.factor(Ship.Mode),
Segment = as.factor(Segment),
Category = as.factor(Category),
Sub.Category = as.factor(Sub.Category),
Year = year(Order.Date)
)
summary(retail_clean)
## Order.Date Ship.Date Ship.Mode
## Min. :2014-01-03 Min. :2014-01-07 First Class :1538
## 1st Qu.:2015-05-23 1st Qu.:2015-05-27 Same Day : 543
## Median :2016-06-26 Median :2016-06-29 Second Class :1945
## Mean :2016-04-30 Mean :2016-05-03 Standard Class:5968
## 3rd Qu.:2017-05-14 3rd Qu.:2017-05-18
## Max. :2017-12-30 Max. :2018-01-05
##
## Segment Category Sub.Category
## Consumer :5191 Furniture :2121 Binders :1523
## Corporate :3020 Office Supplies:6026 Paper :1370
## Home Office:1783 Technology :1847 Furnishings: 957
## Phones : 889
## Storage : 846
## Art : 796
## (Other) :3613
## Product.Name Sales Quantity Discount
## Length:9994 Min. : 0.444 Min. : 1.00 Min. :0.0000
## Class :character 1st Qu.: 17.280 1st Qu.: 2.00 1st Qu.:0.0000
## Mode :character Median : 54.490 Median : 3.00 Median :0.2000
## Mean : 229.858 Mean : 3.79 Mean :0.1562
## 3rd Qu.: 209.940 3rd Qu.: 5.00 3rd Qu.:0.2000
## Max. :22638.480 Max. :14.00 Max. :0.8000
##
## Profit Year
## Min. :-6599.978 Min. :2014
## 1st Qu.: 1.729 1st Qu.:2015
## Median : 8.666 Median :2016
## Mean : 28.657 Mean :2016
## 3rd Qu.: 29.364 3rd Qu.:2017
## Max. : 8399.976 Max. :2017
##
Dari hasil summary tersebut kita dapat melihat bahwa:
Total quantity product yang terjual selama tahun 2014-2017
sum(retail_clean$Quantity)
## [1] 37873
Total Sales selama tahun 2014-2017
sum(retail_clean$Sales)
## [1] 2297201
Total Profit Selamat tahun 2014-2017
sum(retail_clean$Profit)
## [1] 286397
Pertama-tama kita mau melihat total sales dari setiap segment
aggregate(Sales ~ Segment,
data = retail_clean,
FUN = sum)
Kita juga dapat melihat total sales tiap segment dari tahun ke tahun
sales_year <- aggregate(Sales ~ Year + Segment,
data = retail_clean,
FUN = sum)
sales_year
ggplot(sales_year, aes(x = Year, y = Sales)) +
geom_col(aes(fill = Segment), position = "dodge") +
scale_fill_brewer(palette = "Set2")
Dari visualisasi tersebut kita dapat mengetahui bahwa :
profit_year <- aggregate(Profit ~Year + Segment,
data = retail_clean,
FUN = sum)
head(profit_year,n=5)
ggplot(profit_year, aes(x = Year, y = Profit)) +
geom_col(aes(fill = Segment), position = "dodge") +
scale_fill_brewer(palette = "Set2")
Dari visualisasi tersebut kita dapat mengetahui bahwa :
Dari kedua visualisasi plot diatas kita sekilas dapat melihat bahwa sales berpengaruh terhadap profti dari perusahaan.
Hal tersebut bisa di buktikan dengan fungsi cor
Semakin mendekati 1 menunjukan siginifikansi dari kedua kolom. Tanda
- menggambarkan korelasi yang negatif atau berbanding
terbalik, apabila tidak ada tanda - maka korelasinya
positif
cor(retail_clean$Profit,retail_clean$Sales)
## [1] 0.4790643
Dari hasil tersebut dapat disimpulkan bahwa sales dan profit memiliki korelasi yang positif namun signifikansinya tidak terlalu kuat yaitu sebesar 0.48
Category apa yang paling banyak terjual dari tahun 2014 sampai 2017?
aggregate(Quantity ~ Category,
data = retail_clean,
FUN = sum)
Office suplies merupakan jenis category yang paling banyak terjual yaitu sebanyak 22906
Apakah office supplies juga yang menghasilkan profit terbanyak? mari kita lihat
aggregate(Profit ~Category,
data = retail_clean,
FUN = sum)
Ternyata walaupun office supplies paling banyak terjual secara quantity-nya, namun category technology menghasilkan profit terbesar selama tahun 2014-2017
Perusahaan retail tersebut tahun 2014- 2017 telah menjual produk sebanyak 37873 dengan nilai sales sebesar 2297201 dan menghasilkan profit sebesar 286397. Jenis produk yang di jual perusahaan terdiri dari 3 category yaitu furniture, office suplles, dan technology. Perusahaan retail memiliki 3 segment pasar yang terbagi kedalam segment consumer, home office, dan corporate.
Penjualan di setiap segmentnya memiliki kecenderungan meningkat dari tahun ke tahun dilihat dari sales dan profit tiap tahunnya, artinya perusahaan tersebut memiliki growth yang cukup baik. Sales dan profit terbesar diberikan oleh segment consumer. Office supplies merupakan category yang jumlah penjualan terbanyak secara quantity, namun category technology menghasilkan profit yang paling besar dari kedua category lainnya.