R语言大数据分析与挖掘 课件 第三章 数据预处理_第1页
R语言大数据分析与挖掘 课件 第三章 数据预处理_第2页
R语言大数据分析与挖掘 课件 第三章 数据预处理_第3页
R语言大数据分析与挖掘 课件 第三章 数据预处理_第4页
R语言大数据分析与挖掘 课件 第三章 数据预处理_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章

数据预处理内容要点1、掌握R语言中的数据表的操作,包括数据表保存、数据表读取、选取子集、连接数据库。2、掌握R语言中的数据处理方法,包括对数据进行分组、分割、合并和变形,处理数据缺失值、异常值、重复值,转换数据类型,提取字符串的字符。目录CONTENTS数据表的基本操作数据分组、分割、合并和变形缺失值、异常值、重复值处理数据结构1234数据表的基本操作数据表的基本操作包括数据表保存、数据表读取、选取子集、连接数据库。数据表保存将R语言中处理完的表格数据保存到本地电脑的文件中是一个高频的动作,将数据表写入文件的函数主要有write.table()、write.csv()和save()。创建数据框student,代码如下:保存为简单文本,可以使用write.table()函数,write.table()函数的部分参数如表3-1所示(见后页),其语法格式为:代码:创建数据框studentwrite.table()函数语法格式数据表的基本操作数据表的基本操作包括数据表保存、数据表读取、选取子集、连接数据库。write.table()函数的部分参数如表3-1所示:表3-1数据表的基本操作数据表保存(续)例如,将R语言中的data数据表,导出到本地电脑中的test.txt文件中:保存为逗号分隔文本csv,可以使用write.csv()函数,其语法格式和write.table()函数一致,例如:write.table()函数语法格式write.csv()函数语法格式数据表的基本操作数据表保存(续)保存为R格式文件,使用save()函数,save()函数的部分参数如表3-2所示,其语法格式为:表3-2save()函数语法格式数据表的基本操作数据表保存(续)将student写入文件,代码如下:保存为Excel文件,需要使用xlsx包的语法格式为:其函数的参数如表3-3所示(见后页)数据表的基本操作数据表保存(续)write.xlsx()函数,其函数的参数如表3-3所示。将student数据表保存到Excel表格,代码如下:表3-3数据表的基本操作数据表读取:本节介绍从文件读取数据表到R语言中,使用的函数主要有read.table()、scan()、read.fwf()、read.xlsx()。read.table()函数read.table()函数的作用是读取文本文件,其语法格式为:数据表的基本操作数据表读取read.table()函数read.table()函数的作用是读取文本文件,它的部分参数如表3-4所示:表3-4数据表的基本操作数据表读取(续)

read.table()函数读取“C:/data”目录下的test.dat文件,代码如下:若要将数据的第一行做表头,则设置header为TRUE,代码如下:与read.table()类似的函数还有如下几种:(1)读取逗号分隔符的数据:read.csv()、read.csv2()。(2)读取其他分隔符的数据:read.delim()、read.delim2()。数据表的基本操作数据表读取(续)scan()函数scan()函数比read.table()函数更灵活,但要指定要读取数据的变量类型,语法格式为:部分参数表3-5见后。用what参数指定对应的变量类型,从而读取数据,代码如下:数据表的基本操作数据表读取(续)scan()函数scan()函数的部分参数如表3-5所示。表3-5数据表的基本操作数据表读取(续)read.fwf()函数read.fwf()函数的作用是读取文件中一些固定宽度的数据,依据设定的宽度将数据读取成指定的列,其语法格式为:部分参数表3-6见后。用read.fwf()函数读取数据,代码如下:数据表的基本操作数据表读取(续)read.fwf()函数read.fwf()函数的参数如表3-6所示:表3-6数据表的基本操作数据表读取(续)read.xlsx()函数read.xlsx()函数是程序包XLSX中的函数,要使用这个函数,需先安装XLSX包,其语法格式为:部分参数表3-7见后。读取Excel数据,代码如下:数据表的基本操作数据表读取(续)read.xlsx()函数read.xlsx()函数的作用是读取Excel文件,它的参数如表3-7所示:表3-7数据表的基本操作选取子集:在数据分析中,往往并不需要对整个数据集进行分析,只需要对其中的某些列或行进行分析,所以在数据分析中,选取数据集的子集(某些列或行)是常用的操作。创建一个用于示例的数据框,代码如下:选取子集(续)选取子集的方法有如下7种。(1)通过行数、列数选取子集,代码如下:(2)通过列名选取子集,代码如下:(3)通过生成逻辑向量法选取子集,即根据给定的条件判断每一行是否满足条件,满足则为TRUE,再通过which()函数将值为TRUE的行所在的行号取出,最终将满足条件的行从数据集中取出,代码如下:(4)通过subset()函数选取子集,此方法是将数据集、行筛选条件、列筛选条件分别作为subset()函数的参数,通过此函数将满足条件的子集取出,代码如下:(5)通过随机抽样选取子集。从StuResult数据集中随机抽取一个大小为“3”(3行)的样本,通过sample()函数随(6)通过删除对应的行数、列数选取子集,代码如下:选取子集(续)(7)通过dplyr包选取子集。Case1:dplyr包是用于数据整理的包,它提供了便捷的数据操作方式,用于选取子集的函数有filter()、select()、sample_frac()、sample_n()。安装及加载dplyr包,代码如下:Case2:选取年龄大于22岁的子集,代码如下:Case3:随机选取部分数据作为子集,以0.5为比例,随机选取数据集中一半行数的子集,代码如下:Case4:随机选择三条数据作为子集,代码如下:Case5:使用select()函数选择需要的列,代码如下:Case6:除选取子集外,dplyr包还可以对数据进行排序、计算、重命名和格式转换等。arrange()函数的作用是对数据集的所有行进行升序或者降序排列,代码如下:Case7:使用mutate()函数进行列计算,对数据集中已有列进行数据运算,将运算后的结果添加为数据集的新列,并保存已有列和新列,代码如下:Case8:使用rename()函数对字段进行重命名,代码如下:Case9:格式转换将数据集的data.frame类型转化为tibble类型(tibble是R语言中一个用来替换data.frame类型的扩展数据框,tibble继承了data.frame,同时与data.frame有相同的语法,数据表的基本操作连接数据库:R语言中的RMySQL包提供了连接和操作MySQL数据库的方法,包中有封装好的函数,可以对数据库进行数据存取等固定操作,也支持通过自定义的SQL语句对数据库进行操作。安装并加载所需库,代码如下:连接和操作MySQL数据库的步骤如下:1、连接数据库使用dbConnect()函数连接数据库,其语法格式为:(1)连接数据库,代码如下:(2)如果数据库中的数据表含有中文,那么要用以下语句设置编码,并要确保数据库的编码和设置的编码一致,否则容易出现中文乱码,代码如下:(3)查看数据库中的所有表名,代码如下:(4)关闭连接,代码如下:代码:安装并加载所需库dbConnect()函数语法格式数据表的基本操作连接数据库(续)2、读取表从数据库中读取表有三种方式,分别为使用dbReadTable()函数、dbGetQuery()函数和dbSendQuery()函数。方式1:使用dbReadTable()函数读取表,其语法格式为:使用dbReadTable()函数读取数据库中的test数据表,代码如下:方式2:使用dbGetQuery()函数获取查询结果,其语法格式为:使用dbGetQuery()函数读取数据库中的test数据表,代码如下:dbReadTable()函数语法格式代码dbGetQuery()函数语法格式代码数据表的基本操作连接数据库(续)方式3使用dbSendQuery()函数发送查询,其语法格式为:使用dbSendQuery()函数读取数据库中的test数据表,代码(1)如下:dbSendQuery()函数发送查询,此时并不会直接将查询结果读取到R语言中,而是生成一个查询结果的接口(游标),通过游标可对查询结果进行二次筛选,避免将查询结果一次性全部读取到内存中,此时可以用dbFetch()函数二次筛选并获取游标结果,代码(2)如下:RMySQL支持批量查询,在连接数据库时,设置参数client.flag为CLIENT_MULTI_STATEMENTS,用于批量查询,代码(3)如下:dbSendQuery()函数语法格式代码(1)代码(2)代码(3)数据表的基本操作连接数据库(续)3、写入表使用dbWriteTable()函数将R语言中的数据表写入数据库中的数据表,其语法格式为:其中,append=T表示追加新数据到数据库的原表中,overwrite=T表示覆盖数据库中原表的数据。如果表名不存在,那么自动在数据库中新建对应的数据表。将db数据框追加到数据库的z_test1数据表中,代码如下:4、删除表使用dbRemoveTable()函数删除数据库中的数据表,其语法格式为:删除名为z_test1的表,代码如下:dbWriteTable()函数语法格式代码dbRemoveTable()函数语法格式代码数据分组、分割、合并和变形在分析一个大型的结构化的数据集时,往往会从数据集中抽取出部分数据进行专项分析。结构化的数据集,更易于进行分组、分割、合并等处理,处理后的数据可以进行组内数据对比等分析。数据分组数据分组是将数据分成多个片段或组的方法。在统计学中,数据分组是非常重要的分析方法。它根据统计研究的需要,可以将原始数据按照某种标准划分成不同的组别。分组后的数据称为分组数据。在R语言中可以通过cut()函数和plyr包中的ddply()函数进行数据分组。数据分组、分割、合并和变形数据分组:cut()函数cut()函数cut()函数的作用是将连续型变量x分割为n个水平因子,它的参数如表3-8所示,其语法格式为:cut()函数语法格式表3-8数据分组、分割、合并和变形数据分组:cut()函数将数据自动平均分成3个分组,代码如下:使用cut()函数可以对日期型对象按照日期粒度(如周、月、季度或者年)进行分组。创建日期向量,使用as.Data()函数将文本转换成日期对象,代码如下:将dates向量按月份分组,代码如下:将dates与dates.bymonth组合成新的数据框,代码如下:数据分组、分割、合并和变形数据分组:plyr包plyr包plyr包中有ddply()函数,ddply()函数可以对数据进行分组,它的参数如表3-9所示,其语法格式为:将鸢尾花数据集(R语言自带的数据集)根据Species字段进行分组,代码如下:ddply()函数语法格式表3-9数据分组、分割、合并和变形数据分割数据分割指将数据分割成多个小片段。和数据分组不同的是,数据分割保留了数据的完整性,数据分割后还可以还原,而数据分组后可能无法还原回分组前的数据。对数据的分割转换,可以采用split()函数来进行处理。split()函数的参数如表3-10所示,其语法格式为:按照鸢尾花数据集的Species进行分割,代码如下:计算a对象内各分组的长度,代码如下:split()函数还有一个逆函数unsplit(),它可以让分割后的数据还原为原数据。和split()函数功能接近的函数有strsplit()函数(对字符串分割)及subset()函数(对向量、矩阵或数据框按给定条件取子集)等。split()函数语法格式表3-10代码:分割Spedes代码:计算长度数据分组、分割、合并和变形数据合并:在实际应用中,需要分析的数据可能来自不同的数据集,如产品销售额来自销售报表,产品库存来自库存报表,此时就需要对销售报表与库存报表进行合并,数据合并可以将多个数据集合并成一个数据集。merge()函数语法格式横向合并进行横向合并的前提是待合并的数据集中必须都有一个(或者多个)相同的关键变量,此关键变量是连接两个表的依据,只有具有相同关键变量的数据集才可以进行横向合并。数据横向合并可使用merge()函数,其语法格式为:在使用merge()函数时有以下注意事项。(1)merge(a,b)指纯粹地把两个数据集合在一起,没有指定连接a,b数据集的关键变量by,这样出现的数据很多,相当于a×b条数据。(2)merge()函数可设置多种连接方式,通过设置all相关参数实现。1.all=F代表内连接,为默认值,可以匹配到a,b数据集的并集,即两个数据集中都有的数据才会被匹配出来进行合并。2.all=T代表全连接,即将a,b表所有的数据都进行合并,匹配到的数据行合并到同一行,没有匹配到的数据直接合并到新的一行,同时将没有匹配到的字段填充为NA。3.all.x=T代表左连接,以左表a为主表,右表b为副表,将b表中与a表匹配的部分合并到a表中。4.all.y=T代表右连接,以左表a为副表,右表b为主表,将a表中与b表匹配的部分合并到b表中。数据分组、分割、合并和变形数据合并(续)创建两张学生信息表,进行内连接合并(All=F,默认值,省略),代码如下:用merge()函数进行全连接合并(all=T),代码如下:用merge()函数进行内连接合并(all=F,不省略),代码如下:数据分组、分割、合并和变形数据合并(续)纵向合并纵向合并也称为追加合并,指在同一张表(具备相同字段)的基础上追加数据,列的数量不变,只增加行的数量。纵向合并可使用rbind()函数,其参数如表3-11所示,其语法格式为:用rbind()函数合并两张数据框表格,代码如下:rbind()函数语法格式表3-11数据分组、分割、合并和变形数据合并(续)用rbind()函数合并两张数据框表格,代码如下:数据分组、分割、合并和变形数据变形:数据变形用于改变数据框、列表等数据结构的维度结构。最基本的变形函数是t()、stack()t()函数t()为转置函数,可将数据框做90°的旋转,即行变成列,列变成行。对iris数据集做结构变形,代码如下:对iris数据集做转置,代码如下:数据变形(续)unstack()函数使用unstack()函数生成多维表,代码如下:stack()函数使用stack()函数将多维表转变成一维表,代码如下:数据分组、分割、合并和变形melt()函数使用reshape2包的melt()函数实现数据变形。melt()函数的语法格式为:其中,id.vars可以指定一系列变量,生成的新数据会保留id.vars中指定的所有列,还会增加两个新列:variable和value,这两列由表中除id.vars指定之外的所有列变形而成,其中variable由原数据中的原列名组成,value由原数据中的每行的数据值组成。安装并加载reshape2包,代码如下:创建数据框,代码如下:数据变形(续)数据分组、分割、合并和变形使用melt()函数对数据进行变形,代码如下:数据变形(续)数据分组、分割、合并和变形缺失值、异常值、重复值处理缺失值、异常值、重复值处理:在实际应用中,数据收集时由于各种硬件或软件问题,收集到的数据常常是不完整(缺失数据)、有噪声(异常数据干扰)、不一致的。在开始分析前要发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理缺失值、异常值和重复值等。缺失值缺失值是指数据集中未知、未收集的值,如果缺失值会影响到后续的数据分析,则必须要对缺失值进行处理。R语言处理缺失值时主要用到mice包和VIM包。处理缺失值的步骤如下:(1)识别缺失值。(2)检查导致数据缺失的原因。(3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值。缺失值、异常值、重复值处理缺失值:识别缺失值在R语言中有如下几种缺失值类型。NA:代表缺失值。NaN:代表不可能的值。Inf:代表正无穷。-Inf:代表负无穷。R语言提供了如下一系列的函数识别缺失值。is.na():识别缺失值。is.nan():识别不可能值。is.infinite():识别无穷值。complete.cases():识别矩阵或数据框中没有缺失值的行,若每行都包含完整的实例,则返回TRUE;若每行有一个或多个缺失值,则返回FALSE。is.na()、is.nan()和is.infinite()函数的返回值示例,如表3-12所示。表3-12缺失值、异常值、重复值处理缺失值:mice包识别缺失值1)使用mice包识别缺失值mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值的表格,代码如下:结果中1为无缺失,0为缺失,结果分析如下。从行的角度看,第一行“4211111111110”包括12个值,第2~10个值“1111111111”组成了缺失特征(数据集中每一个字段的缺失情况);第1个值“42”表示的是数据集中第2~10个值所组成的缺失特征的样本数量;最后一个值“0”表示这个缺失特征缺失值、异常值、重复值处理缺失值:VIM包识别缺失值2)使用VIM包识别缺失值VIM包中提供了一些能将数据的缺失值情况进行图形可视化呈现的函数:aggr()、matrixplot()、scattMiss()等。aggr()函数的参数如表3-13所示。aggr()函数可生成两张描述数据集的缺失值图(见图3-1),左图显示各字段的缺失值数量,右图显示各种缺失特征和对应的样本数量。aggr()函数语法格式表3-13缺失值、异常值、重复值处理缺失值:VIM包识别缺失值(续)使用aggr()函数查看sleep数据集的缺失值,代码如下:输出结果如图3-1所示。从图3-1的左图可以知道数据集中缺失NonD字段的数据高达14个,从右图可以知道有42个样本是完整的,有9个样本同时缺失了NonD和Dream字段。缺失值、异常值、重复值处理缺失值:VIM包识别缺失值(续)marginplot()函数的参数如表3-14所示,marginplot()函数可生成一幅散点图,在图形边界展示两个变量之间的缺失值信息,其语法格式为:marginplot()函数语法格式表3-14缺失值、异常值、重复值处理缺失值:VIM包识别缺失值(续)使用marginplot()函数查看sleep数据集的缺失值分布,代码如下:输出结果如图3-2所示。图3-2中,从散点图的分布情况可以看出Dream和Gest基本呈负相关,左边4个红色点表示Dream有值但Gest缺失值的Dream值,右边12个红色点表示Gest有值但Dream缺失值的Gest值,最左侧的两个箱线图分别是缺失了Gest值的Dream值和正常Dream值的数值大小分布,最下方的两个箱线图分别是缺失了Dream值的Gest值和正常Gest值的数值大小分布,此方法的缺陷是只能同时看两个指标。缺失值、异常值、重复值处理缺失值:matrixplot()函数识别缺失值3)使用matrixplot()函数识别缺失值matrixplot()函数可生成展示每个实例数据的图形,其部分参数如表3-15所示,其语法格式为:

