大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第5章 電商大數(shù)據(jù)分析與探索_第1頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第5章 電商大數(shù)據(jù)分析與探索_第2頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第5章 電商大數(shù)據(jù)分析與探索_第3頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第5章 電商大數(shù)據(jù)分析與探索_第4頁
大數(shù)據(jù)分析及應(yīng)用項目教程(Spark SQL)(微課版) 課件 第5章 電商大數(shù)據(jù)分析與探索_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第5章電商大數(shù)據(jù)分析與探索女裝電子商務(wù)評論情況分析第一部分?jǐn)?shù)據(jù)準(zhǔn)備數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)分析數(shù)據(jù)輸出數(shù)據(jù)清洗情境導(dǎo)入

網(wǎng)購已經(jīng)成為人們生活中不可或缺的一件事情,如何經(jīng)營好一家線上商店是很多商家關(guān)注的問題。對于線上商店,客戶對商品的評論情況對商品的銷量、商店的經(jīng)營發(fā)展起到了重要的作用?,F(xiàn)有某女裝線上商店的一份圍繞客戶評論的女裝電子商務(wù)數(shù)據(jù)集Clothing-Reviews.csv?,F(xiàn)在商家希望能幫助他們對此份數(shù)據(jù)進行分析,獲得一些建設(shè)性意見,幫助商店更好的發(fā)展。字段含義order_id訂單編號clothing_id服裝編號age年齡review_text 評論rating評級recommended_IND是否推薦positive_feedback_count積極反饋計數(shù)class_name服裝分類學(xué)習(xí)目標(biāo)和要求1、掌握從不同數(shù)據(jù)源創(chuàng)建DataFrames的方法。2、掌握操作DataFrame進行數(shù)據(jù)清洗的基本方法。3、掌握操作DataFrame進行數(shù)據(jù)轉(zhuǎn)換的基本方法。4、掌握使用SparkSQL語句進行數(shù)據(jù)分析的方法。5、掌握持久存儲數(shù)據(jù)的方法。數(shù)據(jù)準(zhǔn)備

在實際業(yè)務(wù)中,數(shù)據(jù)的來源多種多樣。SparkSQL在數(shù)據(jù)兼容方面,不僅可以直接處理RDD,也可以處理Parquet文件或者JSON文件,更可以處理外部數(shù)據(jù)庫中的數(shù)據(jù)。

在Spark中,DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,類似于傳統(tǒng)數(shù)據(jù)庫中的二維表格,是SparkSQL最核心的編程抽象。DataFrame與RDD的主要區(qū)別在于,前者帶有schema元信息,即DataFrame所表示的二維表數(shù)據(jù)集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結(jié)構(gòu)信息,從而可以對藏于DataFrame背后的數(shù)據(jù)源以及作用于DataFrame之上的變換進行針對性的優(yōu)化,最終達(dá)到大幅提升運行效率的目標(biāo)。數(shù)據(jù)準(zhǔn)備

使用Spark庫可以將不同數(shù)據(jù)來源的數(shù)據(jù)轉(zhuǎn)換為DataFrame,并對數(shù)據(jù)結(jié)果進行展示。創(chuàng)建DataFrame的三種方法:1、使用toDF函數(shù)創(chuàng)建DataFrame(1)本地seq+toDF創(chuàng)建DataFrame。

(2)通過caseclass+toDF創(chuàng)建DataFrame數(shù)據(jù)準(zhǔn)備2、使用createDataFrame函數(shù)創(chuàng)建DataFrame數(shù)據(jù)準(zhǔn)備3、從外部數(shù)據(jù)創(chuàng)建DataFrame

(1)使用parquet文件創(chuàng)建valdf=sqlContext.read.parquet("/Chapter5/goods.parquet")

(2)使用json文件創(chuàng)建valdf=spark.read.json("/Chapter5/goods.json")

