目录
3.2 z-score标准化 scale
4 数据分组 cut
数据计算是根据原有的字段数据,采用简单、函数等计算方式得到新的计算字段数据的过程,方便进行下一步数据处理或数据分析工作。
1 简单计算
简单计算,是指通过对已有字段进行加、减、乘、除等运算得出新的字段的过程。例如,已知商品的数量和单价,计算商品总额。在R语言中,直接使用两个数值列进行四则运算时,两个向量对应位置的数值会进行四则运算,计算结果会返回在对应的位置,从而得到一组计算结果的列,代码如下:
#简单计算
data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.6.1 简单计算/单价数量.csv',
fileEncoding="utf8",
stringsAsFactors=FALSE)
data$total = data$price * data$num
2 时间计算
时间计算是指计算两个时间点之间的距离天数的过程。例如,根据用户的注册时间的当前时间计算用户的注册天数,根据当前时间计算用户的注册天数,可以直接使用当前时间减去用户的注册时间,而当前时间可以直接用Sys.time函数进行获取,代码如下。
#时间计算
data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.6.2 时间计算/时间计算.csv',
fileEncoding="utf8",
stringsAsFactors=FALSE)
#把字符型的“注册时间”列,转换为时间型的“时间”列
data$时间 = strptime(data$注册时间, format ='%Y/%m/%d')
#注册天数 = 当前时间 - 注册时间
data$注册天数 = Sys.time() - data$时间
可以看到,“注册天数”列带有小数点,如果只希望获取证书的注册天数,则可以使用as.integer函数提取天数的整数部分
#“注册天数”列的数据类型简化,只保留注册天数的整数部分
data$注册天数 = as.integer(data$注册天数)
3 数据标准化
数据标准化,是指将数据按比例缩放,使之落入特定区间的过程。数据标准化的作用就是消除单位量纲的影响,方便进行不同变量间的对比分析。
通常在进行综合评价分析、聚类分析、因子分析、主成分分析之前,如果各个变量存在单位量纲不统一的情况,就需要先进行数据标准化处理。常用的数据标准化方法有0-1标准化、z-score标准化。
3.1 0-1标准化
0-1标准化也称为离差标准化,会对原始数据进行线性变换,使结果落到【0,1】区间。0-1标准化保留了原来数据中存在的关系,是消除单位量纲的最简单的方法。0-1标准化的公式为,向量中 的每个值(x)与所在向量中的最小值(min)的差除以所在向量中的最大值(max)与最小值(min)的差,即
#数据标准化
data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.6.3 数据标准化/标准化.csv',
fileEncoding="utf8",
stringsAsFactors=FALSE)
#0-1标准化
data$消费标准化 = round(
(
data$消费-min(data$消费)
)/(
max(data$消费)-min(data$消费)
)
,2
)
3.2 z-score标准化
z-score标准化也称为标准差标准化,经过z-score标准化处理的数据符合标准正态分,即均值为0,标准差为1,其转化公式为
z-score适用于数据分布过于凌乱、数据的最大值与最小值未知,或者数据中存在过多的离群值的情况。在进行聚类分析、因子分析、主成分分析等多元统计分析时,通常采用这种方法。
在R语言中,可以使用scale函数实现z-score标准化。
#z-score标准化,默认center = TRUE, scale = TRUE
data$'消费Z-score标准化' = scale(data$消费)
4 数据分组
数据分组,是指根据分析目的将数值型数据进行等距或非等距分组的过程,这个过程也称为数据离散化,一般看分布,如消费分布、收入分布、年龄分布。数组分组把数组对象分为不同的部分来进行研究,以解释其内在的联系和规律性。
在R语言中,使用cut函数进行数据分组。
cut(x, breaks, right = TRUE, labels = TRUE) | |
参数 | 说明 |
x | 被分组的向量 |
breaks | 用于指定分组阈值的向量,函数会对向量中的数值从小到大排序 |
right | 在分组时是否左开右闭,默认为TRUE,即分组区间左开右闭,为FALSE时分组区间左闭右开 |
labels | 分组的自定义标签,默认为空,即可以不自定义 |
示例数为电话号码与月消费
#分组的数组
#确定cost列中的最小值 2
min(data$cost)
#确定cost列中的最大值 100
max(data$cost)
#因为最小值为2,组距为20
#所以,设置最小的区间为(0,20]
#因为最大值为100,而且,cut函数默认右区间闭合
#所以,设置最大的区间为(80,100]
#这样,[2,100]内的所有数值都落入分组
breaks =c(0,20,40,60,80,100)
#对指定列进行分组
data$cut = cut(data$cost,breaks)