暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R数据分析基础|理解数据

1125
点击关注了解更多哦

在进行数据分析前,首先需要对所收集到的数据进行基本探索,以便后续的数据处理与分析。本文主要分为探索数据基本结构、探索数值型变量分类型变量以及探索变量之间的关系等4个部分,内容框架如下图所示,主要内容参考Brett Lantz《机器学习与R语言》(third Edition)[1],并对部分内容进行了补充。

1、探索数据基本结构

探索数据基本结构通常使用head()str()summary() 三个基本函数。本文所使用的数据为该书所附带的数据,可在后台回复【20220218】获得。该数据为2012年在USA热门网站上发布的关于二手车打折销售广告数据,共包含7个变量。

setwd("C:\\Users\\Acer\\Desktop"#设置工作路径
usedcars <- read.csv("usedcars.csv"#读入数据
head(usedcars) #查看数据前6行
#  year model price mileage  color transmission conservative
#1 2011   SEL 21992    7413 Yellow         AUTO        FALSE
#2 2011   SEL 20995   10926   Gray         AUTO         TRUE
#3 2011   SEL 19995    7351 Silver         AUTO         TRUE
#4 2011   SEL 17809   11613   Gray         AUTO         TRUE
#5 2012    SE 17500    8367  White         AUTO         TRUE
#6 2010   SEL 17495   25125 Silver         AUTO         TRUE
str(usedcars) #了解数据基本结构,150个观测值,7个变量,以及每个变量的类型
#'data.frame': 150 obs. of  7 variables:
# $ year        : int  2011 2011 2011 2011 2012 2010 2011 2010 2011 2010 ...
# $ model       : chr  "SEL" "SEL" "SEL" "SEL" ...
# $ price       : int  21992 20995 19995 17809 17500 17495 17000 16995 16995 16995 ...
# $ mileage     : int  7413 10926 7351 11613 8367 25125 27393 21026 32655 36116 ...
# $ color       : chr  "Yellow" "Gray" "Silver" "Gray" ...
# $ transmission: chr  "AUTO" "AUTO" "AUTO" "AUTO" ...
# $ conservative: logi  FALSE TRUE TRUE TRUE TRUE TRUE ...
summary(usedcars) #对各个变量进行简单统计
#      year         model               price          mileage          color           transmission       conservative   
# Min.   :2000   Length:150         Min.   : 3800   Min.   :  4867   Length:150         Length:150         Mode :logical  
# 1st Qu.:2008   Class :character   1st Qu.:10995   1st Qu.: 27200   Class :character   Class :character   FALSE:51       
# Median :2009   Mode  :character   Median :13592   Median : 36385   Mode  :character   Mode  :character   TRUE :99       
# Mean   :2009                      Mean   :12962   Mean   : 44261                                                        
# 3rd Qu.:2010                      3rd Qu.:14904   3rd Qu.: 55125                                                        
# Max.   :2012                      Max.   :21992   Max.   :151479   

2、探索数据值型变量

2.1 测量变量中心趋势——平均数与中位数

使用mean()median() 函数计算变量的平均数与中位数。

mean(usedcars$price)
#[1] 12961.93
median(usedcars$price)
#[1] 13591.5

另外,使用summary() 函数的计算结果也包括平均数与中位数,此外还有变量的最大值与最小值,Q3与Q1分位所对应的数值。

summary(usedcars$price)
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   3800   10995   13592   12962   14904   21992 
summary(usedcars[c("price""mileage")])
#     price          mileage      
# Min.   : 3800   Min.   :  4867  
# 1st Qu.:10995   1st Qu.: 27200  
# Median :13592   Median : 36385  
# Mean   :12962   Mean   : 44261  
# 3rd Qu.:14904   3rd Qu.: 55125  
# Max.   :21992   Max.   :151479  

2.2 测量变量离散程度——分位数

使用range() 函数计算变量的范围;diff() 用来计算两个数值的差值;IQR() 函数用来计算变量的四分位距,即Q3-Q1;quantile() 函数可计算任意指定的分位数。

range(usedcars$price#数据范围
#[1]  3800 21992
diff(range(usedcars$price)) #极差
#[1] 18192
IQR(usedcars$price#四分位距:Q3-Q1
#[1] 3909.5
quantile(usedcars$price)#使用quantile()函数计算分位数
#     0%     25%     50%     75%    100% 
# 3800.0 10995.0 13591.5 14904.5 21992.0 
quantile(usedcars$price, probs = seq(from = 0, to = 1, by = 0.1))#自定义分位数
#     0%     10%     20%     30%     40%     50%     60%     70%     80%     90%    100% 
# 3800.0  8431.9 10759.4 11982.8 12993.8 13591.5 13992.0 14496.2 14999.0 15999.1 21992.0 
quantile(usedcars$price, probs = seq(0, 1, 0.1))#自定义分位数
 #    0%     10%     20%     30%     40%     50%     60%     70%     80%     90%    100% 
# 3800.0  8431.9 10759.4 11982.8 12993.8 13591.5 13992.0 14496.2 14999.0 15999.1 21992.0 
quantile(usedcars$price, probs = c(0.01, 0.99))#自定义分位数
#      1%      99% 
# 5428.69 20505.00 

将分位数结果可视化。

df.quantile <- quantile(usedcars$price, probs = seq(0, 1, 0.01))
plot(df.quantile, 
     xlab = "quantile", ylab = "price($)", main = "quantile of price")

2.3 测量变量离散程度——方差与标准差

使用var()sd() 函数来计算变量的方差与标准差。

var(usedcars$price)
#[1] 9749892
sd(usedcars$price)
#[1] 3122.482

2.4 数值变量的可视化——箱线图

#单个变量箱线图,左图
boxplot(usedcars$price, xlab = "price", ylab = "price($)", main = "boxplot of price"
#一个变量不同水平的箱线图,右图
boxplot(usedcars$price ~ usedcars$year, xlab = "year", ylab = "price($)", main = "boxplot of price")

2.5 数值变量的可视化——直方图

使用hist() 函数来绘制变量的直方图。

hist(usedcars$price, xlab = "price", ylab = "Frequency", main = "histogram of price"#左图
hist(usedcars$price, breaks = 20, xlab = "price", ylab = "Frequency", main = "histogram of price(breaks[20])"#右图

2.6 数值变量的可视化——密度图

使用plot(density(x) 函数来绘制变量的密度图。

plot(density(usedcars$price), xlab = "price", ylab = "density", main = "density of price")  #左图
plot(density(usedcars$mileage), xlab = "mileage", ylab = "density", main = "density of mileage"#右图

2.7 均匀分布与正态分布

通过对直方图及密度图的观察,可进一步分析数据的分布状况。

偏度分布形式图
均匀分布与正态分布图

2.8 Describe()函数

利用bruceR[2]中的Describe() 函数可以计算变量描述性统计结果,以探索数值型变量的基本特征。

install.packages("bruceR")
bruceR::Describe(usedcars$price)
#Descriptive Statistics:
#───────────────────────────────────────────────────────────────────────────────
#       N      Mean       SD  |    Median      Min       Max  Skewness  Kurtosis
#───────────────────────────────────────────────────────────────────────────────
#     150  12961.93  3122.48  |  13591.50  3800.00  21992.00     -0.42      0.43
#───────────────────────────────────────────────────────────────────────────────
bruceR::Describe(usedcars[c("price""mileage")])
#Descriptive Statistics:
#───────────────────────────────────────────────────────────────────────────────────────
#             N      Mean        SD  |    Median      Min        Max  Skewness  Kurtosis
#───────────────────────────────────────────────────────────────────────────────────────
#price      150  12961.93   3122.48  |  13591.50  3800.00   21992.00     -0.42      0.43
#mileage    150  44260.65  26982.10  |  36385.00  4867.00  151479.00      1.23      1.50
#───────────────────────────────────────────────────────────────────────────────────────

3、探索分类型变量

3.1 变量频数统计与频率计算

使用table() 函数可用来统计类别变量的频次;使用prop.table() 函数可进一步计算频率分布;使用round() 函数可对统计结果的小数位进行控制。

table(usedcars$year#year频次统计
#2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 
#   3    1    1    1    3    2    6   11   14   42   49   16    1 
table(usedcars$model#model频次统计
# SE SEL SES 
# 78  23  49 
prop.table(table(usedcars$year)) #year频率计算
#       2000        2001        2002        2003        2004        2005        2006        2007        2008        2009 
#0.020000000 0.006666667 0.006666667 0.006666667 0.020000000 0.013333333 0.040000000 0.073333333 0.093333333 0.280000000 
#       2010        2011        2012 
#0.326666667 0.106666667 0.006666667 
round(prop.table(table(usedcars$year)) * 100, digits = 2) #乘100,保留2位小数
# 2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012 
# 2.00  0.67  0.67  0.67  2.00  1.33  4.00  7.33  9.33 28.00 32.67 10.67  0.67 
round(prop.table(table(usedcars$color)) * 100, digits = 2) #乘100,保留2位小数
# Black   Blue   Gold   Gray  Green    Red Silver  White Yellow 
# 23.33  11.33   0.67  10.67   3.33  16.67  21.33  10.67   2.00 

3.2 分类变量中心趋势——众数

在对变量进行频数统计与频率计算时,频率最高的即为众数。此外,也可以使用which.max()prettyR包中的Mode() 函数来计算变量的众数。

which.max(table(usedcars$year))
#2010 
#  11
install.packages("prettyR")
library(prettyR)
Mode(usedcars$year)
#[1] "2010"

3.3 分类变量可视化——柱状图

使用barplot() 函数来绘制变量的柱状图

barplot(table(usedcars$year), xlab = "year", ylab = "Frequency", main = "barchart of year"#左图
barplot(table(usedcars$color), xlab = "color", ylab = "Frequency", main = "barchart of color"#右图

4、探索变量之间的关系

4.1 数值型变量之间的关系

4.1.1 散点图

使用plot() 函数来绘制数值型变量间的散点图。关于如何利用ggplot2绘制散点图及添加回归拟合曲线可参考R语言绘图|散点图与回归拟合曲线

plot(usedcars$price, usedcars$mileage
     xlab = "price($)", ylab = "mile", main = "scatterplot of price vs. mile")

4.1.2 散点图矩阵

关于散点图矩阵绘制的更多方法可参考R语言绘图|散点图矩阵

#install.packages("psych")
library(psych)
pairs.panels(usedcars[c("price""mileage")], lm = TRUE, pch = 21, stars = TRUE, ci = TRUE)

4.2 分类型变量之间的关系

检验modelcolor两个分类变量间的关系。将color变量分为两组(是否为保守颜色),第一组保守颜色包括Black、Gray、Silver、White,其余颜色为第二组非保守颜色,使用 %in% 运算符来创建一个二元变量conservative(虚拟变量), %in% 运算符会返回一个TRUE或者FALSE结果。

#install.packages("gmodels")
library(gmodels)
table(usedcars$color)
# Black   Blue   Gold   Gray  Green    Red Silver  White Yellow 
#    35     17      1     16      5     25     32     16      3 
usedcars$conservative <- usedcars$color %in% c("Black""Gray""Silver""White")
table(usedcars$conservative)
#FALSE  TRUE 
#   51    99 


利用table() 函数生成列联表。

table(usedcars$model, usedcars$conservative#列联表
#      FALSE TRUE
#  SE     27   51
#  SEL     7   16
#  SES    17   32

利用CrossTable() 函数进行列联表检验。结果包括观测值数量、卡方统计量、行占比、列占比及整体占比。

CrossTable(usedcars$model, usedcars$conservative)

CrossTable() 函数内的参数进一步调整。

CrossTable(usedcars$model, usedcars$conservative, prop.r = FALSE, prop.c = FALSE, prop.chisq = FALSE, chisq = TRUE) 

其他

本章为Brett LantzMachine Learning with R中的基础数据管理与理解章节,后续将进一步介绍该书中的相关机器学习算法与模型。


如有帮助请多多点赞哦!

参考资料

[1]

BrettLantz著, 许金炜等,译: 《机器学习与R语言(第三版)》,北京:机械工业出版社,2021

[2]

bruceR: https://cran.r-project.org/web/packages/bruceR/bruceR.pdf


文章转载自日常分享的小懒猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论