(3)使用CSV(Comma-SeparatedValues)文件創(chuàng)建1)讀取CSV文件,使用類型推斷創(chuàng)建DataFrame2)讀取CSV文件,自定義schema創(chuàng)建DataFrame。數(shù)據(jù)準(zhǔn)備4、讀取“女裝電子商務(wù)評論”數(shù)據(jù)集(1)啟動Hadoop集群和Spark集群(2)將“Clothing-Reviews.csv”女裝電子商務(wù)評論數(shù)據(jù)集上傳到HDFS文件系統(tǒng)的/Chapter5/目錄下。(3)讀取CSV文件,使用自定義schema方式轉(zhuǎn)換為DataFrame。數(shù)據(jù)清洗

數(shù)據(jù)清洗是對數(shù)據(jù)進行重新審查和校驗的過程,目的在于刪除重復(fù)信息、糾正存在的錯誤,并提供數(shù)據(jù)一致性。在Clothing-Reviews.csv數(shù)據(jù)集中,存在一些重復(fù)數(shù)據(jù),也有部分缺失,需要我們對其進行數(shù)據(jù)清洗。1、drop(cols)

按照列名cols刪除DataFrame中的列,返回新的DataFrame。此方法可以刪除數(shù)據(jù)表中無用的或者不想要的數(shù)據(jù)列。刪除“publisher”列。數(shù)據(jù)清洗2、dropDuplicates(subset=None)

此方法用于刪除DataFrame中的重復(fù)行,subset用于指定刪除重復(fù)行的時候考慮哪幾列。刪除重復(fù)的行:刪除author列重復(fù)的行:數(shù)據(jù)清洗3、na.drop

此方法用于刪除DataFrame中的null空數(shù)據(jù),加入“any”和“all”參數(shù)可以指定刪除條件,加入數(shù)字參數(shù)指定有多少個空值進行刪除,加入字段名刪除指定字段中的空值。對有任意一個為缺失值的行進行刪除:對全部為缺失值的行進行刪除:對有3個缺失值的數(shù)據(jù)行進行刪除:對有兩個缺失值以上的數(shù)據(jù)行進行刪除:數(shù)據(jù)清洗4、na.fill()

此方法用于將DataFrame中所有缺失值填充為一個給定的字符串或數(shù)值??梢詾樗腥笔е抵付ㄗ址驍?shù)值,也可以為指定列指定不同字符串或數(shù)值。將表中所有的null空數(shù)據(jù)指定為“不明”:數(shù)據(jù)清洗對不同的列中缺失值填充不同的字符串:5、對“Clothing-Reviews.csv”女裝電子商務(wù)評論數(shù)據(jù)集進行數(shù)據(jù)清洗,刪除重復(fù)的數(shù)據(jù),對有空缺數(shù)據(jù)的行進行刪除。數(shù)據(jù)轉(zhuǎn)換

數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)從一種格式或結(jié)構(gòu)轉(zhuǎn)換為另一種格式或結(jié)構(gòu)的過程。數(shù)據(jù)轉(zhuǎn)換對于數(shù)據(jù)集成和數(shù)據(jù)管理等活動至關(guān)重要。數(shù)據(jù)轉(zhuǎn)換可以包括一系列活動:可以轉(zhuǎn)換數(shù)據(jù)類型,豐富數(shù)據(jù)或執(zhí)行聚合,具體取決于項目的需要。1、withColumn(colName,col)

此方法用于為數(shù)據(jù)表添加新列,返回一個新的DataFrame增加colNAme列,如果原來本身就有colName的列,就進行替換。數(shù)據(jù)轉(zhuǎn)換2、withColumnRename(existing,new)

此方法用于對已經(jīng)存在的列名進行重命名。existing為原來的名字,new為新的列名,若名稱不存在則這個操作不做任何事情。3、定義UDF,將數(shù)據(jù)表中的兩列合并成一列。UDF是指用戶定義函數(shù),用于擴展系統(tǒng)的內(nèi)置功能。我們可以在SparkSQL中自定義實際需要的UDF來處理數(shù)據(jù)。//創(chuàng)建一個udf來連接兩個列值valconnect=udf((name:String,author:String)=>{name+"-"+author})

