資料分佈圖簡介
中醫上講看病四診法為:望聞問切。而資料分析師分析資料的過程也有點相似,我們需要望:看看資料長什麼樣;聞:仔細分析資料是否合理;問:針對前兩步工作蒐集到的問題與業務方交流;切:結合業務方反饋的結果和專案需求進行資料分析。
"望"的方法可以認為就是製作資料視覺化圖表的過程,而資料分佈圖無疑是非常能反映資料特徵(使用者症狀)的。R語言提供了多種圖表對資料分佈進行描述,本文接下來將逐一講解。
繪製基本直方圖
本例選用如下測試集:
直方圖的橫軸為繫結變數區間分隔的取值範圍,縱軸則表示變數在不同變數區間上的頻數。繪製時只需將基函式的美學特徵集中配置好需要分析的變數,然後建立新的直方圖圖層即可。R語言示例程式碼如下:
# 基函式 ggplot(faithful, aes(x = waiting)) + # 直方圖函式:binwidth設定組距 geom_histogram(binwidth = 5, fill = "lightblue", colour = "black")
執行結果:
基於分組的直方圖
本例選用如下測試集:
直方圖的分組圖和本系列前面一些博文中講的一些分組圖不同,它不能進行水平方向的堆積 - 這樣看不出頻數變化趨勢;也不能進行垂直方向的堆積 - 這樣同樣看不出趨勢。這裡採用一種新的堆積方法:重疊堆積,R語言實現程式碼如下:
# 預處理:將smoke變數轉換為因子型別 birthwt$smoke = factor(birthwt$smoke) # 基函式:x設定目標變數 ggplot(birthwt, aes(x = bwt, fill = smoke)) + # 直方圖函式:position設定堆積模式為重疊 geom_histogram(position = "identity", alpha = 0.4)
執行結果:
也可以採用分面的方法,R語言實現程式碼如下:
# 預處理1:將smoke變數轉換為因子型別 birthwt$smoke = factor(birthwt$smoke) # 預處理2:改變因子水平名稱 birthwt$smoke = revalue(birthwt$smoke, c("0" = "No Smoke", "1" = "Smoke")) # 基函式 ggplot(birthwt, aes(x = bwt)) + # 直方圖函式 geom_histogram(fill = "lightblue", colour = "black") + # 分面函式:縱向分面 facet_grid(smoke ~ .)
執行結果:
繪製密度曲線
本例選用如下測試集:
密度曲線表達的意思和直方圖很相似,因此密度曲線的繪製方法和直方圖也幾乎是相同的。區別僅在於密度曲線的橫軸要繫結到連續型變數,另外繪製函式的名字不同。R語言示例程式碼如下:
# 預處理:將smoke變數轉換為因子型別 birthwt$smoke = factor(birthwt$smoke) # 基函式:x設定目標變數,fill設定填充色 ggplot(birthwt, aes(x = bwt, fill = smoke)) + # 密度曲線函式:alpha設定填充色透明度 geom_density(alpha = 0.3)
執行結果:
繪製基本箱線圖
本例選用如下測試集:
箱線圖是一種常用資料分佈圖,下圖表示了這種圖中各元素的意義:
繪製方法是在基函式中將變數分組繫結到橫軸,變數本身繫結到縱軸。此外,為了美觀也可以將分組繫結到fill變數並設定調色盤。R語言示例程式碼如下:
# 基函式 ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱線圖函式 geom_boxplot() + # 顏色標尺 scale_fill_brewer(palette = "Pastel2")
執行結果:
往箱線圖新增槽口和均值
在上一節繪製的基本箱線圖之上,還能進一步繪製以展示更多資訊。
其中最常見的是為箱子新增槽口,它能更清晰的表示中位數的位置。R語言實現程式碼如下:
# 基函式 ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱線圖函式 geom_boxplot(notch = TRUE) + # 顏色標尺 scale_fill_brewer(palette = "Pastel2")
執行結果:
通過stat_summary()函式,還可以在箱線圖中標記均值點。R語言實現程式碼如下:
# 基函式 ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱線圖函式 geom_boxplot(notch = TRUE) + # 顏色標尺 scale_fill_brewer(palette = "Pastel2")
執行結果:
繪製2D等高線
本例選用如下測試集:
繪製2D等高線主要是呼叫stat_density()函式。這個函式會給出一個基於資料的二維核密度估計,然後我們可基於這個估計值來判斷各樣本點的"等高"性。接下來首先給出各資料點及等高線的繪製方法,R語言實現程式碼如下:
# 基函式 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 散點圖函式 geom_point() + # 密度圖函式 stat_density2d()
執行結果:
也可以通過設定密度函式美學特徵集中的colour引數來給不同密度的等高線著色,R語言實現程式碼如下:
# 基函式 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 密度圖函式:colour設定等高線顏色 stat_density2d(aes(colour = ..level..))
執行結果:
繪製2D密度圖
本例選用如下測試集:
等高線圖也是密度圖的一種,因此繪製密度圖和等高線圖用的是同一個函式:stat_density(),只是它們傳入的引數不同。首先繪製經典柵格密度圖,R語言實現程式碼如下:
# 基函式 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 密度圖函式:fill設定填充顏色資料為密度,geom設定繪製柵格圖 stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE)
執行結果:
也可以將密度變數對映到透明度來渲染,R語言實現程式碼如下:
ggplot(faithful, aes(x = eruptions, y = waiting)) + # 散點圖函式 geom_point() + # 密度圖函式:alpha設定填充透明度資料為密度,geom設定繪製柵格圖 stat_density2d(aes(alpha = ..density..), geom = "raster", contour = FALSE)
執行結果: