數(shù)據(jù)采集與預處理 課件 學習單元5-使用Python進行數(shù)據(jù)處理_第1頁
數(shù)據(jù)采集與預處理 課件 學習單元5-使用Python進行數(shù)據(jù)處理_第2頁
數(shù)據(jù)采集與預處理 課件 學習單元5-使用Python進行數(shù)據(jù)處理_第3頁
數(shù)據(jù)采集與預處理 課件 學習單元5-使用Python進行數(shù)據(jù)處理_第4頁
數(shù)據(jù)采集與預處理 課件 學習單元5-使用Python進行數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

使用Python進行數(shù)據(jù)處理學習單元5單元概述Python語言擁有大量可用于數(shù)據(jù)處理的程序庫,其中的pandas、sklearn等程序庫更是數(shù)據(jù)處理中的佼佼者。本單元圍繞“鞋類產(chǎn)品的銷售數(shù)據(jù)”的數(shù)據(jù)處理工作,介紹了數(shù)據(jù)清洗、數(shù)據(jù)標準化、數(shù)據(jù)的聚合與分組、透視表與交叉表的使用、啞變量等相關(guān)知識與操作技能,使學習者能夠利用Pandas、sklearn等程序庫對數(shù)據(jù)進行處理,最終把數(shù)據(jù)轉(zhuǎn)換成便于觀察分析、傳送或進一步處理的形式。教學目標掌握數(shù)據(jù)處理中數(shù)據(jù)清洗的幾種方式,掌握三種數(shù)據(jù)標準化方法,掌握數(shù)據(jù)分組與聚合、透視表、交叉表、啞變量的相關(guān)概念及基礎(chǔ)應用的相關(guān)理論知識。掌握常用數(shù)據(jù)處理工具的使用,利用各種工具完成數(shù)據(jù)清洗、數(shù)據(jù)標準化等數(shù)據(jù)處理工作。提升自主學習能力,順利完成數(shù)據(jù)的處理,能夠?qū)ⅰ芭K數(shù)據(jù)”處理成需要的數(shù)據(jù)格式,為后續(xù)的數(shù)據(jù)挖掘、數(shù)據(jù)分析做好準備工作。任務(wù)1利用列表、元組、集合與字典進行數(shù)據(jù)存儲某銷售企業(yè)的“商品銷售管理系統(tǒng)”需要將以往的客戶信息及其鞋類銷售數(shù)據(jù)納入系統(tǒng)數(shù)據(jù)庫,這些銷售數(shù)據(jù)存儲格式較為雜亂且有錯誤數(shù)據(jù),在納入系統(tǒng)前必須對這些數(shù)據(jù)進行清洗,將不完整數(shù)據(jù)、錯誤數(shù)據(jù)、重復數(shù)據(jù)進行處理,最終得到一份完整的、統(tǒng)一的數(shù)據(jù)。任務(wù)分析