//應(yīng)用該udf來創(chuàng)建合并的列,并添加為新的列valconnectdf=books.withColumn("bookname-author",connect($"name",$"author"))數(shù)據(jù)轉(zhuǎn)換4、定義UDF,對表格中的列添加字符或者數(shù)字。

定義一個udf,為price列的值增加10,此處需要利用toDouble將原來字符串類型的price值轉(zhuǎn)換為double類型數(shù)值:valaddconst=udf((price:String)=>{if(price==null)0elseprice.toDouble+10})

當(dāng)對表中已經(jīng)存在的列的值追加新的列時,如果新列與舊列同名,則會覆蓋舊列:數(shù)據(jù)轉(zhuǎn)換5、na.replace

此方法用于對現(xiàn)有的字符或者數(shù)字刪除或替換字符或者數(shù)字。如果在replace中列名參數(shù)是“*”,那么將會對所有的列進行相應(yīng)的替換。6、對“Clothing-Reviews.csv”女裝電子商務(wù)評論數(shù)據(jù)集進行數(shù)據(jù)轉(zhuǎn)換,將recommended_IND(是否推薦)列中的1替換為推薦,0替換為不推薦。數(shù)據(jù)分析

使用SQL語句對數(shù)據(jù)進行探索分析是大多數(shù)軟件開發(fā)和維護人員比較習(xí)慣的方式。SparkSQL支持直接應(yīng)用標(biāo)準(zhǔn)SQL語句進行查詢。在進行SQL操作之前,需要新建注冊臨時表,然后才能進行SparkSQL查詢。1、注冊臨時表的方法:(1)createGlobalTempView(name)

此方法用于為DataFrame創(chuàng)建一個全局的臨時表。其生命周期和啟動的應(yīng)用的周期一致,既啟動的spark應(yīng)用存在則這個臨時的表就一直能訪問,直到退出應(yīng)用為止。name為新視圖的名稱,名稱不能與已存在的一樣,否則會報錯。數(shù)據(jù)分析(2)createOrReplaceGlobalTempView(name)

此方法用于創(chuàng)建或替換視圖。當(dāng)視圖名稱name已經(jīng)存在,則進行替換,若其不存在,則進行創(chuàng)建。(3)createTempView(name)

此方法用于創(chuàng)建臨時視圖。name為新視圖的名稱,名稱不能與已存在的一樣,否則會報錯。(4)createOrReplaceTempView(name)此方法用于為DataFrame創(chuàng)建本地的臨時視圖,其生命周期只限于當(dāng)前的SparkSession。當(dāng)視圖名稱name已經(jīng)存在,則進行替換,若其不存在,則進行創(chuàng)建。臨時表創(chuàng)建完成后,就可以執(zhí)行SQL語句,對表進行查詢。數(shù)據(jù)分析2、案例分析:以本章數(shù)據(jù)集中的books.csv為例,進行操作理解。(1)自定義schema,讀取books.csv文件,刪除有空缺數(shù)據(jù)的行及重復(fù)數(shù)據(jù)。(2)注冊臨時表:book2.createOrReplaceTempView("btemp")數(shù)據(jù)分析(3)進行簡單的SparkSQL查詢在臨時表中執(zhí)行SQL,查詢book_price價格小于30的書。數(shù)據(jù)分析3、對Clothing-Reviews.csv數(shù)據(jù)進行SQL探索分析。(1)查看40歲以下,不同年齡段的客戶人數(shù)。

將統(tǒng)計的年齡數(shù)量count(age)重新命名為total_nu進行輸出。并對統(tǒng)計的結(jié)果根據(jù)年齡進行升序排序。數(shù)據(jù)分析(2)統(tǒng)計recommended_IND為“不推薦”的訂單的rating評分分布。選擇rating列進行count(1)計數(shù),并限定條件為recommended_IND='不推薦',最后根據(jù)rating進行g(shù)roup分類。(3)為進一步了解用戶“不推薦”的原因,可以查看用戶具體評論。查看評分小于等于3且為“不推薦”的訂單的具體評論。選擇clothing_id,rating,review_text三列進行顯示,并限定條件為rating<=3并且recommended_IND='不推薦'。數(shù)據(jù)分析(4)查詢了解,不推薦的這些訂單,分別屬于哪些服裝分類,各種服裝類的不推薦數(shù)量情況是如何的。

