目录
1.字段拆分
1.1按照位置拆分
?1.2按照分隔符拆分
?1.3时间属性抽取
数据抽取,也称数据拆分,是指保留、抽取元数据表中的某些记录、字段的部分信息,形成一个新字段、新记录的过程,主要的方法有字段拆分、记录抽样和随机抽样。
1.字段拆分
字段拆分,是指抽取某一字段的部分信息,形成一个新字段的方法。
实际应用举例:
某公司会员表里记录了身份证信息,其中包含很多信息,如籍贯省份、籍贯城市、出生日期、性别等,如果将他们从身份证这个字段中抽取出来,就可以得到相应的新字段,也就可以进行相应的分析,如会员籍身份分布等,甚至可以根据出生日期进行进一步处理,得到年龄、星座、生肖字段。
字段拆分常用的方法有按照位置拆分、按照分隔符拆分,以及时间属性抽取。
1.1按照位置拆分
例如,电话号码19800198000的第一位到第三位198,是某个运行商的号码段;第四位到第七位0019,是某个地区的号码段;第八位到第十一位8000,是用户的编号。在了解这个规则信息后,就可以采用按照位置拆分的方法,获取运营商号码段、地区号码段两个新字段。
在R语言中,使用substr函数对字段按位置进行抽取。如下面的例子
#字段拆分
data = read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.4.1 字段拆分/字段拆分.csv')
#该数据有9个电话号码
#将数值型的tel列转化为字符型
data$tel = as.character(data$tel)
#运营商
data['brands']=substr(x=data$tel,start=1,stop=3)
#地区
data['areas']=substr(x=data$tel,start=4,stop=7)
#号码段
data['nums']=substr(x=data$tel,start=8,stop=11)
?1.2按照分隔符拆分
在R语言中,需要用到stringer包中的str_split_fixed()函数。
例如,该数据框中只有一列name(商品标题),现在需要使用字段拆分的方法吧name(商品标题)列拆分为两列:第一列为brand(商品品牌),第二列为commodity_name(商品名称)。
#导入数据
data1=read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.4.1 字段拆分/分隔符.csv',
fileEncoding="utf8",
stringsAsFactors=FALSE)
#安装stringr包,加载包
install.packages("stringr")
library(stringr)
#使用空格分隔符将商品标题拆分为品牌名称和商品名称,参数n设置为2
newData=str_split_fixed(string = data1$name,pattern = ' ',n=2)
#重命名列
colnames(newData)=c('brand','commodity_name')
?
?1.3时间属性抽取
时间属性抽取,是从时间型数据中,抽取出需要的部分时间属性,如年、月、日、时、分、秒等。例如,需要按年统计销售额,就要从销售入去中抽取出年份属性,再按年份分组统计销售额。
在时间性数据的列后面加上对应的属性名即可完成抽取,具体的时间数据属性如表
属性 | 说明 | year | 年,自1900年开始的年数 | mon | 月,用0到11代表1到12月 | mday | 日,1~31 | hour | 时,0~23 | min | 分,0~59 | sec | 秒,0~61 | wday | 一周内的第几天(从周日开始计数),用0~6代表1~7天 | yday | 一年内的第几天,用0~365代表第1~366天 |
例如,把年、月、周、日、时、分、秒这7个常用的时间属性抽取出来,并作为新的列加入data2数据框,代码如下:
?首先导入数据,用strptime函数把时间字符列转为“时间型”的数据,然后赋值给“时间”列。
#导入数据
data2=read.csv('C:/Users/ABC/Desktop/书籍源代码和配套资源/谁说菜鸟不会数据分析(R语言篇)--数据/第四章/4.4.1 字段拆分/时间属性.csv',
fileEncoding="utf8",
stringsAsFactors=FALSE)
#把注册时间列转换位时间型的数据,然后赋值给“时间”列
data2$时间=strptime(
data2$注册时间,
format='%Y/%m/%d %H:%M:%S')
#抽取时间的各种属性,新增到对应的列中
data2$年=data2$时间$year+1990
#因为年份是从1900年开始计数的,所以要加上1900
data2$月=data2$时间$mon+1
#因为月份是从0开始计数的,要加1
data2$周=data2$时间$wday
data2$日=data2$时间$mday
data2$时=data2$时间$hour
data2$分=data2$时间$min
data2$秒=data2$时间$sec
?
?数据代码等来自书《谁说菜鸟不会数据分析-R语言篇》
|