使用 R 的定量技术探索数据
介绍
探索性数据分析是数据科学周期中最耗时但最重要的部分之一。在本指南中,您将学习 R 中可用的使用定量方法执行探索性数据分析的技术。
让我们从一些数据开始。
数据
在本指南中,我们将使用一个虚构的贷款申请人数据集,其中包含 200 个观测值和 10 个变量,如下所述:
Marital_status:申请人是否已婚(“是”)或未婚(“否”)
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)
Approval_status:贷款申请是否被批准(“是”)或未被批准(“否”)
年龄:申请人的年龄(岁)
性别:申请人是男性(“M”)还是女性(“F”)
投资额:申请人申报的股票和共同基金投资总额(美元)
work_exp: 工作经验(年数)
让我们首先加载所需的库和数据。
      library(plyr)
library(readr)
library(ggplot2)
library(GGally)
library(dplyr)
library(mlbench)
dat <- read_csv("data_test.csv")
glimpse(dat)
    
输出:
      Observations: 200
Variables: 10
$ Marital_status  <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,...
$ Is_graduate     <fct> No, No, No, No, No, No, No, No, No, No, No, No, Yes, Y...
$ Income          <int> 72000, 64000, 80000, 76000, 72000, 56000, 48000, 72000...
$ Loan_amount     <int> 70500, 70000, 275000, 100500, 51500, 69000, 147000, 61...
$ Credit_score    <fct> Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad,...
$ approval_status <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,...
$ Investment      <int> 117340, 85340, 147100, 65440, 48000, 136640, 160000, 9...
$ gender          <fct> Female, Female, Female, Female, Female, Female, Female...
$ age             <int> 34, 34, 33, 34, 33, 34, 33, 33, 33, 33, 34, 33, 33, 33...
$ work_exp        <dbl> 9.0, 8.0, 10.0, 9.5, 9.0, 7.0, 6.0, 9.0, 9.0, 11.0, 9....
    
输出显示数据集有五个分类变量(标记为“chr”)、四个整数变量(标记为“int”)和一个数字变量“work_exp”。我们将使用下面的代码行将分类变量转换为“factor”类型。
      names <- c(1,2,5,6,8)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
    
输出:
      Observations: 200
Variables: 10
$ Marital_status  <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,...
$ Is_graduate     <fct> No, No, No, No, No, No, No, No, No, No, No, No, Yes, Y...
$ Income          <int> 72000, 64000, 80000, 76000, 72000, 56000, 48000, 72000...
$ Loan_amount     <int> 70500, 70000, 275000, 100500, 51500, 69000, 147000, 61...
$ Credit_score    <fct> Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad, Bad,...
$ approval_status <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,...
$ Investment      <int> 117340, 85340, 147100, 65440, 48000, 136640, 160000, 9...
$ gender          <fct> Female, Female, Female, Female, Female, Female, Female...
$ age             <int> 34, 34, 33, 34, 33, 34, 33, 33, 33, 33, 34, 33, 33, 33...
$ work_exp        <dbl> 9.0, 8.0, 10.0, 9.5, 9.0, 7.0, 6.0, 9.0, 9.0, 11.0, 9....
    
现在让我们使用各种定量技术进行探索性分析。
计数、频率和比例
基本分析是计算简单的计算,例如计数、频率和比例。summary()函数可用于执行此任务。
      summary(dat)
    
输出:
      Marital_status Is_graduate     Income       Loan_amount      Credit_score
 Divorced:60     No : 84     Min.   :32000   Min.   :  12200   Bad :163    
 No      :76     Yes:116     1st Qu.:56000   1st Qu.:  61375   Good: 37    
 Yes     :64                 Median :64000   Median :  77250               
                             Mean   :62750   Mean   : 349278               
                             3rd Qu.:72000   3rd Qu.: 144750               
                             Max.   :88000   Max.   :6670000               
 approval_status   Investment         gender         age           work_exp     
 No :149         Min.   :   6000   Female:178   Min.   :32.00   Min.   : 4.000  
 Yes: 51         1st Qu.:  81945   Male  : 22   1st Qu.:33.00   1st Qu.: 7.000  
                 Median : 114800                Median :34.00   Median : 8.000  
                 Mean   : 169694                Mean   :33.98   Mean   : 7.844  
                 3rd Qu.: 173492                3rd Qu.:34.00   3rd Qu.: 9.000  
                 Max.   :3466580                Max.   :49.00   Max.   :11.000
    
我们可以从上面的输出推断出以下内容:
1:所有变量中均无“NA”或缺失值。这证实所有变量的观测值数量为 200。
显示数值变量的汇总统计数据。例如,申请人的年龄范围为 32 至 49 岁。
对于定性变量,显示相应变量中每个标签的频率。例如,目标变量“approval_status”的频率表显示,在 200 名申请人中,有 149 人的贷款申请被拒绝,其余的则被接受。
比例
处理频率表时,通常需要计算比例。在我们的例子中,我们可能想要计算分类变量(例如“approval_status”)的比例。下面的代码行创建了一个频率表和变量“approval_status”的标签比例。
      table1 = table(dat$approval_status)