選擇服裝分類class_name進行count()統(tǒng)計并命名為classnum,限定條件設(shè)置為recommended_IND='不推薦',最后根據(jù)class_name分類。(5)統(tǒng)計分析不同評分等級的服裝編號clothing_id情況。獲得不同服裝編號clothing_id的五星好評數(shù)量,并且降序排序。

選擇clothing_id進行count()統(tǒng)計,并重命名為five_stars_num輸出。限定條件為五星好評rating=5,以clothing_id進行分類,最后根據(jù)五星好評數(shù)量five_stars_num進行降序排序。數(shù)據(jù)分析(6)使用SparkSQL的內(nèi)置函數(shù)進行相關(guān)性等分析。

在數(shù)據(jù)分析中,相關(guān)性分析可以用于分析兩個變量之間的相關(guān)方向和相關(guān)強度,從而實現(xiàn)對其中一個數(shù)據(jù)進行改變來影響另一個數(shù)據(jù)的變化??梢岳脜f(xié)方差函數(shù)cov()判斷兩個變量之間的相關(guān)方向??梢岳孟嚓P(guān)性函數(shù)corr()計算兩個變量之間的相關(guān)性。//協(xié)方差給出了這兩個變量之間的相關(guān)方向valcov=reviews3.stat.cov("rating","positive_feedback_count")//corr()給出了這兩個變量之間關(guān)系強度的大小valcorr=reviews3.stat.corr("rating","positive_feedback_count")1)分析“rating”評分字段和“positive_feedback_count”積極反饋數(shù)量字段之間的相關(guān)性。數(shù)據(jù)分析2)freqItems()提取數(shù)據(jù)列中最常出現(xiàn)的項。

在數(shù)據(jù)分析中,根據(jù)業(yè)務(wù)需求,可能需要知曉數(shù)據(jù)列中最常出現(xiàn)的元素,從而對決策提供依據(jù)。可以利用freqItems()函數(shù)提取數(shù)據(jù)列中最常出現(xiàn)的項,freqItems()函數(shù)中第一個參數(shù)是指定的分析列,第二個參數(shù)是指定的支持級別。

選擇服裝分類class_name作為分析列,在DataFramereviews3中,找到服裝分類出現(xiàn)概率大于40%的類別,即支持級別為0.4。數(shù)據(jù)分析3)approxQuantile()計算DataFrame中數(shù)字列的近似分位數(shù)。

計算分位數(shù)的意義是表示在這個樣本集中,從小至大排列之后,小于某值的樣本子集占總樣本集的比例。

對age列計算近似分位數(shù),指定的分位數(shù)概率為0.25、0.5和0.75(注意:0是最小值,1是最大值,0.5是中值median)。4)crosstab()探索年齡age和評分rating等級間是否有相關(guān)性。crosstab()可以對兩個變量中的每個數(shù)據(jù)進行相關(guān)性計算,從而觀察這兩個變量之間的相互關(guān)系程度與趨勢。數(shù)據(jù)輸出

數(shù)據(jù)分析后的結(jié)果最終需要保存輸出,以供決策者進行查看引用。DataFrame提供了很多種輸出操作方法,可以存儲到數(shù)據(jù)庫,也可以保存成文件。保存到文件里有兩種方法,以將數(shù)據(jù)寫入到HDFS中為例進行詳細(xì)解釋。方法一:利用save()函數(shù)保存數(shù)據(jù)。//調(diào)用save()函數(shù),保存DataFrame數(shù)據(jù)到/Chapter5/reviews目錄中。selectData.select("*").write.format("csv").save("/Chapter5/reviews")write.format()支持輸出的格式有JSON、parquet、JDBC、orc、csv、text等文件格式,save()定義保存的位置。數(shù)據(jù)輸出方法二:通過df.rdd.saveAsTextFile("file:///")轉(zhuǎn)化成rdd再保存。此方法可以將數(shù)據(jù)存儲為txt格式。將數(shù)據(jù)保存輸出到HDFS文件系統(tǒng)的/Chapter5目錄下,并命名為reviews_two.txt在線銷售訂單數(shù)據(jù)分析第二部分?jǐn)?shù)據(jù)查詢操作數(shù)據(jù)分析探索情境導(dǎo)入

