1. 程式人生 > >推薦 :一文讀懂R中的探索性資料分析(附R程式碼)

推薦 :一文讀懂R中的探索性資料分析(附R程式碼)

作者:Pablo Casas翻譯:蔣雨暢;校對:車前子;

本文1500字,建議閱讀7分鐘

本文將通過介紹一個程式碼模板的四個基本步驟,來幫助您完成資料分析的初期探索。

探索性資料分析(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

## $ age               <int> 63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, ...

## $ max_heart_rate    <int> 150, 108, 129, 187, 172, 178, 160, 163, 147,...

## $ thal              <fct> 6, 3, 7, 3, 3, 3, 3, 3, 7, 7, 6, 3, 6, 7, 7,...

## $ has_heart_disease <fct> no, 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)

640?wx_fmt=jpeg

##   thal frequency percentage cumulative_perc

## 1    3       166      54.79              55

## 2    7       117      38.61              93

## 3    6        18       5.94              99

## 4 <NA>         2       0.66             100

640?wx_fmt=jpeg

##   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兩個函式,它們都自動統計資料集中所有數值/整數變數:

1. 繪製圖表

plot_num(data)

640?wx_fmt=jpeg

將圖表匯出為jpeg格式: 

plot_num(data, path_out = ".")

建議:

  • 試著找出極度偏態分佈的變數。

  • 作圖檢查任何有異常值的變數。

更多相關資訊請瀏覽:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

2. 定量分析

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好用。

建議:

  • 檢查最小值和最大值(異常值)。

  • 檢查分佈(與之前相同)。

更多相關資訊請瀏覽:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

原文標題:

Exploratory Data Analysis in R (Introduction)

原文連結:

https://dzone.com/articles/exploratory-data-analysis-in-r-introduction 

譯者簡介:蔣雨暢,香港理工大學大三在讀,主修地理資訊,輔修電腦科學,目前在研究學習通過資料科學等方法探索城市與人類活動的關係。希望能認識更多對資料科學感興趣的朋友,瞭解更多前沿知識,開拓自己的眼界。

「完」

本次轉自:THU資料派 微信公眾號;


關聯閱讀

原創系列文章:

資料運營 關聯文章閱讀:

資料分析、資料產品 關聯文章閱讀:

合作請加qq:365242293  

更多相關知識請回復:“ 月光寶盒 ”;

資料分析(ID : ecshujufenxi )網際網路科技與資料圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人群。

640?wx_fmt=png