大数据文摘作品,转载要求见文末
作者 | NSS
编译 | 张伯楠,刘云南
弋心,卫青,宁云州
R语言是数据科学领域最流行的语言之一。如果你真想从事数据科学事业,那你要么已经会用R语言要么正在学习它。R语言同样是一个拥有广泛的统计和数据科学库的生态系统。为了帮助数据科学家测试他们的R语言能力,我们为DataFest 2017设计了一部分技能测试题。
超过1500人注册了这项考试并有接近500人完成了测试。下图是不同测试者的成绩分布:
下面是关于成绩分布的一些统计数据:
平均分:16.69
分数中值:19
众数:0
下面是这四十道题目的问题和答案,如果错过了测验,你还有机会完成这四十道题目,看看自己在R语言上究竟处于什么水平。
友情提示:在使用本文代码之前,请先清除格式,或查看本文原文网址复制使用。
祝你学习愉快!
1、请看下列函数
f
g
y + z
}
z
x + g(x)
}
1)如果我们执行下列命令(写在下一行),输出结果会是什么?
z
f(4)
A) 12
B) 7
C) 4
D) 16
答案:(A)
R语言的作用域规则(scoping rule)会使z
鸢尾属植物(iris)数据集包括多种具有不同萼片(sepal)长度的花,如多刚毛类(setosa)、杂色类(versicolor)和维尔吉尼卡(virginica)等。现在,我们想分析所有鸢尾属花的萼片长度分布。其中之一的解决方法是通过下面所示的图可视化它们之间的关系。
下列哪个函数能够用于创建上文所示的图?
A) xyplot()B) stripplot()C) barchart()D) bwplot()
答案:(B)
上文所绘是条型图而选项A、C、D会分别产生散点图、柱状图以及箱线图。因此,B选项是正确答案。
3)下列命令哪一项可以在一个数据框架中正确读取上述csv文件的全部五行内容?
A) csv(‘Dataframe.csv’)
B) csv(‘Dataframe.csv’,header=TRUE)
C) dataframe(‘Dataframe.csv’)
D) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’)
答案:(D)
第一个和第二选项会将数据第一行读取为变量名。第三个命令不存在,因此,选项D是正确答案。
Excel文件格式是最常用的储存数据文件格式之一。了解如何将Excel文件转化为R语言格式非常重要。下面是一个Excel文件,其中数据储存在第三个工作表中。
下列哪行代码可以从Excel工作表3中读取数据?
A) Openxlsx::read.xlsx(“Dataframe.xlsx”,sheet=3,colNames=FALSE)
B) Xlsx::read.xlsx(“Dataframe.xlsx”,sheetIndex=3,header=FALSE)
C)XLConnect::readWorksheetFromFile(“Dataframe.xlsx”,sheet=3,header=FALSE)
D)All of the above
答案:(D)
上述的全部选项都是正确的,它们采用了不同的方法来将Excel文件读取入R语言,且都正确读取了文件。因此,D选项是正确答案。
文件名:Dataframe.csv
5)上述csv文件中缺失的值被感叹号(“!”)和问号(“?”)所代替。下列哪行代表可以正确将上述csv文件读取进R语言?
A) csv(‘Dataframe.csv’)
B) csv(‘Dataframe.csv’,header=FALSE, sep=’,’,na.strings=c(‘?’))
C) csv2(‘Dataframe.csv’,header=FALSE,sep=’,’,na.strings=c(‘?’,’!’))
D) dataframe(‘Dataframe.csv’)
Solution: (C)
选项A不能在R语言中把“?” 和“!”读取为“NA”;选项B只能把“?”读取为“NA”而“!”不能;选项4并不存在。因此,选项C是正确答案。
文件名:Dataframe.csv
上述csv文件既有行名称又有列名称。下面哪行代码能够正确地将该csv文件读入R语言?
A) delim(‘Train.csv’,header=T,sep=’,’,row.names=TRUE)
B) csv2(‘Train.csv’,header=TRUE, row.names=TRUE)
C) dataframe(‘Train.csv’,header=TRUE,sep=’,’)
D) csv(‘Train.csv’,,header=TRUE,sep=’,’)
答案:(D)
A和B选项中的row.names参数仅仅引用有包含实际行名称的矢量本身或者一个指向包含行名称的列值数字,而并非一个有效的逻辑值。选项C并不存在。因此,D选项是正确答案。
文件名:Dataframe.csv
下列哪行代码将只读取csv文件中的前两行?
A) csv(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,nrows=2
B) csv2(‘Dataframe.csv’,row.names=1,nrows=2)
C) delim2(‘Dataframe.csv’,header=T,row.names=1,sep=’,’,nrows=2)
D) dataframe(‘Dataframe.csv’,header=TRUE,row.names=1,sep=’,’,skip.last=2)
答案:(A)
因为在csv2函数中的默认分隔符是“;”,而csv文件是“,”,B选项将不能正确读取csv文件,选项C使用了错误的参数值,选项D不存在。因此,选项A是正确答案。
上图为两个数据框,数据1和数据2。
下列哪行代码可以执行出下述结果?
A) merge(dataframe[,1:3],dataframe2)
B) merge(dataframe1,dataframe2)[,1:3]
C) merge(dataframe1,dataframe2,all=TRUE)
D) Both 1 and 2
E) All of the above
答案:(D)
C选项会导致融合后的数据框中包含feature 4,而这不是我们想要的结果。因此,D选项是正确答案。
R语言中已读取了一个数据集并存储在变量“dataframe”中。下列哪行代码可以实现整个数据集的总结(平均数、中位数、众数)?
A) summary(dataframe)
B) stats(dataframe)
C) summarize(dataframe)
D) summarise(dataframe)
E) None of the above
答案:(E)
A选项只会给出平均值和中位数,而不会给出众数。B,C,D选项同样不能提供所需统计信息。因此,E选项是正确答案。
下列哪行代码将不能给出每一列的缺失值?
A) colSums(is.na(dataframe))
B) apply(is.na(dataframe),2,sum)
C) sapply(dataframe,function(x) sum(is.na(x))
D) table(is.na(dataframe))
答案:(D)
D选项将给出缺失值的总数而非每列单独给出。因此,D选项是正确答案。
下列哪个命令能够帮助我们完成任务?
A) hist(dataframed$Value)
B) ggplot2::qplot(dataframed$Value,geom=”Histogram”)
C)ggplot2::ggplot(data=dataframed,aes(dataframe$Value))+geom_histogram()
D) All of the above
答案:(D)
所有给出选项都可以绘制柱状图并可以查看数据的偏度。
诸如XGBOOST等算法只对数值数据有效。在这种情况下,数据集中的分类变量将先被转化为虚拟变量,其可以展示数据集中某个分类是否存在。比如,当对“Parameter”项数据创建虚拟变量后,数据集显示如下。
下面中的哪个命令能实现这个功能?
A) dummies:: dummy.data.frame(dataframe,names=c(‘Parameter’))
B) dataframe$Parameter_Alpha=0
dataframe$Gende_Beta=0
dataframe$Parameter_Alpha[which(dataframe$Parameter==’Alpha’)]=1
dataframe$Parameter_Beta[which(dataframe$Parameter==’Alpha’)]=0
dataframe$Parameter_Alpha[which(dataframe$Parameter==’Beta’]=0
dataframe$Parameter_Beta[which(dataframe$Parameter==’Beta’]=1
C) contrasts(dataframe$Parameter)
D)A和B
答案:D
C选项会将Parameter列的值变成两种类型但不会进行独热编码(one hot encoding)。因此,选项D是正确选择。
以上为名为dataframe的变量。
我们想计算数据表中第二列和第三列之间的相关性,下面代码中的哪个能实现这个目的?
A) corr(dataframe$column2,dataframe$column3)
B) (cov(dataframe$column2,dataframe$column3))/(var(dataframe$column2)*sd(dataframe$column3))
C)
(sum(dataframe$Column2*dataframe$Column3)- (sum(dataframe$Column2)*sum(dataframe$Column3)/nrow(dataframe)))/(sqrt((sum(dataframe$Column2*dataframe$Column2)-(sum(dataframe$Column2)^3)/nrow(dataframe))* (sum(dataframe$Column3*dataframe$Column3)-(sum(dataframe$Column3)^2)/nrow(dataframe))))
D)以上都不是
答案:(D)
在选项A中,corr是错误的函数写法。实际的计算相关性的函数写法是:cor。在选项B中,分母应该是标准差而不是方差。相似地,选项C中的公式是错误的。因此,选项D是正确选择。
上述数据集已经加载进了你的R运行空间中,变量名为“dataframe”,第一行代表列名称。以下哪个代码将仅选择参数为Alpha的行?
A) subset(dataframe, Parameter=’Alpha’)
B) subset(dataframe, Parameter==’Alpha’)
C) filter(dataframe,Parameter==’Alpha’)
D) B和C
E) 上面全部
答案:(D)
A选项中,应该用等值运算符取代赋值运算符,因此选项D正确。
以下哪个函数用于以电子表格格式观察数据集?
A) disp()
B) View()
C) seq()
D) 以上全部
答案:(B)
选项B是采用电子表格形式查看数据集的唯一选项。因此选项B是正确答案。
设定B是一个分类变量,我们需要为每一个分类级别画一个箱线图。以下哪一个命令能帮助我们实现这个功能?
A) boxplot(A,B,data=data)
B) boxplot(A~B,data=data)
C) boxplot(A|B,data=data)
D) 以上都不是
答案(B)
R中画箱线图的函数要求公式中要有分类因素,通过这些分类因素绘制不同的箱线图。因此选项B是正确的答案。
下面命令中的哪一个能把绘图窗口分成4×3的窗口?同时绘图逐列输入窗口。
A) par(split=c(4,3))
B) par(mfcol=c(4,3))
C) par(mfrow=c(4,3))
D) par(col=c(4,3))
答案:(B)
mfcol命令参数能保证图像逐列输入绘图窗口。因此,选项B是正确答案。
一个数据表变量 “df” 具有如下数据:
Dates
2017-02-28
2017-02-27
2017-02-26
2017-02-25
2017-02-24
2017-02-23
2017-02-22
2017-02-21
我们希望把它读取成如下格式:
28 Tuesday Feb 17
27 Monday Feb 17
26 Sunday Feb 17
25 Saturday Feb 17
24 Friday Feb 17
23 Thursday Feb 17
22 Wednesday Feb 17
21 Tuesday Feb 17
下面命令中的哪些(个)能产生期望的输出?
A) format(df,”%d %A %b %y”)
B) format(df,”%D %A %b %y”)
C) format(df,”%D %a %B %Y”)
D) 以上都不是
答案: (D)
以上的选项都不能产生期望的输出。因此选项D是正确答案。
下列哪个命令能将数据表“table”的第二列名称由alpha改成beta
A) colnames(table)[2]=’beta’
B) colnames(table)[which(colnames==’alpha’)]=’beta’
C) setnames(table,’alpha’,’beta’)
D) 以上所有
答案: (D)
上面的选项都是重命名数据表中列名称的不同方法,因此,选项D是正确答案。
R运行中的大部分工作都使用系统内存,如果同时采用大的数据集,当R的工作空间不能保证所有的R对象都保持在内存中时问题就出现了。在这样的情况下,移除无用的对象是一种解决方法。
下面命令中的哪个或哪些可以从工作空间中移除R对象或变量“santa”?
A) remove(santa)B) rm(santa)C) 上面全部D) 都不是
答案 : (C)
remove 和 rm,都能用于清理工作空间。因此选项C是正确答案。
“dplyr”是R中最流行的工具包之一,它包括5个核心数据处理函数。下面选项中的哪一个不是dplyr中的核心函数?
A) select()
B) filter()
C) arrange()
D) summary()
答案: (D)
summary 是R语言基础工具包中的函数而不是dplyr中的函数。
下面命令中的哪些(个)能选择“table”中列3到列6中的所有行?
A) dplyr::select(table,Column3:Column6)
B) table[,3:6]
C) subset(table,select=c(‘Column3’,’Column4’,’Column5’,’Column6’))
D) 以上全部
答案: (D)
选项A、B和C都是不同的选取列的方法,所以选项D是正确答案。
以上为变量名为table的数据表。
下面哪个(些)命令会选取列1中带有“alpha”值的行,同时选取列4中数值小于50的项?这个数据表存储在名为“table”的变量中。
A) dplyr::filter(table,Column1==’Alpha’, Column4<50)
B) dplyr::filter(table,Column1==’Alpha’ & Column4<50)
C) 以上全部
D) 以上都不是
答案: (A)
dplyr中的filter函数使用“,”来添加条件,而不是“&”。因此,选项A是正确答案。
以上为变量名为table的数据表。
下面代码中的哪些(个)能把数据表基于列2进行升序排列,同时对列3进行降序排列?
A) dplyr::arrange(table,desc(Column3),Column2)
B) table[order(-Column3,Column2),]
C) 以上全部
D) 以上都不是
答案: (C)
order和arrange函数都能用于在R中对列进行分类。因此选项C是正确答案。
处理字符串数据(string)是文本分析的一个重要组成部分,当创建参数符号或其它符号时,分割字符串经常是一项常用任务。下面命令行的输出是什么?
A
B
parts
parts[[1]][2]
A) alpha
B) beta
C) gamma
D) phi
E) theta
F) zeta
答案 : (B)
c(A.B) 将合并 A=”alpha beta gamma” 和 B=”phithetazeta” 并将其通过空格隔开。使用strsplit之后,之前合成的字符串会再次将A,B用空格隔开,分别生成两个list 。parts[[1]][2]命令旨在显示第一个list中的第二个元素,是“beta”。因此选项B是正确答案。
以下命令的输出是什么?
grepl(“neeraj”,c(“dheeraj”,”Neeraj”,”neeraj”,”is”,”NEERAJ”))
A) [FALSE TRUE TRUE FALSE TRUE]
B) [FALSE TRUE TRUE FALSE FALSE]
C) [FALSE FALSE TRUE FALSE FALSE]
D) None of the above
答案:(C)
上述命令将检测集合中的元素是否与前面的“neeraj”完全匹配,因此选项C是正确答案。
作为从事文本数据工作的数据科学家,我们有时会遇到这样一些情况,即发现某个不需要的单词多次出现。以下就是一个此类的字符串。
A
A) gsub(“because”,”since”,A)
B) sub(“because”,”since”,A)
C) regexec(“because”,”since”,A)
D) None of the above
答案:(A)
sub命令仅替换字符串中第一次出现的单词,而regexec将返回匹配的位置列表,如果没有匹配则返回-1。因此,选项A是正确答案。
28)想象一个通过以下代码创建的数据框。
以下哪个命令能够在这两列上帮助我们删除重复行?
A) df[!duplicated(df),]
B) unique(df)
C) dplyr::distinct(df)
D) All of the above
答案:(D)
上述所有答案都是基于这两列删除重复行的不同方法。因此,选项D是正确答案。
分组(grouping)是数据分析中的一项重要活动,它可以帮助我们发现一些有趣的趋势,这些趋势在原始数据中可能并不易被发现。
假设你有一个由以下代码行创建的数据集。
table
以下哪个命令能帮我们计算出由foo变量分组的bar变量的平均值?
A) aggregate(bar~foo,table,mean)
B) table::df[,mean(bar),by=foo]
C) dplyr::table%>%group_by(foo)%>%summarize(mean=mean(bar))
D) All of the above
答案:(D)
所有上述方法都可用于计算列的分组统计值。因此,选项D是正确答案。
如果我有两组矢量x < - c(1,3,5)和y
A)一个两列三行的矩阵
B)一个三列两行的矩阵
C)一个两列三行的数据框
D)一个三列两行的数据框
答案:(D)
上述所有选项定义的都是杂乱数据,因此选项D是正确答案。
A) tidyr::Gather(maverick, Sex,Count,-Grade)
B) tidyr::spread(maverick, Sex,Count,-Grade)
C) tidyr::collect(maverick, Sex,Count,-Grade)
D) None of the above
答案:(A)
Spread命令是将行转换为列,而在tidyr包或基础包中没有collect这一命令。因此,选项A是正确答案。
下列哪一命令能帮助我们将下列矢量所有Delhi换成Delhi_NCR ?
C
A) gsub(“Delhi”,”Delhi_NCR”,C)
B) sub(“Delhi”,”Delhi_NCR”,C)
C) Both of the above
D) None of the above
答案:(C)
虽然sub命令仅能替换第一次出现的模式,但在本情境下,字符串中只出现了一个Delhi。因此,在这种情况下,gsub和sub命令都有效。所以,选项C是正确答案。
A)
dataframe$missing
dataframe$Missing[is.na(dataframe$Feature2)]
B)
dataframe$missing
dataframe$Missing[which(is.na(dataframe$Feature2))]
C) Both of the above
D) None of the above
答案:(C)
选项C是正确答案。
假设有2个数据框“A”和“B”。A有34行,B有46行。运行以下命令后,所得数据框的行数是多少?
merge(A,B,all.x=TRUE)
A) 46
B) 12
C) 34
D) 80
答案:(C)
all.x表示以A为基础进行合并,因此合并后的数据框将包含与A相同的行数。所以,选项C是正确答案。
加载数据集后,数据科学家通常做的第一件事就是明确数据集所包含的行数和列数。更专业地讲,这是了解数据集的维度。这样做是为了明确正在处理的数据规模,然后选择正确的技术和工具。
以下哪个命令不能帮我们查看数据集的维度?
A) dim()
B) str()
C) View()
D) None of the above
答案:(C)
View命令能够以类似电子表格的格式将数据集打印到控制台,但不能帮助我们查看数据集维度。因此,选项C是正确答案。
以下命令的输出是什么?
setdiff(dataframe$Column1,dataframe$Column6)==setdiff(dataframe$Column6,dataframe$Column1)
A) TRUE
B) FALSE
C) Can’t Say
答案:(B)
参数的顺序在setdiff函数中很重要。因此,选项B是正确答案。
以下哪个命令可以为上述数据集创建条形图。使用B列中的值来表示条形图的高度。
A) ggplot(frame,aes(A,B))+geom_bar(stat=”identity”)
B) ggplot(frame,aes(A,B))+geom_bar(stat=”bin”)
C) ggplot(frame,aes(A,B))+geom_bar()
D) None of the above
答案:(A)
stat =“identity”将确保B列中的值成为条形图的高度。因此,选项A是正确答案。
我们希望为cyl变量创建一个堆叠条形图,堆叠标准为“要素vs数量”。以下哪个命令将帮助我们执行此操作?
A)qplot(factor(cyl),data=mtcars,geom=”bar”,fill=factor(vs)
B) ggplot(mtcars,aes(factor(cyl),fill=factor(vs)))+geom_bar()
C) All of the above
D) None of the above
答案:(C)
选项A和B都将创建一个由“fill”参数引导的堆叠条形图。因此,选项C是正确答案。
39)命令paste(1:3,c(“x”,“y”,“z”),sep =“”)的输出是什么?
A) [1 2 3x y z]
B) [1:3x y z]
C) [1x 2y 3z]
D) None of the above
答案:(C)
R语言拥有丰富的资源,可以用来绘制非常高端的图表,很多时候你想保存图表以便向他人展示。那么,将你的图表保存为PDF文件便是这一种选择。
如果要将图表保存为PDF文件,下列哪项做法正确?
A) Construct the plot on the screen device and then copy it to a PDF file with dev.copy2pdf().
B) Construct the plot on the PNG device with png(), then copy it to a PDF with dev.copy2pdf().
C) Open the PostScript device with postscript(), construct the plot, then close the device with dev.off().
D) Open the screen device with quartz(), construct the plot, and then close the device with dev.off().
答案:(A)
首先在屏幕设备上创建图表,然后可以轻松地复制到pdf文件中。因此,选项A是正确答案。
用以上的四十道题来检验自己R语言的编程能力吧!祝大家编程愉快,早日脱单!
原文链接:https://www.analyticsvidhya.com/blog/2017/05/40-questions-r-for-data-science/