隨著電商直播與購物的盛行,大型零售商正在積極尋找增加利潤的方法。銷售分析是大型零售商通過了解客戶的購買行為和模式來增加銷售額的關(guān)鍵技術(shù)之一。查找客戶購買行為數(shù)據(jù)集,探索數(shù)據(jù)集上下文中組合在一起的項目之間的關(guān)系?,F(xiàn)有兩份在線銷售數(shù)據(jù)集orders.csv和order-details.csv,是關(guān)于不同地區(qū)、多種商品和電子產(chǎn)品等的銷售情況?,F(xiàn)在希望通過數(shù)據(jù)分析了解以下情況:1、此數(shù)據(jù)集中每個客戶的下單數(shù)量是多少?2、每個城市的訂單有多少?3、每個客戶的消費總額是多少?4、客戶的平均訂單消費額是多少?學(xué)習(xí)目標(biāo)和要求1、靈活使用DataFrame數(shù)據(jù)操作的各種方法進行數(shù)據(jù)查詢。2、會使用聚合、連接等操作對DataFrame數(shù)據(jù)進行轉(zhuǎn)換。3、能使用聚合函數(shù)對DataFrame數(shù)據(jù)進行分析。數(shù)據(jù)查詢操作1、查看數(shù)據(jù)(1)show

該方法主要用于測試,查看輸入的數(shù)據(jù)、獲得的結(jié)果是否正確。該方法能夠以表格的形式展示DataFrame中的數(shù)據(jù)。1)show()沒有參數(shù)的show方法默認(rèn)最多能夠顯示20條數(shù)據(jù)。2)show(numRows:Int)此方法可以指定要顯示的行數(shù)。數(shù)據(jù)查詢操作(2)collect()collect方法類似與SparkRDD的collect方法。與show方法不同的是,collect方法可以獲取DataFrame中的所有數(shù)據(jù),并返回一個Array對象。數(shù)據(jù)查詢操作2、過濾查詢1)where

在SQL語法中,可以通過where條件語句對數(shù)據(jù)進行過濾。在SparkSQL中,同樣可以像SQL一樣使用where(conditionExpr:String)條件語句來對數(shù)據(jù)進行過濾??梢灾付l件參數(shù)conditionExpr來進行查詢,參數(shù)中可以使用and或or。數(shù)據(jù)查詢操作2)filterfilter方法和where方法類似,可以篩選出符合條件的數(shù)據(jù)。數(shù)據(jù)查詢操作3、指定列查詢1)select

在SparkSQL中可以通過select方法來查詢指定字段,類似于SQL中的select方法。查詢emp中,字段名稱為name和salary的值。數(shù)據(jù)查詢操作2)selectExpr

這個方法是select方法的一個變體,可以接受一個SQL表達(dá)式,或?qū)δ承┳侄巫鲆恍┨厥馓幚?。?shù)據(jù)查詢操作4、排序操作1)orderBy

此方法能夠使數(shù)據(jù)按照指定的字段排序,默認(rèn)升序排序。如果需要降序排序,可以使用desc(“字段名稱”)或者$“字段名”.desc進行處理。對emp中的salary薪水列進行降序排序:數(shù)據(jù)查詢操作2)sortsort方法與orderBy方法一樣,也是對指定字段進行排序。對emp中的salary薪水列進行升序排序。數(shù)據(jù)查詢操作5、分組聚合1)groupBy分組

