R語言聚類分析及可視化展示

2021-03-02 R友舍

聚類分析是發現數據集蔟或模式的數據探索技術。常用的聚類方法有基於劃分的聚類、基於層次的聚類、基於密度的聚類幾種。這篇文章主要介紹基於劃分的Kmeans聚類方法的實現過程。

Kmeans算法是一種非常常見的聚類算法,基本思想非常簡單,這裡只介紹聚類算法在R語言下的實現過程及可視化展現結果。

1.模擬數據聚類

Kmeans算法需要求解各變量的均值,因此它要求輸入的數據集必須為連續的書之行數據。在R語言中,只需要利用stats包中的kmeans函數就能實現kmeans聚類方法。stats包無需使用者再次安裝。

kmeans函數的具體形式如下:

kmeans(x, centers, iter.max = 10, nstart = 1)

x: 輸入的數據集

centers:選擇的聚類數或者初始的類中心

iter.max:最大的迭代次數

kmeans函數返回的結果如下:

cluster:返回的聚類判別結果

centers:最終的聚類中心

totss:總的方差

withinss:各組組內方差

tot.withinss:總的組內方差

betweenss:各組的組間方差

size:各組的樣本數

聚類結果的好壞可以通過組內方差與組間方差、總方差的關係來評價。其目的是儘可能的保證聚類後,各組內的數據進來同質、類與類間的數據儘量異質。因此,聚類後的數據,組內數據方差要儘可能的小,組間的方差要儘可能的大。也就是tot.withinss越小越好、betweenss(totss-tot.withinss)越大越好。進一步的,可以寫作F=betweenss/tot.withinss,當滿足F值越大,則可以認為聚類效果越好。

1.1首先模擬隨機數據集

df <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),

            matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))

colnames(df) <- c("x", "y")

head(df)

1.2對隨機數據集進行聚類

km.res <- kmeans(df, 2, nstart = 25)

km.res$cluster

1.2查看聚類後每組樣本量

km.res$size

[1] 49 51

1.3查看每組的類中心

km.res$centers

            x           y

1  0.98627113  0.94750468

2 -0.02258131 -0.04924449

1.4根據聚類結果,繪製樣本點與類中心

plot(df, col = km.res$cluster, pch = 19, frame = FALSE,

     main = "K-means with k = 2")

points(km.res$centers, col = 1:2, pch = 8, cex = 3)

1.5下面看看聚4類的結果

km.res <- kmeans(df, 4, nstart = 25)

km.res$cluster

km.res$size

plot(df, col = km.res$cluster, pch = 19, frame = FALSE,

     main = "K-means with k = 4")

points(km.res$centers, col = 1:4, pch = 8, cex = 3)

1.6kmeans所有返回結果

km.res

2.實際數據聚類結果

這裡選用R語言自帶的USArrests數據集,該數據的具體結構如下:

data("USArrests")

str(USArrests)

過濾掉所有缺失數據

df <- na.omit(USArrests)

head(df)

2.1描述性統計分析

desc_stats <- data.frame(

  Min = apply(df, 2, min), # 最小值

  Med = apply(df, 2, median), # 中位數

  Mean = apply(df, 2, mean), # 均值

  SD = apply(df, 2, sd), # 標準差

  Max = apply(df, 2, max) # 最大值

)

desc_stats <- round(desc_stats, 1)

head(desc_stats)

2.2聚類

聚類前先對數據進行標準化處理

df<-scale(df)

利用factoextra包的fviz_nbclust() 函數尋找最佳的聚類數

install.packages('factoextra')

library(factoextra)

set.seed(123)

fviz_nbclust(df, kmeans, method = "wss") +

  geom_vline(xintercept = 4, linetype = 2)



從圖形結果看,曲線在K=4的節點上,曲線趨勢趨於平緩,因此可以選擇聚4類。

set.seed(123)

km.res <- kmeans(df, 4, nstart = 25)

print(km.res)

2.3聚類中心

aggregate(USArrests, by=list(cluster=km.res$cluster), mean)

2.4結果展現

一種展現方法是利用factoextra包的fviz_cluster函數實現

fviz_cluster(km.res, data = df)

調整frame.type參數,讓蔟的形狀更美觀

fviz_cluster(km.res, data = df,frame.type = "t")

調整橢圓透明度與大小

fviz_cluster(km.res, data = df, frame.type = "t", frame.alpha = 0, frame.level = 0.7)

只顯示樣本文本內容

fviz_cluster(km.res, data = df, frame.type = "t", frame.alpha = 0, frame.level = 0.7, geom = "text")

當然,還可以通過cluster包的clusplot進行聚類結果的可視化展現。

install.packages('cluster')

library(cluster)

clusplot(scale(USArrests), km.res$cluster,  main = "Cluster plot",

         color=TRUE, labels = 2, lines = 0)