數(shù)據(jù)清洗是數(shù)據(jù)預處理的第一步,也是保證后續(xù)結(jié)果正確的重要一環(huán)。在使用“鞋類產(chǎn)品的銷售數(shù)據(jù)”數(shù)據(jù)時,可以使用pandas及sklearn庫提供的相關(guān)方法,進行數(shù)據(jù)清洗工作。本任務(wù)實現(xiàn)的關(guān)鍵點是數(shù)據(jù)類型轉(zhuǎn)換、重復數(shù)據(jù)刪除、缺失值和異常值的處理。任務(wù)實施目前有銷售企業(yè)的鞋類產(chǎn)品的用戶基礎(chǔ)數(shù)據(jù)與銷售數(shù)據(jù),其中包含訂單ID、客戶姓名、客戶性別、客戶身高、客戶體重、手機品牌、客戶所在省份、客戶受教育程度、產(chǎn)品名稱、產(chǎn)品單價、鞋碼、單筆訂單總額、訂單內(nèi)商品數(shù)量、訂單生成日期、訂單渠道以及用戶對該商品的瀏覽次數(shù)。1.數(shù)據(jù)類型轉(zhuǎn)換(1)首先讀取數(shù)據(jù)并查看數(shù)據(jù)規(guī)模及數(shù)據(jù)類型。importpandasaspd#導入pandas包io=r'data.xlsx'#設(shè)置要讀取的Exceldata=pd.read_excel(io)#讀取Exceldata.shapedata.dtypes(2)進行數(shù)據(jù)類型轉(zhuǎn)換#將price、total_price轉(zhuǎn)為floatdata['price']=data['price'].str[1:].astype(float)data['total_price']=data['total_price'].str[1:].astype(float)#將order_date轉(zhuǎn)為datetimedata['order_date']=pd.to_datetime(data['order_date'],format='%Y年%m月%d日')重復數(shù)據(jù)處理在查看數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”時,可以發(fā)現(xiàn),由于各種各樣的疏忽,導致數(shù)據(jù)集中存在重復數(shù)據(jù),此時可以使用duplicated方法來進行重復數(shù)據(jù)的識別。(1)識別重復數(shù)據(jù)data.duplicated().any()執(zhí)行代碼,返回True,說明當前數(shù)據(jù)集中包含重復數(shù)據(jù)。如果返回False,則說明當前數(shù)據(jù)集中不包含重復數(shù)據(jù)。(2)刪除重復數(shù)據(jù)data.drop_duplicates()(3)使用subset參數(shù)刪除重復數(shù)據(jù)在很多業(yè)務(wù)場景中,并不是需要對數(shù)據(jù)的所有列進行重復性的判斷,而是只需要判斷某幾個列相同,即可以認定為重復數(shù)據(jù)。(4)徹底清除重數(shù)據(jù)我們雖然將重復數(shù)據(jù)刪除了,但是并沒有影響原始的數(shù)據(jù)data,即原始數(shù)據(jù)data中還是存在重復數(shù)據(jù)的,這并不利于接下來進行的數(shù)據(jù)分析,可以使用如下兩種方式修改原始數(shù)據(jù)集。缺失值處理在數(shù)據(jù)獲取或業(yè)務(wù)數(shù)據(jù)采集過程中,用于各種情況的限制,導致獲取到數(shù)據(jù)并不完整,在數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”中,我們得到的樣本數(shù)據(jù)在age(年齡)、gender(性別)、phone_brand(手機品牌)上均有缺失值。(1)判斷是否存在缺失值#判斷是否存在缺失值data.isnull().any(axis=0)#缺失值的數(shù)量data.isnull().sum(axis=0)#缺失值的比例data.isnull().sum(axis=0)/data.shape[0](2)查看哪些行存在缺失數(shù)據(jù)#缺失數(shù)據(jù)的行數(shù)data.isnull().any(axis=1).sum()#缺失數(shù)據(jù)的行數(shù)的比例data.isnull().any(axis=1).sum()/data.shape[0](3)處理缺失值我們已經(jīng)從兩個角度對數(shù)據(jù)集缺失值進行了觀測,那么在觀測后,我們?nèi)绾翁幚砣笔?shù)據(jù)呢?通常來說,對于缺失值的處理,最常用的方法有刪除法、替換法、插補法等。異常值處理在“鞋類產(chǎn)品的銷售數(shù)據(jù)”中,在對鞋碼(size)列進行檢查時,發(fā)現(xiàn)某些數(shù)據(jù)可能存在異常,所以在這里將對size列進行異常值的檢測與處理。檢測和過濾異常值常用的方法有基于統(tǒng)計與數(shù)據(jù)分布、箱型圖分析,這里將使用基于統(tǒng)計與數(shù)據(jù)分布的方法。(1)基于統(tǒng)計與數(shù)據(jù)分布的異常值分析假設(shè)數(shù)據(jù)集滿足正態(tài)分布(NormalDistribution),即:

