獨家 | 一文讀懂R中的探索性資料分析(附R程式碼)
探索性資料分析(EDA)是資料專案的第一步。我們將建立一個程式碼模板來實現這一功能。 簡介 EDA由單變數(1個變數)和雙變數(2個變數)分析組成。在這篇文章中,我們將回顧一些我們在案例分析中使用的功能: ● 第1步:取得並瞭解資料; ● 第2步:分析分類變數; ● 第3步:分析數值變數; ● 第4步:同時分析數值和分類變數。 基本EDA中的一些關鍵點: ● 資料型別 ● 異常值 ● 缺失值 ● 數值和分類變數的分佈(數字和圖形的形式) 分析結果的型別 結果有兩種型別:資訊型或操作型。 ● 資訊型:例如繪圖或任何長變數概要,我們無法從中過濾資料,但它會立即為我們提供大量資訊。大多數用於EDA階段。 ● 操作型:這類結果可直接用於資料工作流(例如,選擇缺失比例低於20%的變數)。最常用於資料準備階段。 準備開始 如果您沒有這些擴充套件包,請刪除‘#’來匯入:
install.packages("tidyverse")
install.packages("funModeling")
install.packages("Hmisc")
funModeling已釋出更新版本的Ago-1,請更新! 現在載入所需的程式包 library(funModeling) library(tidyverse) library(Hmisc)
tl; dr(程式碼) 使用以下函式一鍵執行本文中的所有函式:
basic_eda <- function(data) { glimpse(data) df_status(data) freq(data) profiling_num(data) plot_num(data) describe(data) }
替換data為您的資料,然後就可以啦!
basic_eda(my_amazing_data)
建立示例資料: 使用heart_disease資料(來自funModeling包)。為了使本文容易理解,我們只選取四個變數。
data=heart_disease %>% select(age, max_heart_rate, thal, has_heart_disease)
第一步:瞭解資料 統計第一個例子中觀測(行)和變數的數量,並使用head顯示資料的前幾行。
glimpse(data)
Observations: 303
Variables: 4
$ age63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, ...
$ max_heart_rate150, 108, 129, 187, 172, 178, 160, 163, 147,...
$ thal6, 3, 7, 3, 3, 3, 3, 3, 7, 7, 6, 3, 6, 7, 7,...
$ has_heart_diseaseno, yes, yes, no, no, no, yes, no, yes, yes,...
獲取有關資料型別,零值,無窮數和缺失值的統計資訊:
df_status(data)
variable q_zeros p_zeros q_na p_na q_inf p_inf type unique
1 age 0 0 0 0.00 0 0 integer 41
2 max_heart_rate 0 0 0 0.00 0 0 integer 91
3 thal 0 0 2 0.66 0 0 factor 3
4 has_heart_disease 0 0 0 0.00 0 0 factor 2
df_status會返回一個表格,因此很容易篩選出符合某些條件的變數,例如: ● 有至少80%的非空值(p_na < 20) ● 有少於50個唯一值(unique <= 50) 建議: ● 所有變數都是正確的資料型別嗎? ● 有含有很多零或空值的變數嗎? ● 有高基數變數嗎? 更多相關資訊請瀏覽: https://livebook.datascienceheroes.com/exploratory-data-analysis.html
第二步:分析分類變數 freq 函式自動統計資料集中所有因子或字元變數:
freq(data)
thal frequency percentage cumulative_perc
1 3 166 54.79 55
2 7 117 38.61 93
3 6 18 5.94 99
42 0.66 100
has_heart_disease frequency percentage cumulative_perc
1 no 164 54 54
2 yes 139 46 100
[1] "Variables processed: thal, has_heart_disease"
建議: ● 如果freq用於一個變數 -freq(data$variable),它會生成一個表格。這對於處理高基數變數(如郵政編碼)非常有用。 ● 將圖表以jpeg格式儲存到當前目錄中: freq(data, path_out = ".") ● 分類變數的所有類別都有意義嗎? ● 有很多缺失值嗎? ● 經常檢查絕對值和相對值。 更多相關資訊請瀏覽: https://livebook.datascienceheroes.com/exploratory-data-analysis.html
第三步:分析數值變數 我們將看到:plot_num和profiling_num兩個函式,它們都自動統計資料集中所有數值/整數變數:
- 繪製圖表
plot_num(data)
將圖表匯出為jpeg格式:
plot_num(data, path_out = ".")
建議: ● 試著找出極度偏態分佈的變數。 ● 作圖檢查任何有異常值的變數。 更多相關資訊請瀏覽: https://livebook.datascienceheroes.com/exploratory-data-analysis.html
- 定量分析 profiling_num 自動統計所有數值型/整型變數:
data_prof = profiling_num(data)
variable mean std_dev variation_coef p_01 p_05 p_25 p_50 p_75 p_95
1 age 54 9 0.17 35 40 48 56 61 68
2 max_heart_rate 150 23 0.15 95 108 134 153 166 182
p_99 skewness kurtosis iqr range_98 range_80
1 71 -0.21 2.5 13 [35, 71] [42, 66]
2 192 -0.53 2.9 32 [95.02, 191.96] [116, 176.6]
建議: ● 嘗試根據其分佈描述每個變數(對報告分析結果也很有用)。 ● 注意標準差很大的變數。 ● 選擇您最熟悉的統計指標:data_prof %>% select(variable, variation_coef, range_98):variation_coef得到較大值可能提示異常值。range_98顯示絕大部分數值的範圍。 更多相關資訊請瀏覽: https://livebook.datascienceheroes.com/exploratory-data-analysis.html
第四步:同時分析數值和分類變數 使用Hmisc包的describe。
library(Hmisc) describe(data)
data
4 Variables 303 Observations
---------------------------------------------------------------------------
age
n missing distinct Info Mean Gmd .05 .10
303 0 41 0.999 54.44 10.3 40 42
.25 .50 .75 .90 .95
48 56 61 66 68
lowest : 29 34 35 37 38, highest: 70 71 74 76 77
---------------------------------------------------------------------------
max_heart_rate
n missing distinct Info Mean Gmd .05 .10
303 0 91 1 149.6 25.73 108.1 116.0
.25 .50 .75 .90 .95
133.5 153.0 166.0 176.6 181.9
lowest : 71 88 90 95 96, highest: 190 192 194 195 202
---------------------------------------------------------------------------
thal
n missing distinct
301 2 3
Value 3 6 7
Frequency 166 18 117
Proportion 0.55 0.06 0.39
---------------------------------------------------------------------------
has_heart_disease
n missing distinct
303 0 2
Value no yes
Frequency 164 139
Proportion 0.54 0.46
---------------------------------------------------------------------------
這對於快速瞭解所有變數非常有用。但是當我們想要使用統計結果來改變我們的資料工作流時,這個函式不如freq和profiling_num好用。 建議: ● 檢查最小值和最大值(異常值)。 ● 檢查分佈(與之前相同)。
原文釋出時間為:2018-11-20 本文作者:Pablo Casas
本文來自雲棲社群合作伙伴“資料派THU”,瞭解相關資訊可以關注“資料派THU”。