大数据技术基础教程 课件 第10、11章 基于大数据的电商精准营销、好友案例分析_第1页
大数据技术基础教程 课件 第10、11章 基于大数据的电商精准营销、好友案例分析_第2页
大数据技术基础教程 课件 第10、11章 基于大数据的电商精准营销、好友案例分析_第3页
大数据技术基础教程 课件 第10、11章 基于大数据的电商精准营销、好友案例分析_第4页
大数据技术基础教程 课件 第10、11章 基于大数据的电商精准营销、好友案例分析_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第10章基于大数据的电商精准营销《大数据技术基础教程》学习目标/Target掌握数据的预处理方法掌握数据分析与可视化方法章节概述/

Summary随着互联网+的快速推进,电商已经深入了我们生活的方方面面。电商的快速兴起,旧的行销模式和营销理论不能满足新的经济模式。网络化的电商,不受地域限制,数据收集方便等特点,使精准化营销成为了可能。精准化营销有效率高、成本低等特点,被广泛的应用于大数据时代的电商营销中。本章主要介绍基于电商精准营销案例的数据预处理概述和数据探索与可视化。目录/Contents0102数据预处理概述数据探索与可视化数据预处理概述10.110.1数据预处理概述10.1.1数据清洗数据清洗(Datacleaning)–对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。在大数据时代,数据量众多,数据信息质量不同,只有围绕这分析目的才能快速选择出有用的数据。电商一般数据资源比较丰富,所以数据处理是重中之重。所谓的数据处理就是选取目标数据,对数据进行清洗、集成、变换和规约。10.1数据预处理概述10.1.1数据清洗(1)数据选择在实际数据分析中,数据多杂乱,分析需要花费精力、资源和成本,因此我们选择数据需要有针对性,能正确反映业务需求。从业务和分析目的入手确定样本大小10.1数据预处理概述10.1.1数据清洗(2)数据清洗缺失值处理异常值判断10.1数据预处理概述10.1.1数据清洗(3)Python数据处理实例数据选择列变量处理要求:选取data数据中'user_id','time','model_id','type','cate','brand'列的变量;行变量处理要求:选取time在2016-02-01及以后的数据(包含2016-02-01)且type=6。10.1数据预处理概述10.1.1数据清洗(3)Python数据处理实例#coding:utf8importpandasaspd#导入pandas库importnumpyasnp#导入numpy库defchoose_data(data):#选择变量'user_id','time','model_id','type','cate','brand',选取time在2016-02-01及以后的数据(包含2016-02-01)且type=6,数据类型如下:#user_idsku_idtimemodel_idtypecatebrand#02660791387782016-01-3123:59:02NaN18403#12660791387782016-01-3123:59:030.068403#2200719612262016-01-3123:59:07NaN1830#3200719612262016-01-3123:59:080.06830#4263587723482016-01-3123:59:08NaN15159##########Begin##########data=data[['user_id','time','model_id','type','cate','brand']].copy()data=data[(data['type']==6)&(pd.to_datetime(data['time'])>=pd.to_datetime('2016-02-01'))]##########End##########returndata数据选择10.1数据预处理概述10.1.1数据清洗②使用抽样方法抽取样本以及缺失值的处理defsample_data(data):

#使用pd.DataFrame.sample函数进行随机抽样,不放回的随机抽取5000个样本,数据结构如下:

#user_idsku_idtimemodel_idtypecatebrand

#02660791387782016-01-3123:59:02NaN18403

#12660791387782016-01-3123:59:030.068403

#2200719612262016-01-3123:59:07NaN1830

#3200719612262016-01-3123:59:080.06830

#4263587723482016-01-3123:59:08NaN15159

##########Begin##########data=data.sample(5000)

##########End##########

returndatadefclear_data(df):

#根据提示完成下列操作,案例数据结构如下:

#col1col2col3col4

#0-1.055712-0.196175-0.813023-0.806857

#10.972878NaN-1.722135-0.638893

#20.444641-0.189607-0.1993073.496211

#30.273065-1.9708870.9541700.823823

#40.729248-1.0366441.398436NaN

#5-0.3234390.208351-0.429920-0.175628

##########Begin##########

#直接删除缺失值样本,直接在下面补全代码实现要求的功能,例如nan_result_pd1=df.dropna()nan_result_pd1=df.dropna()

#用后面的值替换缺失值

nan_result_pd2=df.fillna(method='backfill')

#用前面的值替换缺失值

nan_result_pd3=df.fillna(method='pad')

#用0替换缺失值

nan_result_pd4=df.fillna(0)

#用不同值替换不同列的缺失值,col2的确实值使用1填充,col4的确实值使用2来填充

nan_result_pd5=df.fillna({'col2':

1,

'col4':

2})

#用平均数代替,选择各自列的均值替换缺失值

nan_result_pd6=df.fillna(df.mean()['col2':'col4'])##########End##########return10.1数据预处理概述10.1.1数据清洗③重复值的处理在实际业务中数据复杂多样,有些重复数据可以反应实际的业务情况。但是大部分重复数据会影响对结果的分析,所以数据清洗中需要删除不能反应业务的重复数据。Python的pandas包中提供一个DataFrame.drop_duplicates

函数,可以方便的处理重复值。#coding:utf8importpandasaspd#请完善drop_duplicate_value函数,实现对data数据样本去重,

defdrop_duplicate_value(data):#实现样本去重##########Begin##########data=data.drop_duplicates()#使用pandas中去重函数,函数默认保留重复样本的第一条

##########End##########returndata10.1数据预处理概述10.1.1数据清洗④异常值处理待处理的数据如下:col1col201121200172331355342225123261343defclear_unnormal_data(df):#异常值处理,我们这里认为当连续的变量值在2.2个标准差外算作异常值,并删除异常值####################数据###########col1col2#0112#120017#2331#3553#4222#51232#61343############################################Begin##########df_zscore=df.copy()#复制一个用来存储Z-score得分的数据框cols=df.columns#获得数据框的列名forcolincols:#循环读取每列df_col=df[col]#得到每列的值z_score=(df_col-df_col.mean())/df_col.std()#计算每列的Z-score得分df_zscore[col]=z_score.abs()>2.2#判断Z-score得分是否大于2.2,如果是则是True,否则为Falsedf=df[df_zscore.sum(axis=1)==0]#删除异常数据样本##########End##########returndf

Python实现代码如下:10.1数据预处理概述10.1.1数据清洗(4)数据转换变量类型转换改善变量分布的转换区间型变量的分箱转换变量进行标准化操作10.1数据预处理概述10.1.1数据清洗(4)数据转换实现对下列数据sex和level的转换和标准化操作。idsexlevelscoremark03566841malehigh1316541227Femalelow2323512441Femalemiddle3233566842malehigh4143566843Femalelow5253566844Femalemiddle6563566845malehigh3673566846Femalelow5783566847Femalemiddle6910.1数据预处理概述10.1.1数据清洗(4)数据转换#coding:utf8importpandasaspd#导入pandas库fromsklearn.preprocessingimportOneHotEncoder,LabelEncoder#导入库importnumpyasnpfromsklearnimportpreprocessing#df数据框的数据结构如下:#idsexlevelscoremark#03566841malehigh13#16541227Femalelow23#23512441Femalemiddle32#33566842malehigh41#43566843Femalelow52#53566844Femalemiddle65#63566845malehigh36#73566846Femalelow57#83566847Femalemiddle69#类型变量数据转换defto_normal(df,cols=['sex','level']):"""把上面数据中df['sex','level']的类型数据转换成0-1编码,编码数据命名规则要求,"原始变量名"+"_"+类型变量,例如sex_Famle"""id_data=df.drop(cols,axis=1)#获取未转化的列raw_convert_data=df[cols]#指定要转换的列df_new3=pd.get_dummies(raw_convert_data)#进行热编码df=pd.concat((id_data,pd.DataFrame(df_new3)),axis=1)#重新组合为数据框returndf

10.1数据预处理概述10.1.1数据清洗(4)数据转换defcut_bins(df,col='score'):#对score变量进行等频分箱(每箱的样本量相同),分成3箱,箱从小到大使用1,2,3作为箱标签,在df数据上新增一列'cut_bins_1'来存储数据df['cut_bins_1']=pd.qcut(df[col],3,labels=[1,2,3])

#对score变量进行等距分箱(每箱的组距相同),分成3箱,箱从小到大使用1,2,3作为箱标签,在df数据上新增一列'cut_bins_2'来存储数据df['cut_bins_2']=pd.cut(df[col],3,labels=[1,2,3])

returndf

#数据标准化defStandardScaler(df,col=['score','mark']):#对df['score','mark']进行zscore_scaler标准化后,得到data1zscore_scaler=preprocessing.StandardScaler()#建立StandardScaler对象data1=zscore_scaler.fit_transform(df[col])#StandardScaler标准化处理

#对df['score','mark']进行minmax_scaler标准化,得到data2minmax_scaler=preprocessing.MinMaxScaler()#建立MinMaxScaler模型对象ata2=minmax_scaler.fit_transform(df[col])#MinMaxScaler标准化处理

returndata1,data2#对标准化后的数据输出,例如returndata1,data2

if__name__=='__main__':print('sucess')数据探索与可视化10.210.2数据探索与可视化10.2.1变量特征分布分析数据之前,需要自己先对数据进行深入的了解(这些数据是什么类型,总共有多少数据,有没有缺失值,均值是多少之类的),只有自己对数据足够了解了,才能够更好地分析数据。单边量数据是指数据集中只有一个变量,也可以是多列中的某一列(可以理解成是某一个指标)。比如一个班的体测成绩表是一个数据集(包含身高、体重、1000米用时之类的各种指标),那么该数据集里面的某一个指标就可以看作是一个单变量数据。拿到一批/列数据时,第一件事就是看一下这批数据的一个整体分布情况,而要看分布情况最好的方法就是绘制该批数据的饼图和密度图。10.2数据探索与可视化10.2.1变量特征分布(1)饼图饼图适用于一个维度各项指标占总体的占比情况,分布情况。能直观显示各项目和总体的占比、分布,强调整体和个体间的比较。适合比较简单的占比关系,不要求精度的场景。在变量探索中对类型变量种类较少时,饼图比较实用。matplotlib中画饼图比较简单,使用语法如下:pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,0),frame=False,rotatelabels=False,*,data=None)10.2数据探索与可视化10.2.1变量特征分布(2)密度图对于连续变量探索,密度分布图能够很好的帮助我们发现变量的分布特点及是否有异常情况。可以使用seaborn包简单的实现。使用语法如下:distplot(a,bins=None,hist=True,kde=True,rug=False,fit=None,hist_kws=None,kde_kws=None,rug_kws=None,fit_kws=None,color=None,vertical=False,norm_hist=False,axlabel=None,label=None,ax=None)10.2数据探索与可视化10.2.1变量特征分布(3)matplotlib画含有多个子图的图使用plt.subplot画1行2列的子图,命令如下:importmatplotlib.pyplotaspltplt.subplot(1,2,1)#画第1行1列的子图plt.subplot(2,2,2)#画第1行2列的子图使用plt.add_subplots画1行2列的子图,命令如下:importmatplotlib.pyplotaspltfig=plt.figure()ax1=fig.add_subplot(1,2,1)#加入第1行1列的子图ax2=fig.add_subplot(1,2,1)#加入第1行2的子图10.2数据探索与可视化10.2.2用户的购买意向与时间之间的关系(1)查看客户下单行为是否和工作周相关数据集的type字段中为4的值表示下单行为,需要筛选出下单的样本。把数据集中的time字段2016-02-0112:10:10这样的时间格式转化成按星期内的天数计算。由于python读取的time字段是字符串格式,可以使用pandas中pd.to_datetime()来转化成时间格式,然后使用pd.datetime.weekday转化星期格式时间(注意这个转化成的是0-6,需要转化成周一到周日),然后可以统计从周一到周日的下单情况并展示10.2数据探索与可视化10.2.2用户的购买意向与时间之间的关系(2)查看二月份客户下单是否和日期相关2月5日是春节,影响客户下单,这部分数据属于异常数据。10.2数据探索与可视化10.2.3用户的购买意向与年龄、性别和用户等级之间的关系使用条形图来探索双变量之间的关系,探索购买情况和年龄、性别及用户会员等级之间的关系,展示在数据集中有下单行为的客户和无下单行为的客户对比图。10.2数据探索与可视化10.2.4用户的购买意向与差评的关系探索客户的购买意愿与评论的关系,查看各个评论级别上被下单过的商品和没被下单过商品的对比图。本章小结本章以电商数据分析为例,通过案例的方法对数据进行预处理和数据清洗,加深对数据分析中数据处理方法的理解和加强对数据处理的实际动手能力。第11章好友推荐案例分析《大数据技术基础教程》学习目标/Target

了解好友推荐项目需求和目标

掌握项目所需的预备知识实践如何编写MapReduce程序,完成QQ好友推荐操作章节概述/

Summary近十几年间,随着在线社交网络的蓬勃发展,研究人员才开始有机会在大量现实数据的基础上对社交影响力进行建模和分析,并取得了丰硕的研究成果和广泛的应用价值。在这上千万用户的社交群体里,寻找潜在好友进行推荐,成为社交网络分析的关键问题之一。社交网络中的好友是指在社交网络中出现在用户联系人列表中的用户,它是一种广义上的朋友,既可以是Facebook中的好友,也可是新浪微博中的关注用户等。为社交网络用户推荐好友就是帮助用户在社交网络中找到她们感兴趣的用户,进而添加到自己的联系人列表之中,方便进一步的交流及商业应用。本章主要介绍了如何编写MapReduce程序,完成QQ好友推荐操作的相关知识目录/Contents01020304任务需求实验前HDFS平台的准备工作IDEA下建立Maven项目projectFriendRecommend程序实现05运行程序与结果验证任务需求11.111.1任务需求通过mapreduce计算,为每个QQ用户推荐好友。数据集第一列为QQ用户,其他列为该用户的QQ好友。其中xiaoming、laowang、xiaohua、lingling、xiaogang、meimei和xiaolan是选中的7位QQ用户,每位用户后面的人员,是该用户的QQ好友。xiaoming laowang xiaohua linglinglaowang xiaoming xiaolanxiaohua xiaoming xiaogang xiaolanlingling xiaoming xiaogang xiaolan meimeixiaogang xiaohua xiaolan linglingmeimei xiaolan linglingxiaolan xiaohua laowang lingling meimei实验前HDFS平台的准备工作11.211.2实验前HDFS平台的准备工作11.2.1启动Hadoop平台启动Hadoop平台11.2实验前HDFS平台的准备工作11.2.2

实验前数据路径的准备11.2实验前HDFS平台的准备工作11.2.3实验程序每次执行前,运行结果输出路径的准备每次实验程序运行结果会存储在HDFS平台的/root/experiment/output/路径下,所以在程序执行前,该路径不能存在,如果存在,需要进行删除。IDEA下建立Maven项目project11.311.3IDEA下建立Maven项目project1)建立新项目1.打开IDEA工具。2.确定要建立的项目类型11.3IDEA下建立Maven项目project1)建立新项目3.填入工程信息4.确认项目信息,完成项目创建11.3IDEA下建立Maven项目project1)建立新项目5.此时进入IDEA的开发界面。如果在开发界面的上方弹出“TipoftheDay”窗口,点出”Close”按钮,关闭该窗口即可。6.在右下角弹出的对话框中,选择EnableAuto-Import(如未弹出该对话框请忽略此步骤)。7.显示IDEA开发环境的主窗口。11.3IDEA下建立Maven项目project2)配置pom.xml文件11.3IDEA下建立Maven项目project3)查看Hadoop工程的Maven依赖包FriendRecommend程序实现11.411.4FriendRecommend程序实现11.4.1数据准备11.4FriendRecommend程序实现11.4.2编写单表关联的MapReduce程序11.4FriendRecommend程序实现11.4.3建立FirstJob类文件,编写FirstJob类package

experiment;

import

org.apache.hadoop.io.IntWritable;

import

org.apache.hadoop.io.Text;

import

org.apache.hadoop.mapreduce.Mapper;

import

org.apache.hadoop.mapreduce.Reducer;

import

org.apache.hadoop.util.StringUtils;

import

java.io.IOException;

public

class

FirstJob

{

public

static

class

Fof

extends

Text{

public

Fof(){

super();

}

public

Fof(String

a,String

b){

super(getFof(a,

b));

}

/*字符串比较小的放前面*/

public

static

String

getFof(String

a,String

b){

int

r

=pareTo(b);

if(r<0){

return

a+"\t"+b;

}else{

return

b+"\t"+a;

}

}

}

static

class

FofMapper

extends

Mapper<Text,

Text,

Fof,

IntWritable>

{

protected

void

map(Text

key,

Text

value,Context

context)

throws

IOException,

InterruptedException

{

/*获取key的值*/

String

user

=key.toString();

/*字符串分割*/

String[]

friends

=StringUtils.split(value.toString(),

'\t');

/*遍历数据*/

11.4FriendRecommend程序实现11.4.3建立FirstJob类文件,编写FirstJob类

for

(int

i

=

0;

i

<

friends.length;

i++)

{

/*定义变量从数组中取值*/

String

f1

=

friends[i];

/*返回比较后的数据*/

Fof

ofof

=new

Fof(user,

f1);

/*将数据写入context*/

context.write(ofof,

new

IntWritable(0));

/*遍历数据*/

for

(int

j

=

i+1;

j

<

friends.length;

j++)

{

/*定义变量从数组中取值*/

String

f2

=

friends[j];

/*返回比较后的数据*/

Fof

fof

=new

Fof(f1,

f2);

/*将数据写入context*/

context.write(fof,

new

IntWritable(1));

}

}

}

}

static

class

FofReducer

extends

Reducer<Fof,

IntWritable,

Fof,

IntWritable>

{

protected

void

reduce(Fof

arg0,

Iterable<IntWritable>

arg1,Context

arg2)

throws

IOException,

InterruptedException

{

/*初始化变量*/

int

sum

=0;

boolean

f

=true;

/*遍历数据,计算求和*/

for(IntWritable

i:

arg1){

if(i.get()==0){

f=false;

break;

}else{

sum=sum+i.get();

}

}

if(f){

/*将数据写入context*/

arg2.write(arg0,

new

IntWritable(sum));

}

}

}

}

11.4FriendRecommend程序实现11.4.4建立SecondJob类文件,编写SecondJob类

package

experiment;

import

org.apache.hadoop.io.Text;

import

org.apache.hadoop.io.WritableComparable;

import

org.apache.hadoop.io.WritableComparator;

import

org.apache.hadoop.mapreduce.Mapper;

import

org.apache.hadoop.mapreduce.Reducer;

import

org.apache.hadoop.util.StringUtils;

import

java.io.DataInput;

import

java.io.DataOutput;

import

java.io.IOException;

public

class

SecondJob

