原文:10 Tips And Tricks For Data Scientists Vol.4[1]
译者:赵西西
原博客简介:Predictive Hacks 是与数据科学相关的一切的在线资源中心。该博客由一群数据科学家所运营,专注于讲解在各种领域如何使用大数据技术(从机器学习和人工智能到业务领域)。
1 引言
前面已经介绍了一些数据分析的技巧,主要是用Python和R实现。具体内容可见:翻译|给数据科学家的10个提示和技巧Vol.1;翻译|给数据科学家的10个提示和技巧Vol.2;给数据科学家的10个提示和技巧Vol.3。今天主要是对博客的第4,5篇进行整合,并进行筛选,给出最为常用的一些数据处理的技巧。主要讲解 R,如果你对python感兴趣可以看文末的链接噢!
2 R
2.1 对不同元素进行累积计数
有时,我们会遇到有重复元素的列表(或向量),并需要对其中包含的不同值进行累积计数,这时只需要累加列表(或向量)中新元素出现的次数。
例如,有如下列表:
代码语言:javascript复制x=c("e", "a","a","b","a","b","c", "d", "e")
统计其中不同的元素个数:
代码语言:javascript复制data.frame(Vector=x,CumDistinct=cumsum(!duplicated(x)))
输出结果如下:
2.2 利用样本信息补齐缺失值
在处理数据时,常常会遇到有缺失值的情况,常用的解决方法有:(1)删除缺失值;(2)利用样本信息补齐缺失值,如均值、中位数等。
以下面数据为例:
代码语言:javascript复制df<-data.frame(id=seq(1,10), ColumnA=c(10,9,8,7,NA,NA,20,15,12,NA),
ColumnB=factor(c("A","B","A","A","","B","A","B","","A")),
ColumnC=factor(c("","BB","CC","BB","BB","CC","AA","BB","","AA")),
ColumnD=c(NA,20,18,22,18,17,19,NA,17,23)
)
df
在R中,可以利用na.omit=True
删除缺失值,这种方法适用于缺失值较少的情况;若数据缺失值较多,可利用样本信息进行补齐,方法如下:
df[sapply(df, is.numeric)] <- lapply(df[sapply(df, is.numeric)], function(x) ifelse(is.na(x), mean(x, na.rm = TRUE), x))
df
2.3 tidyverse:用select_if筛选列
dplyr
包中的select_if
函数,在按条件筛选列时非常有用,并且还可以添加不同函数来修改列名。
例如:我想选择数值型变量,并修改列名添加前缀“numeric_”。
代码语言:javascript复制library(tidyverse)
iris%>%select_if(is.numeric, list(~ paste0("numeric_", .)))%>%head()
2.4 tidyverse:用where筛选列
对2.3的例子使用where
实现相同操作:
library(tidyverse)
iris%>%rename_with(~ paste0("numeric_", .), where(is.numeric))%>%
select(where(is.numeric))%>%head()
2.5 tidyverse:用relocate指定列的位置
relocate()
是dplyr1.0.0中的新添加的。可以使用.before
或.after
指定列的确切位置。
例如:我想要Petal.Width
放在Sepal.Width
后面
library(tidyverse)
iris%>%relocate(Petal.Width, .after=Sepal.Width)%>%head()
或者:我想让Petal.Width
作为最后一列:
iris%>%relocate(Petal.Width, .after=last_col())%>%head()
参考资料
[1]
10 Tips And Tricks For Data Scientists Vol.4: https://predictivehacks.com/10-tips-and-tricks-for-data-scientists-vol-4/