,如果x的值大于μ+3δ或者小于μ-3δ,那么都可以認定為是異常值。importnumpyasnpimportpandasaspdimportmatplotlibasmplimportmatplotlib.pyplotasplt%matplotlibinline#讀取數(shù)據(jù)文件fig,ax=plt.subplots(1,1,figsize=(8,5))#直方圖ax.hist(data['size'],bins=20)d=data['size']#使用z-score標準化數(shù)據(jù)zscore=(d-d.mean())/d.std()print(zscore)data['isOutlier']=zscore.abs()>3data['isOutlier'].value_counts()必備知識1.數(shù)據(jù)清洗數(shù)據(jù)清洗(Datacleaning)是對數(shù)據(jù)進行重新審查和校驗的過程,目的在于刪除重復信息、糾正存在的錯誤,并提供數(shù)據(jù)一致性。2.數(shù)據(jù)整理重復的數(shù)據(jù)很有可能會對最終結(jié)果產(chǎn)生不良影響,在數(shù)據(jù)清洗中,就需要將重復數(shù)據(jù)刪除。缺失值是在數(shù)據(jù)分析中比較讓人頭疼的問題,缺失值的產(chǎn)生是由于認為或者機器等原因?qū)е聰?shù)據(jù)記錄的丟失或隱瞞,缺失值的存在一定程度上影響了后續(xù)的數(shù)據(jù)分析和挖掘的結(jié)果。3.異常值處理異常值,即在數(shù)據(jù)集中存在不合理的值,又稱離群點。異常數(shù)據(jù)的類型可以按照其造成原因分為兩種:真異常與假異常。關(guān)于異常值的處理,可以刪除、可以不處理,也可以將其當作缺失值,采用缺失值的處理辦法。任務(wù)2數(shù)據(jù)標準化任務(wù)描述將“鞋類產(chǎn)品的銷售數(shù)據(jù)”進行數(shù)據(jù)清洗后,可以針對數(shù)據(jù)的某些列進行標準化處理,以便在后續(xù)的數(shù)據(jù)分析中,利用標準化后的數(shù)據(jù)進行數(shù)據(jù)分析。任務(wù)分析在本次任務(wù)中,我們將針“鞋類產(chǎn)品的銷售數(shù)據(jù)”中的“用戶對該商品的瀏覽次數(shù)”列進行數(shù)據(jù)標準化處理。本任務(wù)實現(xiàn)的重點是了解Min-max標準化與Z-Score標準化。任務(wù)實施1.使用sklearn庫中的min-max標準化我們使用sklearn.preprocessing中的MinMaxScaler中的fit_transform函數(shù)進行min-max標準化。fromsklearnimportpreprocessingmin_max=preprocessing.MinMaxScaler()n=min_max.fit_transform(data[['pv']])n2.使用sklearn庫中的z-score標準化我們在這里直接調(diào)用preprocessing中的scale方法即可。代碼如下:n=preprocessing.scale(data[['pv']])n數(shù)據(jù)標準化處理主要包括數(shù)據(jù)同趨化處理和無量綱化處理兩個方面。同趨化處理主要解決不同性質(zhì)數(shù)據(jù)問題,對不同性質(zhì)指標直接加總不能正確反映不同作用力的綜合結(jié)果,須先考慮改變逆指標數(shù)據(jù)性質(zhì),使所有指標對測評方案的作用力同趨化,再加總才能得出正確結(jié)果。無量綱化處理主要為了消除不同指標量綱的影響,解決數(shù)據(jù)的可比性,防止原始特征中量綱差異影響距離運算(比如歐氏距離的運算)。必備知識必備知識1.Min-max標準化Min-max標準化是將原始數(shù)據(jù)進行線性變換,設(shè)minA和maxA分別為屬性A的最小值和最大值,將A的一個原始值x通過min-max標準化映射成在區(qū)間[0,1]中的值x',這種處理方法的缺點是若數(shù)值集中且某個數(shù)值很大,則規(guī)范化后各值接近于0,并且將會相差不大。即:新數(shù)據(jù)=(原數(shù)據(jù)-最小值)/(最大值-最小值)2.z-score標準化這種方法基于原始數(shù)據(jù)的均值(mean)和標準差(standarddeviation)進行數(shù)據(jù)的標準化。將A的原始值x使用z-score標準化到x'。必備知識即:新數(shù)據(jù)=(原數(shù)據(jù)-均值)/標準差小數(shù)定標標準化這種方法通過移動數(shù)據(jù)的小數(shù)點位置來進行標準化。小數(shù)點移動多少位取決于屬性A的取值中的最大絕對值。將屬性A的原始值x使用小數(shù)定標標準化到x‘的計算方法參考如下:必備知識其中,j是滿足條件的最小整數(shù)。任務(wù)3聚合與分組任務(wù)描述數(shù)據(jù)的分組與聚合是數(shù)據(jù)處理的一種方式,在對數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”進行加載、清洗、標準化之后,可以通過對數(shù)據(jù)的分組與聚合,查看數(shù)據(jù)的分組情況,并針對分組數(shù)據(jù)進行統(tǒng)計。任務(wù)分析在Pandas中,數(shù)據(jù)分組我們主要依靠groupby函數(shù),分組鍵可以有多種形式,可以使用Series、列表、字典、函數(shù)及多種混合分組,并結(jié)合Pandas中常用的聚合函數(shù)常見的如sum、count、min、max、mean等數(shù)據(jù)進行分組與聚合。本任務(wù)實現(xiàn)的關(guān)鍵點是采用不同方法對數(shù)據(jù)進行分組和聚合處理。任務(wù)實施1.數(shù)據(jù)分組(1)使用Series分組:在數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”中,根據(jù)province進行數(shù)據(jù)分組,查看各省份的銷售情況。grouped=data.groupby(data['province'])grouped在分組后獲得到GroupBy對象grouped,打印grouped我們可以看到類似如下的輸出。<pandas.core.groupby.generic.DataFrameGroupByobjectat0x000001D9F30BB070>此時grouped實際上還沒有進行任何計算,只是含有一些有關(guān)分組鍵data['province']的中間數(shù)據(jù)而已。也就是說,該對象已經(jīng)有了接下來對各分組執(zhí)行運算所需的信息。GroupBy對象支持迭代,可以產(chǎn)生一組二元元組(由分組名和數(shù)據(jù)塊組成)。繼續(xù)進行迭代分組對象forname,groupingrouped:print(name)print(group)任務(wù)實施(2)使用數(shù)組分組:在上例中,分組鍵為Series。實際上,分組鍵可以是任何長度適當?shù)臄?shù)組。grouped=data.groupby(data['product_name'].values)groupedforname,groupingrouped:print(name)print(group)(3)使用字典分組df=data[['age','height','size']]mapping={'age':'基礎(chǔ)信息','height':'基礎(chǔ)信息','size':'商品信息'}mapping_grouped=df.groupby(mapping,axis=1)forname,groupinmapping_grouped:print(name)print(group)任務(wù)實施(4)使用函數(shù)分組相比于使用字典、Series、列表等,使用函數(shù)是一種更原生的方法定義分組映射。任何被當做分組鍵的函數(shù)都會在各個索引值上被調(diào)用一次,其返回值就會被用作分組名稱。我們以product_name作為索引數(shù)據(jù),以size作為列數(shù)據(jù),可以計算索引值(product_name)的長度,按照product_name的長度進行分組#構(gòu)建新的DataFrame作為樣本數(shù)據(jù)df=pd.DataFrame({'size':data['size'].values},index=data['product_name'].values)#使用len函數(shù)by_func=df.groupby(len)forname,groupinby_func:print(name)print(group)任務(wù)實施(5)使用混合分組:在某一些特定情況下,可能需要將函數(shù)、數(shù)組、列表、字典、Series混合使用,在這里完全不用擔心,因為在內(nèi)部都會被轉(zhuǎn)換為數(shù)組。#構(gòu)建新的DataFrame作為樣本數(shù)據(jù)df=pd.DataFrame({'size':data['size'].values},index=data['product_name'].values)channels=data['channel'].valuesforname,groupinfixed_grouped:print(name)print(group)任務(wù)實施2.數(shù)據(jù)聚合(1)sum函數(shù):sum為求和函數(shù)。使用sum函數(shù)獲取渠道銷售的訂單總金額。df=data[['channel','total_price']]df.groupby(data['channel']).sum()(2)count函數(shù):count函數(shù)是統(tǒng)計數(shù)每一列或行的非空單元格。使用count函數(shù)統(tǒng)計渠道銷售次數(shù)。df.groupby(data['channel']).count()(3)min函數(shù):min函數(shù)可以獲取分組里中的最小值。使用min函數(shù)獲取渠道銷售的單筆訂單總額最小值。df.groupby(data['channel']).min()(4)max函數(shù):max函數(shù)與min函數(shù)作用相反,可以獲取分組里中的最大值。使用max函數(shù)獲取渠道銷售的單筆訂單總額最大值。df.groupby(df['channel']).max()任務(wù)實施(5)mean函數(shù):mean函數(shù)可以獲取分組數(shù)據(jù)的平均值,使用mean統(tǒng)計渠道銷售的單筆訂單總額的平均值。df.groupby(df['channel']).mean()(6)agg函數(shù):在Pandas中,我們也可以使用agg函數(shù)進行同時計算各組數(shù)據(jù)的平均數(shù)、標準差、總數(shù)等,并且可使用自定義函數(shù)進行數(shù)據(jù)的聚合。例如我們可以定義d_value函數(shù)來獲取最大值與最小值的差值。在使用多個函數(shù)時使用列表填充,如需給函數(shù)取別名,則需要一個元組,如('最大差值',d_value)。#定義獲取最大最小值間差值函數(shù)defd_value(value):returnvalue.max()-value.min()df.groupby(df['channel']).agg([('最大差值',d_value),('均值','mean')])在Oracle、MySQL等關(guān)系型數(shù)據(jù)庫以及Hive等數(shù)據(jù)倉庫中,都能夠方便、快捷的進行數(shù)據(jù)的分組及聚合。在Python中,可以使用如Pandas庫提供的分組與聚合,執(zhí)行數(shù)據(jù)的分組及聚合操作。熱門R語言包的作者HadleyWickham提出了表示分組運算的術(shù)語"split-apply-combine"(拆分-應用-合并)。split-apply-combine模式如下:split:把要處理的數(shù)據(jù)分割成小片斷;apply:對每個小片斷獨立進行操作;combine:把片斷重新組合。通俗的講,split階段數(shù)據(jù)會根據(jù)我們所提供的一個或多個鍵拆分為多個組;apply階段會將一個函數(shù)應用各個分組并產(chǎn)生一個新的值;combine階段會將所有這些函數(shù)的執(zhí)行結(jié)果合并到最終的結(jié)果對象中。必備知識必備知識數(shù)據(jù)分組數(shù)據(jù)分組是根據(jù)統(tǒng)計研究的需要,將原始數(shù)據(jù)按照某種標準劃分成不同的組別,分組后的的數(shù)據(jù)稱為分組數(shù)據(jù)。在Pandas中,數(shù)據(jù)分組我們主要依靠groupby函數(shù),分組鍵可以有多種形式,可以使用Series、列表、字典、函數(shù)及多種混合分組。groupby函數(shù)語法如下:DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=<objectobject>,observed=False,dropna=True)2.數(shù)據(jù)聚合聚合指的是任何能夠從數(shù)組產(chǎn)生標量值的數(shù)據(jù)轉(zhuǎn)換過程。在Pandas中內(nèi)置了很多聚合函數(shù),使用這些聚合函數(shù)就處理分組之后的數(shù)據(jù),常用的聚合函數(shù)有sum、count、min、max、mean等。任務(wù)4透視表與交叉表任務(wù)描述對數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”進行加載、清洗、標準化之后,使用數(shù)據(jù)透視表與交叉表對數(shù)據(jù)進行各個維度數(shù)據(jù)的匯總。任務(wù)分析數(shù)據(jù)透視表與交叉表是數(shù)據(jù)處理中常用的兩種方式,通過透視表與交叉表的使用,可以用靈活、快速的定制分析計算要求,并且操作簡單,易于理解。本任務(wù)實現(xiàn)的關(guān)鍵點是通過透視表與交叉表得到數(shù)據(jù)匯總的過程。任務(wù)實施1.透視表在數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”中,使用數(shù)據(jù)透視表獲取各省份銷售額的平均值與該商品瀏覽次數(shù)的平均值。(1)使用index參數(shù)設(shè)置province列為數(shù)據(jù)透視表索引df=data[['province','total_price','channel','pv']]table=pd.pivot_table(df,index=['province’])table(2)使用index參數(shù)設(shè)置province、channel兩列同時為數(shù)據(jù)透視表索引table=pd.pivot_table(df,index=['province','channel'])table(3)使用values參數(shù)指定篩選列values參數(shù)是待聚合列的名稱,也就是需要對哪些數(shù)據(jù)進行篩選與計算。如果在篩選中沒有設(shè)置values,默認聚合所有數(shù)值列,非數(shù)值列不參與計算。我們使用total_price列作為篩選值。table=pd.pivot_table(df,index=['province','channel'],values=['total_price'])table任務(wù)實施2.交叉表在數(shù)據(jù)集“鞋類產(chǎn)品的銷售數(shù)據(jù)”中,使用交叉表統(tǒng)計各省份在不同銷售渠道的銷售次數(shù)。(1)使用crosstab進行統(tǒng)計pd.crosstab(df['province'],df['channel’])(2)使用crosstab進行統(tǒng)計并匯總crosstab可以增加margins參數(shù)來實現(xiàn)匯總,使用margins_name參數(shù)來指定匯總列名稱。pd.crosstab(df['province'],df['channel'],margins=True,margins_name='總計')必備知識1.透視表透視表(pivottable)是各種電子表格程序和其他數(shù)據(jù)分析軟件中一種常見的數(shù)據(jù)匯總工具。它根據(jù)一個或多個鍵對數(shù)據(jù)進行某些計算,如求和與計數(shù)等,并根據(jù)行和列上的分組鍵將數(shù)據(jù)分配到各個矩形區(qū)域中。在Python中,可以使用Pandas庫的pandas.pivot_tables生成透視表。pandas.pivot_tables函數(shù)語法如下:pandas.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False)在pivot_table方法中,有四個重要的參數(shù):index、values、columns、aggfunc,下面我們一起來了解一下這幾個參數(shù)的含義。(1)index參數(shù):是設(shè)置數(shù)據(jù)透視表的層次,它是用于分組的列名或其他分組鍵。通過數(shù)據(jù)表要獲取何種信息就按照相應的順序設(shè)置字段,它出現(xiàn)在結(jié)果透視表的行。(2)values參數(shù):在values參數(shù)中,我們也可以使用多列進行數(shù)據(jù)篩選,使用方式與index參數(shù)的使用方式相同。(3)columns參數(shù):是用于分組的列名或其他分組鍵,與index參數(shù)不同,它出現(xiàn)在結(jié)果透視表的列,它雖然不是一個必要的參數(shù),但是可以作為分割數(shù)據(jù)的可選方式。

(4)aggfunc參數(shù):可以設(shè)置對數(shù)據(jù)聚合時進行

溫馨提示

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

評論

0/150

提交評論