#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)

1 Eksploratory Data Analysis

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.

2 Clustering

2.1 Mencari nilai K Optimum

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

3 K-Means clustering

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)

3.1 Cluster profiling

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

4 Visualisai

#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))

5 Visualization

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))

6 Visualization

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

7 Jumlah barang terjual paling banyak berdasarkan cluster (Keseluruhan Produk)

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")