數據分布圖簡介
中醫上講看病四診法為:望聞問切。而數據分析師分析數據的過程也有點相似,我們需要望:看看數據長什么樣;聞:仔細分析數據是否合理;問:針對前兩步工作搜集到的問題與業務方交流;切:結合業務方反饋的結果和項目需求進行數據分析。
"望"的方法可以認為就是制作數據可視化圖表的過程,而數據分布圖無疑是非常能反映數據特征(用戶症狀)的。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)
運行結果: