《第4章 数据基本管理教学课件R语言数据分析与挖掘.pptx》由会员分享,可在线阅读,更多相关《第4章 数据基本管理教学课件R语言数据分析与挖掘.pptx(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章 数据基本管理教学课件R语言数据分析与挖掘目录PAGE数据去重01202数据筛选03数据合并04数据排序数据关联0106融合重铸07数据聚合08数据转换05数据分组PAGE3数据基本管理常用的数据基本管理手段包括:数据去重、数据排序、数据筛洗、数据合并、数据聚合等操作3R语言数据分析与挖掘(微课版)PAGE数据去重401PAGE5数据去重我们可以通过base扩展包的unique()函数或者dplyr扩展包的distinct()函数轻松实现。其中unique()函数能对矩阵、数组或数据框进行操作,移除重复元素或记录。在做数据分析及建模时,遇到最多的数据对象当属数据框。以下代码实现分别利用u
2、nique()和distinct()函数对数据框的重复记录进行删除。5R语言数据分析与挖掘(微课版)set.seed(1234)df-data.frame(x1=sample(1:3,8,replace=T),x2=sample(letters1:3,8,replace=T)dfx1 x21 2 c2 2 b3 1 b4 3 b5 1 c6 1 b7 2 b8 2 b(a-unique(df)x1 x21 2 c2 2 b3 1 b4 3 b5 1 cif(!require(dplyr)install.packages(dplyr)#加载dplyr包,如不存在就进行在线安装(b set.see
3、d(1234)v v 1 10 6 5 4 1 8 2 7 9 3 sort(v)1 1 2 3 4 5 6 7 8 9 10 order(v)1 5 7 10 4 3 2 8 6 9 1PAGE数据筛选803PAGE9数据筛选有时候,我们更关注数据集中的部分数据,可以利用R语言强大的索引特性来定位符合筛选条件的元素。比如我们查看鸢尾花数据集iris前6行、第1,3,5列的数据子集,以下代码通过指定下标集的方式实现。也可以根据表达式得到符合条件的数据子集。比如想提取变量Sepal.Length值大于5.5且变量因子水平为setosa的数据子集,可通过以下代码实现。9R语言数据分析与挖掘(微课版
4、)iris1:6,c(1,3,5)Sepal.Length Petal.Length Species1 5.1 1.4 setosa2 4.9 1.4 setosa3 4.7 1.3 setosa4 4.6 1.5 setosa5 5.0 1.4 setosa6 5.4 1.7 setosa irisiris$Sepal.Length5.5&iris$Species=setosa,Sepal.Length Sepal.Width Petal.Length Petal.Width Species15 5.8 4.0 1.2 0.2 setosa16 5.7 4.4 1.5 0.4 setosa1
5、9 5.7 3.8 1.7 0.3 setosaPAGE10数据筛选-subset()函数基础包的subset()函数非常适合做数据筛选的工作。subset()函数主要参数有两个:参数subset是逻辑表达式,用来过滤符合条件的行或元素;参数select是用来选择需要保留的列。下面以汽车数据集mtcars为例,讲解subset()函数的用法。10R语言数据分析与挖掘(微课版)subset(mtcars,cyl=4,select=mpg:hp)mpg cyl disp hpDatsun 710 22.8 4 108.0 93Merc 240D 24.4 4 146.7 62Merc 230 22
6、.8 4 140.8 95Fiat 128 32.4 4 78.7 66Honda Civic 30.4 4 75.7 52Toyota Corolla 33.9 4 71.1 65Toyota Corona 21.5 4 120.1 97Fiat X1-9 27.3 4 79.0 66Porsche 914-2 26.0 4 120.3 91Lotus Europa 30.4 4 95.1 113Volvo 142E 21.4 4 121.0 109还可以给参数subset传递正则表达式,返回符合条件的模糊匹配结果。以下代码实现提取汽车名称包含“Merc”或“Fiat”文字的记录。现在想筛选
7、出气缸数(cyl)为4,前4列的数据子集,可以通过以下代码实现。PAGE11数据筛选-filter()函数dplyr扩展包的filter()函数也能对数据进行筛选操作。以下代码通过两种方式实现提取变量cyl值为4的数据子集。11R语言数据分析与挖掘(微课版)PAGE数据合并1204PAGE13数据合并-rbind()和cbind()函数基础包的行合并rbind()和列合并cbind()函数在第二章已经接触过。这两个函数很简单,大家记住一点:rbind()函数使用时要确保各数据对象具有相同的列数,cbind()使用时要确保各数据对象具有相同的行数。13R语言数据分析与挖掘(微课版)PAGE14数
8、据合并-bind_rows()和bind_cols()函数在dplyr扩展包中有bind_rows()和bind_cols()函数实现简单的行列合并功能,需要注意的一点是,这两个函数只能操作数据框。继续以r1、r2为例进行说明,在使用函数前,需要将数据对象转换成数据框。14R语言数据分析与挖掘(微课版)PAGE数据关联1505PAGE16数据关联-merge()函数通过cbind()函数可以实现简单的数据合并,如果想实现更复杂的数据匹配,就需要借助merge()函数了。R语言中的merge()函数类似于Excel中的Vlookup()函数,可以实现对两个数据表进行匹配和拼接功能。merge()
9、函数的表达形式如下:16R语言数据分析与挖掘(微课版)merge(x,y,by=intersect(names(x),names(y),by.x=by,by.y=by,all=FALSE,all.x=all,all.y=all,sort=TRUE,suffixes=c(.x,.y),no.dups=TRUE,incomparables=NULL,.)PAGE17数据关联-merge()函数4种拼接模式merge()函数有4种匹配拼接模式,分别为inner,left,right和outer模式。其中inner为默认的匹配模式,代表内连接;all=T代表全连接;all.x=T代表左连接;all.y
10、=T代表右连接。17R语言数据分析与挖掘(微课版)PAGE18数据关联-merge()函数一次只能拼接两张表merge()函数一次只能匹配两个表,如果想实现两张表以上的关联,则需要多次运用merge()函数实现。比如现在多了一个数据框math_score,记录了学生名字和数学成绩。以下代码实现将学生性别、英语成绩、数学成绩关联到一个宽表中18R语言数据分析与挖掘(微课版)PAGE19数据关联-dplyr包dplyr扩展包的left_join()、right_join()、inner_join()、full_join()函数也能轻松实现左连接、右连接、内连接和全连接。以下代码利用full_joi
11、n()函数结合管道符号%实现df_join2的效果。19R语言数据分析与挖掘(微课版)student%+full_join(english_score,by=name)%+full_join(math_score,by=c(name=stu_name),suffix=c(.english,.math)PAGE数据转换2006PAGE21数据转换-transform()函数让我们学习如何利用transform()函数进行数据转换。当重新赋值的标签在数据集变量名中未出现时,则会在数据集后面新增列。以下代码实现将变量vs、am值进行转换后分别赋值给变量Engine、Transmission,此时会在
12、mtcars中新增两列。21R语言数据分析与挖掘(微课版)PAGE22数据转换-dplyr包dplyr扩展包的mutate()和transmute()函数都可对数据进行变换,两者的区别在于mutate()函数返回数据集所有变量的结果,transmute()函数只返回转换的变量结果。当将变量赋值为NULL时,mutate()函数也能移除数据中已经此变量。下面代码实现利用mutate()函数移除mtcars中的变量Engine和Transmission。22R语言数据分析与挖掘(微课版)library(dplyr)mtcars%mutate(+Engine=NULL,+Transmission=N
13、ULL+)colnames(mtcars)1 mpg cyl disp hp drat wt qsec vs am gear carbPAGE融合重铸2307PAGE24长数据、宽数据开始进行数据重铸前,有必要先了解什么是长数据、宽数据?长数据一般是指数据集中的变量没有做明确的细分,即存在变量元素重复情况(比如所离散变量),表格整体的形状为长方形,即行数多列数少。宽数据是指数据集对所有变量进行了明确细分,各变量的值不存在重复循环的情况也无法归类。数据总体的表现为列数多行数少。R语言中的reshape扩展包、reshape2扩展包、tidyr扩展包均有函数实现数据融合或重铸。三个扩展包都是ggp
14、lot2扩展包的作者Hadley Wickham(被称作“一个改变R的人”)杰作,可以通过install.packages(“包名”)进行在线安装。reshape扩展包中的melt()函数用于将宽数据转换为长数据,即将多行聚成列,从而将二维数据列表变成一维数据列表;cast()函数用于将长数据转换为宽数据,将一列根据变量展开为多行,从而将一维数据列表变成二维数据列表。24R语言数据分析与挖掘(微课版)PAGE25将宽数据转换为长数据以下代码利用函数将chinese、english、mathematics三门成绩合为一列class,从而将二维数据列表变成一维数据列表。25R语言数据分析与挖掘(微
15、课版)#使用reshape扩展包 df_melt#使用reshape2扩展包 df_melt1#使用tidyr扩展包 df_gather df_gather name gender class score1 Emily female chniese 772 Jacob male chniese 653 Emma female chniese 714 Emily female english 965 Jacob male english 686 Emma female english 647 Emily female mathematics 758 Jacob male mathematics
16、859 Emma female mathematics 73 set.seed(1234)df df name gender chinese english mathematics1 Emily female 77 96 752 Jacob male 65 68 853 Emma female 71 64 73PAGE26将长数据转换为宽数据以下代码分别利用reshape扩展包的cast()函数、reshape2扩展包的dcast()函数、tidyr扩展包的spread()函数将经过融合后的数据重铸成以前的样子。26R语言数据分析与挖掘(微课版)#使用reshape扩展包 df_cast#使用
17、reshape2扩展包 df_dcast#使用tidyr扩展包 df_spread df_spread name gender chinese english mathematics1 Emily female 77 96 752 Emma female 71 64 733 Jacob male 65 68 85PAGE数据聚合2708PAGE28常见聚合函数R语言内置了用于计算数据集中及离散趋势指标的函数。常见聚合函数及功能如表所示。28R语言数据分析与挖掘(微课版)PAGE29自定义函数以下代码实现自定义统计指标函数,计算向量x的各项指标。29R语言数据分析与挖掘(微课版)set.seed
18、(1234)(x#自定义描述统计函数 stat.desc stat.desc(x)$求和1 55$累计求和 1 10 16 21 25 26 34 36 43 52 55$最大值1 10$最小值1 1$平均值1 5.5$中位数1 5.5$百分位数 0%25%50%75%100%1.00 3.25 5.50 7.75 10.00$极差1 9$四分位距1 4.5$方差1 9.166667$标准差1 3.02765$变异系数1 0.5504819PAGE30结合dplyr包以上聚合函数结合dplyr扩展包的summarise()、summarise_all()、summarise_at()、summ
19、arise_if()等函数,可以实现更丰富的数据描述统计分析。以mtcars数据集为例,下面代码实现通过summarise()函数计算变量mpg的平均值、中位数、标准差。如果想同时计算mpg、disp变量的平均值、中位数和标准差,可以通过summarise_at()函数实现。30R语言数据分析与挖掘(微课版)mtcars%+summarise(mean=mean(mpg),median=median(mpg),sd=sd(mpg)mean median sd1 20.09062 5.5 3.02765 mtcars%+summarise_at(vars(mpg,disp),+list(mean
20、=mean,median=median,sd=sd)mpg_mean disp_mean mpg_median disp_median mpg_sd disp_sd1 20.09062 230.7219 19.2 196.3 6.026948 123.9387PAGE数据分组3109PAGE32数据分组R语言基本包中的aggregate()函数能非常出色地完成此工作。此外,doBy包扩展的summaryBy()、psych扩展包的describe.by()函数也能对数据集进行分组描述统计量计算。aggregate()函数的基本表达形式如下:aggregate(x,by,FUN,.,simpli
21、fy=TRUE,drop=TRUE)其中,参数x是需要被计算的数据对象;参数by是按照哪些变量进行分组,当有多个变量时,需要组成list对象;参数FUN是指定需要进行的统计量。以下代码实现对mtcars数据寿险按照变量am、vs进行分组,再计算变量mpg、disp的平均值。32R语言数据分析与挖掘(微课版)aggregate(mtcars,c(mpg,disp),by=list(am=mtcars$am,vs=mtcars$vs),+FUN=mean)am vs mpg disp1 0 0 15.05000 357.61672 1 0 19.75000 206.21673 0 1 20.74286 175.11434 1 1 28.37143 89.8000