pacman::p_load(dplyr, ggplot2, readr, FactoMineR, factoextra)
# flexclust 


【A】批發商資料集

W = read.csv('../unit09/data/wholesales.csv')
W$Channel = factor( paste0("Ch",W$Channel) )
W$Region = factor( paste0("Reg",W$Region) )
W[3:8] = lapply(W[3:8], log, base=10)
summary(W)
 Channel    Region        Fresh            Milk         Grocery     
 Ch1:298   Reg1: 77   Min.   :0.477   Min.   :1.74   Min.   :0.477  
 Ch2:142   Reg2: 47   1st Qu.:3.495   1st Qu.:3.19   1st Qu.:3.333  
           Reg3:316   Median :3.930   Median :3.56   Median :3.677  
                      Mean   :3.792   Mean   :3.53   Mean   :3.666  
                      3rd Qu.:4.229   3rd Qu.:3.86   3rd Qu.:4.028  
                      Max.   :5.050   Max.   :4.87   Max.   :4.968  
     Frozen     Detergents_Paper   Delicassen   
 Min.   :1.40   Min.   :0.477    Min.   :0.477  
 1st Qu.:2.87   1st Qu.:2.409    1st Qu.:2.611  
 Median :3.18   Median :2.912    Median :2.985  
 Mean   :3.17   Mean   :2.947    Mean   :2.895  
 3rd Qu.:3.55   3rd Qu.:3.594    3rd Qu.:3.260  
 Max.   :4.78   Max.   :4.611    Max.   :4.681  



【B】使用兩個區隔變數做分群

hc = W[,3:4] %>% scale %>% dist %>% hclust
plot(hc)
rect.hclust(hc, k=5, border="red")

W$group = cutree(hc, k=5) %>% factor
ggplot(W, aes(x=Fresh, y=Milk, col=group)) +
  geom_point(size=3, alpha=0.5) + 
  theme_light()



【C】使用六個區隔變數做分群

hc = W[,3:8] %>% scale %>% dist %>% hclust
plot(hc)
k =9
rect.hclust(hc, k=k, border="red")

W$group = factor(cutree(hc, k=k))
fviz_dend(
  hc, k=k, show_labels=F, rect=T, rect_fill=T,
  labels_track_height=0,
  palette="ucscgb", rect_border="ucscgb")



【D】尺度縮減 (主成分分析, PCA - Principle Component Analysis)

W[,3:8] %>% PCA(graph=F) %>% fviz_pca_biplot(
  label="var", col.ind=W$group,
  pointshape=19, mean.point=F,
  addEllipses=T, ellipse.level=0.7,
  ellipse.type = "convex", palette="ucscgb",
  repel=T
  )



💡 學習重點:
  ■ 集群分析的基本觀念
  ■ 距離矩陣:Distance Matrix
  ■ 層級式集群分析:Hierarchical Cluster Analysis
  ■ 樹狀圖(Dendrogram)的判讀
  ■ 依據樹狀圖決定要分多少群
  ■ 以群組平均值檢視各族群的屬性