探索性數(shù)據(jù)分析(EDA)是數(shù)據(jù)項(xiàng)目的第一步。我們將創(chuàng)建一個(gè)代碼模板來(lái)實(shí)現(xiàn)這一功能。
簡(jiǎn)介
EDA由單變量(1個(gè)變量)和雙變量(2個(gè)變量)分析組成。在這篇文章中,我們將回顧一些我們?cè)诎咐治鲋惺褂玫墓δ埽?/p>
第1步:取得并了解數(shù)據(jù);
第2步:分析分類變量;
第3步:分析數(shù)值變量;
第4步:同時(shí)分析數(shù)值和分類變量。
基本EDA中的一些關(guān)鍵點(diǎn):
數(shù)據(jù)類型
異常值
缺失值
數(shù)值和分類變量的分布(數(shù)字和圖形的形式)
分析結(jié)果的類型
結(jié)果有兩種類型:信息型或操作型。
信息型:例如繪圖或任何長(zhǎng)變量概要,我們無(wú)法從中過(guò)濾數(shù)據(jù),但它會(huì)立即為我們提供大量信息。大多數(shù)用于EDA階段。
操作型:這類結(jié)果可直接用于數(shù)據(jù)工作流(例如,選擇缺失比例低于20%的變量)。最常用于數(shù)據(jù)準(zhǔn)備階段。
準(zhǔn)備開(kāi)始
如果您沒(méi)有這些擴(kuò)展包,請(qǐng)刪除‘#’來(lái)導(dǎo)入:
# install.packages("tidyverse")
# install.packages("funModeling")
# install.packages("Hmisc")
funModeling已發(fā)布更新版本的Ago-1,請(qǐng)更新!
現(xiàn)在加載所需的程序包
library(funModeling)
library(tidyverse)
library(Hmisc)
tl; dr(代碼)
使用以下函數(shù)一鍵運(yùn)行本文中的所有函數(shù):
basic_eda <- function(data)
{
glimpse(data)
df_status(data)
freq(data)
profiling_num(data)
plot_num(data)
describe(data)
}
替換data為您的數(shù)據(jù),然后就可以啦!
basic_eda(my_amazing_data)
創(chuàng)建示例數(shù)據(jù):
使用heart_disease數(shù)據(jù)(來(lái)自funModeling包)。為了使本文容易理解,我們只選取四個(gè)變量。
data=heart_disease %>% select(age, max_heart_rate, thal, has_heart_disease)
第一步:了解數(shù)據(jù)
統(tǒng)計(jì)第一個(gè)例子中觀測(cè)(行)和變量的數(shù)量,并使用head顯示數(shù)據(jù)的前幾行。
glimpse(data)
## Observations: 303
## Variables: 4
## $ age
## $ max_heart_rate
## $ thal
## $ has_heart_disease
獲取有關(guān)數(shù)據(jù)類型,零值,無(wú)窮數(shù)和缺失值的統(tǒng)計(jì)信息:
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會(huì)返回一個(gè)表格,因此很容易篩選出符合某些條件的變量,例如:
有至少80%的非空值(p_na < 20)
有少于50個(gè)唯一值(unique <= 50)
建議:
所有變量都是正確的數(shù)據(jù)類型嗎?
有含有很多零或空值的變量嗎?
有高基數(shù)變量嗎?
更多相關(guān)信息請(qǐng)瀏覽:
https://livebook.datascienceheroes.com/exploratory-data-analysis.html
第二步:分析分類變量
freq函數(shù)自動(dòng)統(tǒng)計(jì)數(shù)據(jù)集中所有因子或字符變量:
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
## 4
## 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用于一個(gè)變量-freq(data$variable),它會(huì)生成一個(gè)表格。這對(duì)于處理高基數(shù)變量(如郵政編碼)非常有用。
將圖表以jpeg格式保存到當(dāng)前目錄中:
freq(data, path_out = ".")
分類變量的所有類別都有意義嗎?
有很多缺失值嗎?
經(jīng)常檢查絕對(duì)值和相對(duì)值。
第三步:分析數(shù)值變量
我們將看到:plot_num和profiling_num兩個(gè)函數(shù),它們都自動(dòng)統(tǒng)計(jì)數(shù)據(jù)集中所有數(shù)值/整數(shù)變量:
1. 繪制圖表
plot_num(data)
將圖表導(dǎo)出為jpeg格式:
plot_num(data, path_out = ".")
建議:
試著找出極度偏態(tài)分布的變量。
作圖檢查任何有異常值的變量。
更多相關(guān)信息請(qǐng)瀏覽:
https://livebook.datascienceheroes.com/exploratory-data-analysis.html
2. 定量分析
profiling_num自動(dòng)統(tǒng)計(jì)所有數(shù)值型/整型變量:
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]
建議:
嘗試根據(jù)其分布描述每個(gè)變量(對(duì)報(bào)告分析結(jié)果也很有用)。
注意標(biāo)準(zhǔn)差很大的變量。
選擇您最熟悉的統(tǒng)計(jì)指標(biāo):data_prof %>% select(variable, variation_coef, range_98):variation_coef得到較大值可能提示異常值。range_98顯示絕大部分?jǐn)?shù)值的范圍。
第四步:同時(shí)分析數(shù)值和分類變量
使用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
## ---------------------------------------------------------------------------
這對(duì)于快速了解所有變量非常有用。但是當(dāng)我們想要使用統(tǒng)計(jì)結(jié)果來(lái)改變我們的數(shù)據(jù)工作流時(shí),這個(gè)函數(shù)不如freq和profiling_num好用。
建議:
檢查最小值和最大值(異常值)。
檢查分布(與之前相同)。
更多相關(guān)信息請(qǐng)瀏覽:
https://livebook.datascienceheroes.com/exploratory-data-analysis.html
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
數(shù)據(jù)科學(xué)家需要知道的 5 個(gè)基本統(tǒng)計(jì)學(xué)概念
2 種數(shù)據(jù)科學(xué)編程中的思維模式,了解一下
數(shù)據(jù)科學(xué)領(lǐng)域,你該選 Python 還是 R ?
-
eda
+關(guān)注
關(guān)注
71文章
2759瀏覽量
173275 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68617 -
數(shù)據(jù)分析
+關(guān)注
關(guān)注
2文章
1449瀏覽量
34060
原文標(biāo)題:一文讀懂 R 中的探索性數(shù)據(jù)分析
文章出處:【微信號(hào):DBDevs,微信公眾號(hào):數(shù)據(jù)分析與開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論