prop.table(table1)
    
输出:
      No   Yes 
0.745 0.255
    
输出显示,约 75% 的申请者被拒绝,而录取率约为 25%。这也可以扩展到两个或更多变量。例如,如果我们想分析信用评分中批准申请的百分比,这也是可能的。
下面的第一行代码创建双向频率表,而第二行打印单元格百分比,这意味着所有单元格的总和将等于一。正如预期的那样,大多数信用评分较低的申请人的申请都被拒绝了。
prop.table函数还可用于生成行或列的百分比。下面的第三行和第四行代码创建了一个比例表,分别给出行和列的百分比。
      table2 = table(dat$approval_status, dat$Credit_score)
prop.table(table2) 
prop.table(table2, 1) 
prop.table(table2, 2)
    
输出:
      Bad  Good
  No  0.700 0.045
  Yes 0.115 0.140
            Bad       Good
  No  0.93959732 0.06040268
  Yes 0.45098039 0.54901961
    
            Bad      Good
  No  0.8588957 0.2432432
  Yes 0.1411043 0.7567568
    
描述统计
在上一节中,我们进行了初步的数据分析。然而,任何定量分析如果没有描述性统计数据都是不完整的。它们是数据科学的基础,被定义为总结给定数据的度量。它们包括集中趋势度量(例如平均值、中位数和众数)和离散度量(例如标准差、方差和范围)。
summary ()函数提供了部分统计数据,但不是全部。R 中还有许多其他函数可用于识别这些指标。fivenum ()函数就是其中之一;它返回最小值、下限、中位数、上限和最大值。但是,这个函数有一个限制,即它对因子没有意义。
      fivenum(dat$Income)
    
输出:
      1] 32000 56000 64000 72000 88000
    
除了summary和fivenum函数之外,psych包也是一个更好的替代方案,它提供了几个定量指标,包括标准差、偏度和范围。
下面的第一行代码加载库,而第二行使用库中的“describe”函数打印所有变量的定量测量。
      library(psych)
describe(dat)
    
输出:
      vars   n      mean        sd median   trimmed      mad   min
Marital_status*     1 200      2.02      0.79      2      2.02     1.48     1
Is_graduate*        2 200      1.58      0.49      2      1.60     0.00     1
Income              3 200  62750.00  10638.77  64000  63062.50 11860.80 32000
Loan_amount         4 200 349278.00 741366.91  77250 170134.38 35211.75 12200
Credit_score*       5 200      1.19      0.39      1      1.11     0.00     1
approval_status*    6 200      1.25      0.44      1      1.19     0.00     1
Investment          7 200 169693.55 267134.29 114800 130429.69 65590.22  6000
gender*             8 200      1.11      0.31      1      1.01     0.00     1
age                 9 200     33.98      1.76     34     33.71     1.48    32
work_exp           10 200      7.84      1.33      8      7.88     1.48     4
                     max   range  skew kurtosis       se
Marital_status*        3       2 -0.03    -1.40     0.06
Is_graduate*           2       1 -0.32    -1.91     0.03
Income             88000   56000 -0.25     0.08   752.27
Loan_amount      6670000 6657800  4.53    28.55 52422.56
Credit_score*          2       1  1.61     0.60     0.03
approval_status*       2       1  1.12    -0.76     0.03
Investment       3466580 3460580  9.71   113.87 18889.25
gender*                2       1  2.47     4.14     0.02
age                   49      17  4.63    31.04     0.12
work_exp              11       7 -0.25     0.08     0.09
    
变量“Loan_amount”和“Investment”的高偏度值表明这些变量不是正态分布的。
相关性
我们可以使用语法cor(X, Y) 或 rcorr(X, Y)来生成两个数字列之间的相关性。
      cor(dat$Income, dat$Investment)
    
输出:
      1] 0.06168653
    
0.06 的数值表示两个变量之间的相关性较弱。
汇总数据
在定量分析中,我们经常需要根据几个变量来汇总数据。这可以通过dplyr包中的summary()函数轻松完成。下面的代码总结并打印三个数值变量的平均值。
      dat %>%
  summarize(avg_income = mean(Income,na.rm=TRUE), 
            avg_loan = mean(Loan_amount,na.rm=TRUE), 
            avg_age = mean(age,na.rm=TRUE))
    
输出:
      A tibble: 1 x 3
  avg_income avg_loan avg_age
       <dbl>    <dbl>   <dbl>
1      62750   349278    34.0
    
以上输出显示,申请人的平均年龄为 34 岁,平均收入为 62,750 美元。申请的平均贷款金额为 34,9278 美元。
分组变量
分析数据的另一种有用方法是使用group_by()函数,该函数根据单列或多列对输入数据进行分组,然后操作每个这样的数据组。下面的代码行按变量“approval_status”对数据框进行分组,然后计算每个标签的平均收入。
      dat %>%
    group_by(approval_status) %>%
    summarise(mean_inc = mean(Income))
    
输出:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
                                
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                
                            
                                    
                                    
                                    
                                    
    
    
            
  
        
请先 登录后发表评论 ~