整理数据
这章进行了简单的数据清洗。
一、Excel
一开始拿到散乱的数据,先用Excel进行分列。
散乱的数据:
这里先处理 FirstName ,可以看到这一列的问题是,每个名字前面都多一个^字符,用Excel工具去掉即可。
先列出来几个书中提到的函数:
函数 | 作用 |
---|---|
FIND | 返回指定字符串的位置 |
LEFT | 取单元格左边的字符 |
RIGHT | 取单元格右边的字符 |
TRIM | 删除单元格中的空格 |
LEN | 求单元格中的长度 |
CONCATENATE | 将两个值合并 |
VALUE | 求以文本格式存储的数据的数值 |
SUBSTITUTE | 以指定的新文本替代单元格中不需要的文本 |
这里用到的是SUBSTITUTE函数。
SUBSTITUTE(text, old_text, new_Text, [instance_num])
我们先新建一个列,命名为NewFirstName。之后输入公式。如下图:
这样FirstName就处理完了,但是LastName无法使用简单的Excel函数去掉中间的多余字符,所以我们使用R。
这里注意,不是Excel无法处理这种问题,是因为如果想要使用Excel函数去处理,就要嵌套多个不同函数,这样不便于使用及更改,所以还是使用R更方便快捷。
二、正则表达式
正则表达式是一种编程工具,可以用这个工具制定复杂的模式以便匹配和替换文本字符串。
本次数据中的LastName列就可以使用这个方式处理。
先用代码演示一下书中示例:
hfhh <- read.table("D:/Excel/hfda/hfda_ch13_raw_data.csv", sep=",",header=1) // 先加载数据
NewLastName <- sub("\\(.*\\)", "", hfhh$LastName) //使用正则表达式处理LastName列
这里解释一下这个正则表达式的含义:
\\(.*\\) 总体来看就是要匹配()中的内容
分解开来看:
\\( 代表左括号,\\表示括号本身并不是R的表达式
\\) 代表右括号,\\表示括号本身并不是R的表达式
.* 代表括号内的全部内容
这样LastName这一列就处理好了,但在数据中我们发现很多重复项,这些重复项的名字和电话是相同的,而时间等无关项不同。这就需要我们先将其无关项删除,然后再进行去重操作。
先去除无关项:
hfhhNameOnly$Time <- NULL
hfhhNameOnly$CallID <- NULL
三、去重
可以使用R中的unique()函数去掉名字中的重复行。
代码示例如下:
hfhhNameOnly <- unique(hfhhNameOnly)
去重完成后,将整理好的数据存为csv文件。
代码示例如下:
write.csv(hfhhNameOnly, file="hfhhNameOnly.csv")
四、补充介绍正则表达式
正则表达式在很多语言上都经常用到,在这简单整理一下:
https://www.runoob.com/regexp/regexp-intro.html
这个网站里面介绍的超级全面,存在这里留着看,感谢大佬,感谢互联网。