杂乱的杂怎么写

来源:丁点帮你

作者:丁点helper

在处理完缺失值之后,我们手里的数据可能还存在一些问题。接触过原始数据的小伙伴应该都很清楚,有些数据虽然是完整的,但格式却是乱糟糟的。

今天要关注的是其中Animal这个变量。

#导入数据survey<-read.csv("//Users//Desktop//titanic.csv",header=TRUE)#查看Animal这个变量survey$Animal#查看Animal这个变量包含几类levels(survey$Animal)

共有238条记录,用levels() 这个语句发现大家喜欢的动物共有155类,下面展示部分结果:忘记levels()语句用法的戳此回顾‍

[3] "A badger. They are very aggressive and small."[20] "A rich person's dog" [29] "Ant" [99] "lion" [153] "Wolf"[154] "wolf in switzerland "

这个变量是"你最喜欢的动物是什么?" 同学们的答案精彩到突破我的脑洞。

有的加了不定冠词,有的没加,有的说明了理由,有的还加了形形色色的描述性语言,大小写不一致……

而我们只想知道同学喜欢的动物是什么,不需要有任何限定语,也不需要知道这动物是有钱人的还是穷人家养的……喜欢狼那位小可爱,不需要告诉我是瑞士的狼啊

其实我觉得大家这样活泼又认真回答真的很好。但是从统计的角度来看,这样会给统计分析工作造成很多麻烦//www.58yuanyou.com

因为瑞士的狼和蒲松龄写的那两只狼都是一个物种,但按照目前的数据,统计软件就会把它识别为两种动物啦。

数据清理第二步:统一格式

多重线性回归,一般是指有多个自变量X,只有一个因变量Y。前面我们主要是以简单线性回归为例在介绍,两者的差距主要在于自变量X的数量,在只有一个X时,就称简单线性回归。

第一步是处理缺失,戳此回顾

建议先把要处理的Animal 这个变量单独拿出来处理,这样可以保护原始数据库不被影响。

# 创建一个新的对象animal来存储animal <- survey$Animal

1. 统一大小写

用tolower() 语句将字符型变量转变为小写字母。

animwww.58yuanyou.comal <- tolower(animal)

现在看看animal这个变量中共有几类动物:

length(unique(animal))[1] 129

前面讲过,看到复杂的语句应该从中间往外读。unique(animal) 的作用是去重,获取animal这个变量中共有几类动物。length() 的作用是获取变量长度。

结果显示,在统一大小写之后,动物种类减少到了129类。

2. 去掉开头的不定冠词a, an

用gsub() 语句将不定冠词a或者an替换为『什么都没有』。

animal <- gsub("^a ","",animal)

  • 第一个命令"^a " 是指希望被替换的内容(引号中的内容),^a 表示出现在字符最开头的a,这样可以避免『canada goose』这个词被替换为『canadgoose』。注意a后面还有一个空格,出现在最开头的a及其后面的空格都将被替换掉;
  • 第二个命令"" 指替换成什么内容(引号中的内容),这里引号中什么内容都没有。注意,连空格都没有。言外之意就是把希望被替换掉的内容删掉;
  • 第三个命令 animal 指被替换内容所在的对象。

同样地,我们把不定冠词an 也删掉:

animal <- gsub("^an ","",animal)

此外,还有一些答案中出现了奇怪的符号,把这些符号也删掉:

animal <- gsub("[^0-9A-Za-z///' ]","'" , animal) # 方括号指查找某个特定的字符animal <- gsub("'","" , animal)

此时动物种类减少到了108种:

length(unique(animal))[1] 108

3. 去掉结尾没必要的后缀

‍有的单词末尾有空格,这其实是没有必要的,需去掉。

  • 用$这个符号来表示『字符串末尾』;
  • 用\\s$这个符号表示字符串末尾的空格。单独的斜线\表示跳过字符,\s这个符号表示空格,那么\\s$就是『跳过字符+出现空格+字符串结束』。

animal <- gsub("\\s$","",animal)length(unique(animal)) [1] 108

此时动物种类仍有108种。

在编程语言中会用到像^,\,\s,$等符号来描述我们想要搜索的内容,这些符号叫做regular expression。

更多符号参见

https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf

4. 去掉修饰性词语

先举个例子:有些同学喜欢狼这个动物,但加了一些修饰语,我们用下面的语句把wolf这个单词前后的字符全部去掉。

animal <- gsub(".*wolf.*","wolf",animal)

试着打开上面链接,查查英文句号. 和星号* 是代表什么?半分钟就可查到。

杂乱的杂怎么写

英文句号代表任何字符(除换行符号外)

杂乱的杂怎么写

星号代表任意次数

所以上面语句的意思就很明了了。不过我们收集到的数据中除了狼,还有很多其他动物。我们需要把每种动物都进行一次这样的操作。

这显然太费劲了,所以接下来用循环语句实现对不同对象的相同操作。

# 首先将数据中所有使用了修饰语句的动物找出来,并存储在一个对象中anvec <- c("wolf","cat","dog","badger","dolphin","bear","whale","owl","tiger","shark","fox","cow","panda","falcon","leopard","hamster","lizard", "goose")# 再用循环语句将上述动物前后的字符都去掉for (i in 1:length(anvec)){ animal <- gsub(paste(".*",anvec[i],".*",sep="原由网"),anvec[i],animal)}

  • 循环语句中,f//www.58yuanyou.comor后面的()中是循环对象。在本例中,就是anvec这个字符串中的每一个元素。{}中的内容是对每个元素将要执行的操作。
  • paste()的作用是将多个字符连接为一个整体,前面几个命令是将要连接的字符,sep=是指前面的字符用什么符号连接,本例中双引号中什么都没有,意思就是无缝衔接。

此时,数据中的动物种类减少到了84种:

length(unique(animal))[1]84

5. 修改一些非共性的问题

# 有同学最喜欢的动物是老师,好像也没啥毛病,这里去掉修饰语animal <- gsub(".*professor.*","",animal)# 金毛猎犬和小狗都属于狗;竖线表示『或者』animal <- gsub("gwww.58yuanyou.comolden retriever|puppy","dog",animal)# kitten和cat都是猫animal <- gsub("kitten","cat",animal)# 之前没有批量处理eagle的修饰语,因为会误将eagle ray这种动物删掉animal <- gsub("bald ","",animal)

eagle ray译为鲼(fen 四声)科动物,大概就是下图这类样子。

杂乱的杂怎么写

eagle ray

# 动物种类减少到79种length(unique(animal)) [1]79

小结

多重线性回归,一般是指有多个自变量X,只有一个因变量Y。前面我们主要是以简单线性回归为例在介绍,两者的差距主要在于自变量X的数量,在只有一个X时,就称简单线性回归。

此时再看看animal这个变量,已经处理干净了:

sort(unique(animal))

杂乱的杂怎么写

这篇文章比较长,且内容琐碎,能看到这里的小伙伴有心了。

清理混乱格式的数据可以说是科研中最耗时耗力的工作之一了,需要大家十分耐心和细心。希望今天讲的5个处理混乱格式的方法能对大家有帮助。

内容版权声明:除非注明原创否则皆为转载,再次转载请注明出处。

文章标题: 杂乱的杂怎么写

文章地址: www.58yuanyou.com/jiqiao/87054.html

相关推荐