相關焦點

  • R語言與Tableau集成之可視化應用
    作者 | CDA數據分析師Tableau是一款非常棒的數據可視化商業軟體,通過拖拉拽的方式迅速地實現數據可視化。而且該軟體可以連接任何一種資料庫,在處理大型數據時一點都不遜色。缺點是其無法從事數據分析和挖掘工作,幸運的是,從Tableau的8.0開始,Tableau與R語言打通,可以在Tableau中運行R腳本,從而將R語言的分析或挖掘結果在Tableau中展示。如何實現Tableau和R語言的聯手繪製可視化圖表呢?
  • R語言從入門到精通:Day15(聚類分析)
    上次推文的結尾預告了這一次的內容是關於聚類分析的,聚類分析廣泛用於包括生物學在內的諸多領域。
  • R語言學習筆記之聚類分析
    taoyan:偽碼農,R語言愛好者,愛開源。
  • 聚類分析中的可視化
    問題提出當數據沒有標籤或者有少量標籤的時候,我們需要使用聚類分
  • 初見|-聚類分析原理及R語言的實現
    聚類分析是非常重要的,這裡給出了一些聚類分析的基本原理以及R語言的實現(如果只是想要看聚類分析的R語言實現,直接到Q6
  • 技術貼 | R語言:組學關聯分析和pheatmap可視化
    舉例展示R語言組學關聯分析的方法。宏基因組數據以KO-樣品豐度表為例。代謝組數據以metabolite-樣品豐度表為例。基本方法是用R語言psych包corr.test函數進行兩組數據的相關分析,結果經格式化後用pheatmap可視化得熱圖。一、模擬輸入 1.
  • 聚類分析原理和實操
    下文將分4個模塊為大家介紹聚類分析:聚類分析的應用場景聚類分析的K-Means 算法原理聚類分析代碼-輸出聚類中心聚類分析代碼-可視化如何得到一個好的聚類分析結果= pd.concat([r2,r1],axis=1)r.columns = list(data.columns)+[u'所屬類別數目']r聚類分析的結果輸出如下:
  • R語言實現meta分析過程中的可視化展示
    今天我們給大家介紹一個在R語言中進行meta分析的工具metafor包。我們通過這個包把相應的meta分析的常規的一些圖為大家介紹下。1. 森林圖,主要是對研究的一致性進行評估的可視化展示形式,以豎線為界,總結結果在線左認為是研究的因素降低,或者對研究的因素不利。此處我們使用此包自帶的卡介苗抵抗肺結核(TB)的研究數據進行森林他繪製。
  • 【語言班】R語言數據分析與可視化高級研修班(4.26-29)
    R語言是用於數據分析、數據可視化的高級程式語言,其功能包括:數據存儲和處理、科學計算工具;能夠進行幾乎所有的統計分析;內置豐富便捷的數據可視化功能
  • R語言學習筆記之相關性矩陣分析及其可視化
    rcorr(x, type = c(「pearson」,「spearman」))。library(Hmisc)#加載包res2 <- rcorr(as.matrix(mydata))res2#可以用res2$r、res2$P來提取相關係數以及顯著性p-valueres2$r
  • R語言可視化之UpSetR包
    該數據集展示的是電影名(name)、發行時間(ReleaseDate)以及電影類型,多了去了就不詳講了,自個可以看去。UpsetR繪製集合可視化圖形使用函數upset()。解釋一下上面部分參數:nsets: 顧名思義,就是展示幾個集合,movies數據集由20幾個集合,不可能全部展示,另外從圖中可以看出,這6個集合應該不是按順序選擇的。
  • R語言天氣可視化應用
    所以,對於一個應用來說,一種通用的語言並不一定是最好的解決方案,如果能實現多種語言的結合,那麼你做出來的應用可以很酷,很不一樣!對於本文要介紹的 每日中國天氣 這個新浪微博應用,就是一種多語言混編的實現。項目介紹這個項目的出發點很簡單,就是通過可視化技術,展示中國每個省份的天氣情況,給準備旅遊的朋友,提供一種出行的提示。
  • R語言信息可視化——文字雲
    這一篇跟大家分享R語言信息可視化——文字雲。R語言可以輕鬆處理信息可視化,並且很早就有專用的信息可視化包——WordCloud。
  • 數據可視化之R語言
    分類數據的可視化使用條形圖、點圖、柱形圖、脊柱圖、馬賽克圖、餅圖及四折圖連續數據的可視化使用箱線圖、直方圖、散點圖及其變種、帕累託圖==============================================一、分類數據的可視化
  • R語言之實現K-mean聚類算法
    我們以R基礎包自帶的鳶尾花(Iris)數據進行聚類分析的演示。利用R語言的K均值聚類函數kmeans(),進行聚類,首先我們介紹下kmeans()的構成官方的解釋查看代碼:?kmeans如圖:我們主要用的參數是:X:我們要用來聚類的數據,作為一個矩陣輸入。Centers:我們要聚類的數量,需要自己進行填寫。
  • R語言數據可視化ggplot2包
    ggplot2是R語言最為強大的作圖軟體包,有著自成一派的可視化理念,數據可視化是數據分析的重要一步,讓我們通過由淺入深的掌握數據可視化的精髓。
  • 數據可視化完美指南-R-python
    可視化架構# Librarieslibrary(tidyverse)## -- Attaching packages -- tidyverse 1.2.1 --## √ ggplot2 3.2.0 √ purrr 0.3.2## √ tibble 2.1.3 √ dplyr 0.8.3## √ tidyr
  • 什麼是R語言
    簡單地總結來說,R語言有以下特點:免費獲取全面的統計研究平臺頂尖水準製圖功能,複雜數據可視化交互式數據分析從各種類型的數據源導入數據編寫新的統計方法,易於擴展先進的統計計算例程各種GUI(Graphical UserInterface, 圖形用戶界面)工具通過菜單和對話框提供與R語言同等的功能
  • Day7:R語言課程 (R語言進行數據可視化)
    程式語言通常有辦法允許多次執行代碼,或者在「循環」中執行。雖然R語言也有「循環」,但有些函數更直接,例如apply()函數map()族和函數族。map()族比apply()更直觀,因此主要學習map()。
  • 使用R語言劍指商業數據分析
    【CDA數據分析師周末集訓-R語言】以CDA數據分析師標準大綱要求從資料庫管理(Mysql)—統計理論方法—數據分析軟體應用(R)—數據挖掘和機器學習(R)—數據可視化(ggplot,echartR等)整套數據分析流程技術系統講解,還將結合量化投資、金融、銀行、電信等行業真實需求出發全部用實際案例教學來使所學項目課程更能符合企業要求。