此方法可以根據(jù)字段進行分組操作。調(diào)用方式可以傳入String類型的字段名,也可以是Column類型的對象。

分別以傳入String類型的字段名和Column類型的對象,對emp中的position職位進行分組。groupBy方法返回的是RelationalGroupedDataset對象,該對象提供了max()、min()、mean()、sum()、count()等相關(guān)的聚合方法,可以對分組后的數(shù)據(jù)進行指定的聚合操作。數(shù)據(jù)查詢操作2)agg聚合

該方法一般與groupBy方法配合使用。agg(expers:column*)可以傳入一個或多個Coumn對象,返回DataFrame。

以position職位進行分組,計算各職位薪水的平均值,并命名為average_wages。數(shù)據(jù)查詢操作6、聚合函數(shù)

聚合是大數(shù)據(jù)分析領(lǐng)域中最常用的特性之一。SparkSQL提供了很多常用的聚合函數(shù),比如sum、count、avg等等。(1)count函數(shù)count可以執(zhí)行以下2種操作:對指定列進行計數(shù);使用count(*)或count(1)對所有列進行計數(shù)。(2)countDistinct函數(shù):此函數(shù)可以計算每個組的唯一項。數(shù)據(jù)查詢操作(3)approx_count_distinct函數(shù)

此函數(shù)的功能與countDistinct一樣,但是統(tǒng)計的結(jié)果允許有誤差。這里approx_count_distinct的另一個參數(shù)就指定了可容忍的誤差的最大誤差。(4)sum函數(shù):計算一個數(shù)字列中的所有值的總和。(5)sumDistinct函數(shù):計算一個數(shù)字列中不同值的總和,重復(fù)的數(shù)值將不被計算。數(shù)據(jù)查詢操作(6)avg函數(shù):計算一個數(shù)字列的平均值。(7)min函數(shù)、max函數(shù):統(tǒng)計出指定列的最小值和最大值。數(shù)據(jù)查詢操作7、連接操作

實際工作中,有時候數(shù)據(jù)并不是在同一個表中,此時根據(jù)業(yè)務(wù)需求,就需要連接兩個表才可以查詢相關(guān)的需求結(jié)果。在DataFrame中提供了join功能實現(xiàn)連接的效果。1)內(nèi)連接

內(nèi)連接查詢操作是列出與連接條件匹配的數(shù)據(jù)行,它使用比較運算符比較被連接列的列值。數(shù)據(jù)查詢操作2)左外連接

此連接方式是以左表為基準(zhǔn),將數(shù)據(jù)進行連接,然后將左表中所有數(shù)據(jù)都顯示,右表對應(yīng)的列設(shè)置為NULL。數(shù)據(jù)查詢操作3)右外連接

是以右表為基準(zhǔn),將數(shù)據(jù)進行連接,然后將右表所有的數(shù)據(jù)進行顯示,左表對應(yīng)的列設(shè)置為NULL。數(shù)據(jù)查詢操作4)全外連接全外連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上。數(shù)據(jù)查詢操作5)LeftSemi-Join這種join類型的行為類似于內(nèi)連接類型,連接后的數(shù)據(jù)集只包含匹配的行。6)交叉連接(又稱為Cartesian-笛卡爾連接)當(dāng)執(zhí)行join連接時不指定參數(shù),得到的也是笛卡爾積結(jié)果。數(shù)據(jù)探索分析

基于前述的知識與方法,本節(jié)將對在線銷售數(shù)據(jù)集orders.csv和order-details.csv進行分析探索,解決情景導(dǎo)入中提出的問題。1、數(shù)據(jù)準(zhǔn)備(1)上傳orders.csv和order-details.csv數(shù)據(jù)集到HDFS文件系統(tǒng)中。(2)加載數(shù)據(jù)集到RDD及DataFrame中。數(shù)據(jù)探索分析2、問題分析(1)此數(shù)據(jù)集中每個客戶的下單數(shù)量是多少?

每個客戶的下單情況數(shù)據(jù)在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論