matrixplot()函数语法格式表3-15缺失值、异常值、重复值处理缺失值:matrixplot()函数识别缺失值(续)使用matrixplot()函数查看sleep数据集的数据示例分布,代码如下:输出结果如图3-3所示。图3-3中,Index表示的是数据集的行索引,灰度颜色越浅表示对应的值越小,灰度颜色越深表示值越大,红色表示对应的值为缺失值。缺失值、异常值、重复值处理缺失值:相关性识别缺失值4)用相关性识别缺失值用数值1和0替代数据集中的数据(1表示缺失,0表示存在),这样生成的新数据集称为影子矩阵。求这些指示变量间和它们对应的初始(可观测)变量间的相关性,有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。创建sleep数据集的影子矩阵,代码如下:缺失值、异常值、重复值处理缺失值:相关性识别缺失值(续)相关性函数为cor()相关性函数为cor(),cor()函数的参数如表3-16所示,其语法格式为:

cor()函数语法格式表3-16通过对每一列求方差,筛选出方差大于0的列,即有缺失值的列,再求有缺失值的列与sleep所有列之间的相关性,代码如下:输出结果为:缺失值、异常值、重复值处理缺失值:相关性识别缺失值(续)缺失值、异常值、重复值处理缺失值:检查导致缺失值产生的原因在数据收集的阶段,如果收集时没有填写对应的资料就会导致缺失值的产生。在处理数据时也可能因操作失误产生缺失值。缺失值、异常值、重复值处理缺失值:处理缺失值处理缺失值可使用多重插补(MI)法,多重插补法是一种基于重复模拟的缺失值处理方法。它是把一个包含缺失值的数据集填补缺失值后生成一个完整的模拟数据集,再重复该填补过程以生成多个模拟数据集的方法。每个模拟数据集中,缺失值将使用蒙特卡洛方法(通过随机抽样来预测缺失值的数值)来填补。此时,对每个模拟数据集用标准的统计方法(线性回归等)统计并输出一组结果,再通过组合输出结果并给出估计的结果,确定缺失值的填补值。在R语言中Amelia、mice和MI等包可使用多重插补法处理缺失值,本节将介绍mice包。mice包mice()函数首先对一个包含缺失值的数据框进行多次的缺失值插补,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失值进行插补而生成的。mice()函数的语法格式为:缺失值、异常值、重复值处理缺失值:处理缺失值(续)mice包mice()函数的部分参数如表3-17所示。表3-17缺失值、异常值、重复值处理缺失值:处理缺失值(续)mice包中的with()函数可依次对每个完整数据集应用统计方法模型。mice包中的pool()函数将这些单独的分析结果整合为一组结果,并通过最终模型的标准误差和p值评估结果,标准误差和p值都可以准确地反映因缺失值和多重插补产生的不确定性。基于mice包的插补过程,代码如下:加载mice包缺失值:处理缺失值(续)对sleep数据集进行缺失值插补,代码如下:“m=5”指的是插补数据集的数量,“5”是默认值。“meth="pmm"”指的是使用预测均值匹配(PredictiveMeanMatching,PMM)作为插补方法,代码如下:使用complete()函数可观察5个插补数据集中的任意一个,action参数用于指定查看哪一个插补数据集,代码如下:如果要删除缺失值的话,可以使用complete.cases()函数或na.omit()函数,两种方法的结果一致,代码如下:代码:对sleep数据集进行缺失值插补代码:PMM作为插补方法complete()函数语法格式缺失值、异常值、重复值处理异常值(Outlier):又称离群值,指一组测定值中与平均值的偏差超过两倍标准差的测定值。与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。异常值一般明显大于或小于其他观测值,故不难发现或剔除。常见的异常值处理办法是删除法、盖帽法、插补法。除了直接删除,还可以先把异常值变成缺失值,然后使用插补法补齐缺失值。实践中,处理异常值一般先把异常值划分为NA缺失值,然后使用插补法补齐缺失值;或者将数据返回到收集阶段,对数据进行修整。1.箱线图检测异常值箱线图检测包括四分位数检测和异常值数据点检测。箱线图绘画结果中会自带异常值,异常值根据上下边界进行判定。上下边界,分别是Q3+(Q3-Q1)和Q1-(Q3-Q1),其中Q3表示该组数据的四分之三位数(75%分位数),Q1表示该组数据的四分之一位数(25%分位数)。用箱线图检测异常值,代码如下:图3-4中,在箱型上标记出来的点就是离群点,也称为异常值。缺失值、异常值、重复值处理异常值(续)2.盖帽法处理异常值盖帽法是指将数据集的最大和最小的一部分数据切割掉或者替换成指定的值,比如,替换数据集中99%分位数以上和1%分位数以下的点,使99%分位数以上的点值等于99%分位数的点值,小于1%分位数的点值等于1%分位数的点值。获取数据集scoredata的异常数据,代码如下:取得大于99%分位数的数据值,代码如下:用which()函数找到异常值,代码如下:缺失值、异常值、重复值处理异常值(续)使用丢弃法剔除异常值,代码如下:使用均值替换异常值,代码如下:缺失值、异常值、重复值处理重复值重复值是指数据集中相同的数据或行。数据集中出现重复值一般需要进行删除。unique()函数用于删除重复项,其参数如表3-18所示,其语法格式为:unique()函数语法格式表3-18缺失值、异常值、重复值处理重复值(续)创建带有重复值的数据集,第1条和第3条记录是重复的,代码如下:unique()函数默认的是fromLast=FALSE,即若样本点重复出现,则取首次出现的,否则取最后一次出现的。列名不变,去掉重复样本值之后的行名位置仍为原先的行名位置,代码如下:取最后一次出现的重复数据,代码如下:数据类型的转换数据类型的转换是指将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。在R语言中读取数据后某些字段的数据类型并不符合字段的原类型,或者不符合即将分析时所需要的数据类型,此时就需进行数据类型的转换。判断数据类型函数R语言中有多种数据类型,许多数据操作会指定数据类型,可以使用特定的函数判断数据类型,判断数据类型的函数如表3-19所示。运行判断数据类型函数后,会依据数据的类型判断是否匹配并返回逻辑值TRUE或FALSE。判断数据类型,代码如下:表3-19数据类型的转换转换数据类型的函数在某些场景中数据类型需要进行转换,转换数据类型的函数如表3-20所示。将数值向量转换为字符串向量,代码如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论