{

static

class

SortMapper

extends

Mapper<Text,

Text,

User,

User>

{

protected

void

map(Text

key,

Text

value,

Context

context)

throws

IOException,

InterruptedException

{

/*获取value的值并进行数据分割*/

String[]

args=StringUtils.split(value.toString(),'\t');

/*定义变量并赋值*/

String

other=args[0];

/*数据类型转换*/

int

friendsCount

=Integer.parseInt(args[1]);

/*将数据写入context*/

context.write(new

User(key.toString(),friendsCount),

new

User(other,friendsCount));

context.write(new

User(other,friendsCount),

new

User(key.toString(),friendsCount));

}

}

static

class

SortReducer

extends

Reducer<User,

User,

Text,

Text>

{

protected

void

reduce(User

arg0,

Iterable<User>

arg1,

Context

arg2)

throws

IOException,

InterruptedException

{

/*定义变量并赋值*/

String

user

=arg0.getUname();

StringBuffer

sb

=new

StringBuffer();

/*遍历数据进行字符串拼接*/

for(User

u:

arg1

){

sb.append(u.getUname()+":"+u.getFriendsCount());

sb.append(",");

}

11.4FriendRecommend程序实现11.4.4建立SecondJob类文件,编写SecondJob类

/*键值对数据写入*/

arg2.write(new

Text(user),

new

Text(sb.toString()));

}

}

public

static

class

User

implements

WritableComparable<User>

{

private

String

uname;

private

int

friendsCount;

public

String

getUname()

{

return

uname;

}

public

void

setUname(String

uname)

{

this.uname

=

uname;

}

public

int

getFriendsCount()

{

return

friendsCount;

}

public

void

setFriendsCount(int

friendsCount)

{

this.friendsCount

=

friendsCount;

}

public

User()

{

}

public

User(String

uname,

int

friendsCount)

{

this.uname

=

uname;

this.friendsCount

=

friendsCount;

}

/*数据序列化*/

public

void

write(DataOutput

out)

throws

IOException

{

out.writeUTF(uname);

out.writeInt(friendsCount);

}

/*数据反序列换*/

public

void

readFields(DataInput

in)

throws

IOException

{

this.uname

=

in.readUTF();

this.friendsCount

=

in.readInt();

}

11.4FriendRecommend程序实现11.4.4建立SecondJob类文件,编写SecondJob类

/*数据对比*/

public

int

compareTo(User

o)

{

int

result

=

this.pareTo(o.getUname());

if

(result

==

0)

{

return

Ipare(this.friendsCount,

o.getFriendsCount());

}

return

result;

}

}

public

static

class

FoFSort

extends

WritableComparator

{

public

FoFSort()

{

super(User.class,true);

}

/*数据进行比较排序*/

public

int

compare(WritableComparable

a,

WritableComparable

b)

{

User

u1

=(User)

a;

User

u2=(User)

b;

int

result

=u1.getUname().compareTo(u2.getUname());

if(result==0){

return

-Ipare(u1.getFriendsCount(),

u2.getFriendsCount());

}

return

result;

}

}

public

static

class

FoFGroup

extends

WritableComparator{

public

FoFGroup()

{

super(User.class,true);

}

/*数据比较*/

public

int

compare(WritableComparable

a,

WritableComparable

b)

{

User

u1

=(User)

a;

User

u2=(User)

b;

return

u1.getUname().compareTo(u2.getUname());

}

}

}

11.4FriendRecommend程序实现11.4.5建立Run类文件,编写Run类。packageexperiment;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;publicclassRun{publicstaticvoidmain(String[]args){/*创建配置对象并设置属性*/Configurationconfig=newConfiguration();config.set("fs.defaultFS","hdfs://master:9000");/*作业1成功运行后,运行作业2*/if(run1(config)){run2(config);}

}publicstaticbooleanrun1(Configurationconfig){try{/*获取文件系统*/FileSystemfs=FileSystem.get(config);/*获取作业*/Jobjob=Job.getInstance(config);/*设置jar包源*/job.setJarByClass(Run.class);/*设置作业名称*/job.setJobName("friend");/*指定作业Mapper类*/job.setMapperClass(FirstJob.FofMapper.class);/*指定作业Reducer类*/job.setReducerClass(FirstJob.FofReducer.class);/*设置作业输出数据的键类*/job.setMapOutputKeyClass(FirstJob.Fof.class);/*设置作业输出数据的值类*/job.setMapOutputValueClass(IntWritable.class);/*设置作业的输入格式类*/job.setInputFormatClass(KeyValueTextInputFormat.class);

11.4FriendRecommend程序实现11.4.5建立Run类文件,编写Run类。publicstaticvoidrun2(Configurationconfig){try{/*获取文件系统*/FileSystemfs=FileSystem.get(config);/*获取作业*/Jobjob=Job.getInstance(config);/*设置jar包源*/job.setJarByClass(Run.class);/*设置作业名称*/

温馨提示

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

评论

0/150

提交评论