#library
library(dplyr)
library(tidyr)
library(GGally)
library(gridExtra)
library(factoextra)
library(FactoMineR)
library(plotly)
library(tidyverse)
library(scales)
tokped <- read.csv("Excel/trial-tokped.csv")
tokped
glimpse(tokped)
#> Rows: 3,288
#> Columns: 13
#> $ nama_produk <chr> "obat herbal Huo Xiang Zheng Qi Kou Fu Ye", "Vitamin C ~
#> $ brand <chr> "Huo Xiang Zheng", "enervon c", "albuforce", "imboost",~
#> $ terjual <int> 39900, 27000, 26500, 25400, 22100, 16900, 15500, 15300,~
#> $ top_brand <chr> "over_1000", "over_1000", "over_1000", "over_1000", "ov~
#> $ bintang <dbl> 4.9, 5.0, 4.9, 4.9, 5.0, 5.0, 4.7, 5.0, 5.0, 4.9, 5.0, ~
#> $ jumlah_ulasan <chr> "559", "1238", "204", "4237", "1867", "3453", "706", "1~
#> $ jumlah_diskusi <chr> "10", "150", "107", "383", "74", "124", "62", "80", "53~
#> $ nama_toko <chr> "Snoopyz Online Shop", "Ny. Rudy", "kuaile_shop14", "So~
#> $ kondisi <chr> "Baru", "Baru", "Baru", "Halal", "Baru", "Baru", "Baru"~
#> $ berat <dbl> 140, 150, 2, 100, 20, 100, 50, 80, 10, 100, 30, 150, 20~
#> $ etalase <chr> "Obat herbal", "Vitamin", "SUPLEMENT / HERBAL", "Sistem~
#> $ harga <chr> "41000", "70000", "5000", "42140", "40000", "275000", "~
#> $ amount <chr> "1635900000", "1890000000", "132500000", "1070356000", ~
#merubah format data
tokped_clean <- tokped %>%
mutate(jumlah_ulasan = as.numeric(jumlah_ulasan),
jumlah_diskusi = as.numeric(jumlah_diskusi),
harga = as.numeric(harga),
top_brand = as.factor(top_brand),
brand = as.factor(brand))
str(tokped_clean)
#> 'data.frame': 3288 obs. of 13 variables:
#> $ nama_produk : chr "obat herbal Huo Xiang Zheng Qi Kou Fu Ye" "Vitamin C / enervon c / enervon c 30 / original" "albuforce kapsul seperti vipalbumin vip albumin" "Imboost Tablet Daya Tahan Tubuh - 1 Strip @10 Tablet" ...
#> $ brand : Factor w/ 74 levels "","akiyo","alanabi",..: 26 16 4 27 27 47 32 46 62 27 ...
#> $ terjual : int 39900 27000 26500 25400 22100 16900 15500 15300 14600 14200 ...
#> $ top_brand : Factor w/ 2 levels "over_1000","under_1000": 1 1 1 1 1 1 1 1 1 1 ...
#> $ bintang : num 4.9 5 4.9 4.9 5 5 4.7 5 5 4.9 ...
#> $ jumlah_ulasan : num 559 1238 204 4237 1867 ...
#> $ jumlah_diskusi: num 10 150 107 383 74 124 62 80 53 74 ...
#> $ nama_toko : chr "Snoopyz Online Shop" "Ny. Rudy" "kuaile_shop14" "Soho Global" ...
#> $ kondisi : chr "Baru" "Baru" "Baru" "Halal" ...
#> $ berat : num 140 150 2 100 20 100 50 80 10 100 ...
#> $ etalase : chr "Obat herbal" "Vitamin" "SUPLEMENT / HERBAL" "Sistem Kekebalan Tubuh" ...
#> $ harga : num 41000 70000 5000 42140 40000 ...
#> $ amount : chr "1635900000" "1890000000" "132500000" "1070356000" ...
tokped_clean
#melihat missing value
colSums(is.na(tokped_clean))
#> nama_produk brand terjual top_brand bintang
#> 0 0 0 0 26
#> jumlah_ulasan jumlah_diskusi nama_toko kondisi berat
#> 26 1229 0 0 0
#> etalase harga amount
#> 0 163 0
#mengganti nilai NA dengan 0
tokped_clean <- tokped_clean %>%
select(!"jumlah_diskusi") %>%
drop_na()
anyNA(tokped_clean)
#> [1] FALSE
#mengambil kolom numerik
tokped_num <- tokped_clean %>%
select_if(is.numeric) %>%
as.data.frame()
boxplot(tokped_num)
Terdapat anomali data pada harga, sehingga dapat dikatakan ada produk dengan harga tinggi
Scaling Data
tokped_scale <- scale(tokped_num) %>%
as.data.frame()
head(tokped_scale)
ggcorr(tokped_scale,low = 'green', high = 'darkblue',
label = TRUE, label_size = 2.5, hjust = 1, layout.exp = 3)
Dari hasil grafik korelasi diatas, variabel yang memiliki hubungan kuat adalah terjual dengan jumlah_ulasan,disamping itu berat dari produk juga memiliki hubungan yang cukup kuat. Sedangkan terjual juga memiliki hubungan degan berat dan harga tetapi memiliki hubungan yang rendah atau dapat dikatakan berat dan harga tidak terlalu mempengaruhi untuk produk tersebut terjual.
fviz_nbclust(tokped_scale, kmeans, method = "wss") + labs(subtitle = "wss method")
Dari grafik elbow diatas cluster yang cocok untuk digunakan dengan dataset yang kita miliki adalah dengan menggunakan 3 cluster
set.seed(100)
tokped_means <- kmeans(tokped_scale,3)
Interpretasi
#memasukan label cluster ke data scale
tokped_scale$cluster <- as.factor(tokped_means$cluster)
head(tokped_scale)
tokped_scale %>%
group_by(cluster) %>%
summarise_all(mean)
Dengan menggunakan nilai rata-rata dari setiap cluster, kita dapat mengetahui karakteristik dari tiap cluster
Cluster 1 : Merupakan barang yang sering terjual dan memiliki penilaian bintang yang tertinggi dan sering diulas oleh pembeli dan memiliki berat yang paling ringan dan harga yang paling murah
Cluster 2 : CLuster 2 merupakan produk dengan tingkat penjualan tidak terlalu tinggi dan penilaian bintang terrendah dan jarang diulas oleh pembeli dan memiliki harga lebih tinggi dari cluster 1
Cluster 3 : merupakan produk yang paling rendah tingkat penjualannya tetapi memiliki bintang yang tinggi dan berat yang tinggi dan harga dari produk tersebut juga cenderung degan harga yang tinggi dengan penilaian bintang yang tinggi
#Visualisasi CLustering
fviz_cluster(object = tokped_means,
data = tokped_scale[,-6])
# Profiling
tokped_clean$cluster <- tokped_scale$cluster
tokped_clean
Dari hasil visualisasi diatas terdapat produk yang memiliki nilai anomali yaitu pada cluster 1 dan cluster 3, dan produk tersebut adalah :
# Produk Anomali
anomali <- tokped_clean[c(4,6,13,3,3018,1207,981),]
anomali %>%
mutate(terjual = comma(terjual),
jumlah_ulasan = comma(jumlah_ulasan),
harga = comma(berat),
amount = as.numeric(amount),
amount = comma(amount))
library(ggplot2)
top_brand <- tokped_clean %>%
filter(top_brand == "over_1000") %>%
mutate(amount = as.numeric(amount)) %>%
select(brand,terjual,amount)
brand <- top_brand %>%
group_by(brand) %>%
summarise(terjual = sum(terjual)) %>%
arrange(desc(terjual))
brand2 <- top_brand %>%
group_by(brand) %>%
summarise(amount = sum(amount)) %>%
arrange(desc(amount))
#vlookup
merg <- merge(brand, brand2, by.x = "brand", by.y = "brand", all.x = TRUE)
merg %>%
arrange(desc(terjual))
ggplot(brand[1:30,], aes(x = terjual, y = reorder(brand,terjual)))+
geom_col(aes(fill = terjual))+
scale_fill_gradient(low = "#030000", high = "#b00404")+
labs(title = "Produk Terjual Category Sistem Kekebalan Tubuh",
x = "",
y = "",
fill = "Produk",
caption = "Source: Tokopedia cut off 7/16/2021")
ggplot(brand2[1:30,], aes(x = amount, y = reorder(brand, amount)))+
geom_col(aes(fill = amount))+
labs(title = "Amount Produk Terjual Category Sistem Kekebalan Tubuh",
x = "",
y = "",
fill = "Produk",
caption = "Source: Tokopedia cut off 7/16/2021")
Jumlah masing masing cluster
table(tokped_clean$cluster)
#>
#> 1 2 3
#> 2031 388 682
prop.table(table(tokped_clean$cluster))
#>
#> 1 2 3
#> 0.6549500 0.1251209 0.2199291
tokped_sum <- tokped_clean %>%
group_by(cluster) %>%
summarise(jumlah_terjual = sum(terjual),
jumlah_harga = sum(harga)) %>%
mutate(prop_terjual = prop.table(jumlah_terjual)) %>%
mutate(prop_harga = prop.table(jumlah_harga))
tokped_sum %>%
mutate(jumlah_terjual = comma(jumlah_terjual),
jumlah_harga = comma(jumlah_harga))
Cluster Herbamuno
tokped_clean %>%
filter(brand == "herbamuno")