Python數據分析與挖掘 課件 第 7 章 數據預處理_第1頁
Python數據分析與挖掘 課件 第 7 章 數據預處理_第2頁
Python數據分析與挖掘 課件 第 7 章 數據預處理_第3頁
Python數據分析與挖掘 課件 第 7 章 數據預處理_第4頁
Python數據分析與挖掘 課件 第 7 章 數據預處理_第5頁
已閱讀5頁,還剩101頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據分析與挖掘第7章數據預處理本章內容數據預處理的必要性數據清洗數據集成數據標準化數據規約數據變換與離散化利用sklearn進行數據預處理2數據是數據挖掘的目標對象和原始資源,對數據挖掘最終結果起著決定性的作用。現實世界中的數據是多種多樣的,具有不同的特征,這就要求數據的存儲采用合適的數據類型,并且數據挖掘算法的適用性會受到具體的數據類型限制。第4章數據預處理低質量的數據導致低質量的數據挖掘結果1.數據預處理的必要性現實世界中的數據大多都是“臟”的,原始數據通常存在著噪聲、不一致、部分數據缺失等問題。數據的不一致各應用系統的數據缺乏統一的標準和定義,數據結構有較大的差異2.噪聲數據收集數據時很難得到精確的數據,如數據采集設備故障、數據傳輸過程中會出現錯誤或存儲介質可能出現的損壞等情況3.缺失值系統設計時可能存在的缺陷或者在系統使用過程中人為因素的影響41.數據預處理的必要性數據質量要求數據挖掘需要的數據必須是高質量的數據,即數據挖掘所處理的數據必須具有準確性(Correctness)、完整性(Completeness)和一致性(Consistency)等性質。此外,時效性(Timeliness)、可信性(Believability)和可解釋性(Interpretability)也會影響數據的質量。52.數據清洗現實世界中的數據一般是不完整的、有噪聲和不一致的“臟”數據,數據清理試圖填充缺失的數據值、光滑噪聲、識別離群點并糾正數據中的不一致。數據并不總是完整的引起空缺值的原因設備故障和其他數據不一致可能被刪除數據沒有被錄入-------Missingdata需要經過推斷而補上62.數據清洗數據清洗方法1.缺失值的處理(1)忽略元組(2)人工填寫缺失值(3)使用一個全局常量填充缺失值(4)使用屬性的中心度量(如均值或中位數)填充缺失值(5)使用與給定元組屬同一類的所有樣本的屬性均值或中位數(6)使用最可能的值填充缺失值72.數據清洗2.噪聲數據的處理噪聲(Noise)是被測量的變量的隨機誤差或方差。噪聲的處理方法一般有分箱、回歸和離群點分析等方法。(1)分箱分箱(Binning)方法通過考察數據的“近鄰”(即周圍的值)來光滑有序數據值。82.數據清洗2.噪聲數據的處理(2)回歸回歸(Regression)用一個函數擬合數據來光滑數據。(3)離群點分析離群點分析(OutlierAnalysis)可以通過如聚類的方法來檢測離群點。92.數據清洗利用Pandas進行數據清洗:1.缺失值的處理(1)檢測與處理缺失值函數isnull()可以直接判斷該列中的哪個數據為NaN。10In[1]:string_data=pd.Series(['aardvark','artichoke',np.nan,'avocado'])print(string_data)string_data.isnull()2.數據清洗1.缺失值的處理(2)缺失值的統計利用isnull().sum()統計缺失值11In[3]:df=pd.DataFrame(np.arange(12).reshape(3,4),columns=['A','B','C','D'])df.iloc[2,:]=np.nandf[3]=np.nanprint(df)df.isnull().sum()2.數據清洗1.缺失值的處理(3)info方法查看缺失值12In[4]:()Out[4]:<class'pandas.core.frame.DataFrame'>RangeIndex:3entries,0to2Datacolumns(total5columns):A2non-nullfloat64B2non-nullfloat64C2non-nullfloat64D2non-nullfloat6430non-nullfloat64dtypes:float64(5)memoryusage:200.0bytes2.數據清洗1.缺失值的處理(4)刪除缺失值13dropna(axis=0,how=‘any’,thresh=None,subset=None,

inplace=False)參數名稱使用說明axis默認為axis=0,當某行出現缺失值時,將該行丟棄并返回,當axis=1,當某列出現缺失值時,將該列丟棄how確定缺失值個數,缺省時how=‘any’、how=‘any’表明只要某行有缺失值就將該行丟棄,how=‘all’表明某行全部為缺失值才將其丟棄thresh閾值設定,當行列中非缺省值的數量少于給定的值就將該行丟棄subset

inplace部分標簽中刪除某行列,如:subset=[’a’,’d’],即丟棄子列ad中含有缺失值的行bool取值,默認False,當inplace=True,即對原數據操作,無返回值2.數據清洗1.缺失值的處理(4)刪除缺失值14fromnumpyimportnanasNAdata=pd.DataFrame([[1.,5.5,3.],[1.,NA,NA],[NA,NA,NA],

[NA,5.5,3.]])print(data)cleaned=data.dropna()print('刪除缺失值后的:\n',cleaned)刪除缺失值后的:

0

1

20

1.0

5.5

3.0傳入how=‘all’將只丟棄全為NA的那些行。2.數據清洗1.缺失值的處理(4)刪除缺失值15如果用同樣的方式丟棄dataframe的列,只需傳入axis=1即可。【例】dropna中的axis參數應用。In[9]:data=pd.DataFrame([[1.,5.5,NA],[1.,NA,NA],[NA,NA,NA],[NA,5.5,NA]])print(data)data.dropna(axis=1,how='all')2.數據清洗1.缺失值的處理(4)刪除缺失值16可以?thresh參數,當傳入thresh=N時,表示要求一行至少具有N個非NaN才能保留。【例】dropna中的thresh參數應用。In[10]:df=pd.DataFrame(np.random.randn(7,3))df.iloc[:4,1]=NAdf.iloc[:2,2]=NAprint(df)df.dropna(thresh=2)2.數據清洗1.缺失值的處理(5)填充缺失值缺失值所在的特征為數值型時,通常利用其均值、中位數和眾數等描述其集中趨勢的統計量來填充;缺失值所在特征為類別型數據時,則選擇眾數來填充。Pandas庫中提供了缺失值替換的方法fillna。pandas.DataFrame.fillna(value=None,method=None,asxi=None,inplace=False,limit=None)172.數據清洗1.缺失值的處理(5)填充缺失值18fillna參數及其說明參數名稱參數說明value用于填充缺失值的標量值或字典對象method插值方式axis待填充的軸,默認axis=0inplace修改調用者對象而不產生副本limit(對于前向和后向填充)可以連續填充的最大數量2.數據清洗1.缺失值的處理(5)填充缺失值19通過字典形式填充缺失值。In[11]:df=pd.DataFrame(np.random.randn(5,3))df.loc[:3,1]=NAdf.loc[:2,2]=NAprint(df)df.fillna({1:0.88,2:0.66})2.數據清洗1.缺失值的處理(5)填充缺失值20fillna中method的應用。In[12]:df=pd.DataFrame(np.random.randn(6,3))df.iloc[2:,1]=NAdf.iloc[4:,2]=NAprint(df)df.fillna(method='ffill')2.數據清洗1.缺失值的處理(5)填充缺失值21DataFrame中用均值填充。In[14]:df=pd.DataFrame(np.random.randn(4,3))df.iloc[2:,1]=NAdf.iloc[3:,2]=NAprint(df)df[1]=df[1].fillna(df[1].mean())print(df)2.數據清洗1.缺失值的處理(5)填充缺失值22replace替換數據值。In[15]:data={'姓名':['張三','小明','馬芳','國志'],'性別':['0','1','0','1'],

'籍貫':['北京','甘肅','','上海']}df=pd.DataFrame(data)df=df.replace('','不詳')print(df)2.數據清洗1.缺失值的處理(5)填充缺失值23replace替換數據值。In[16]:df=df.replace(['不詳','甘肅'],['蘭州','蘭州'])print(df)In[17]:df=df.replace({'1':'男','0':'女'})print(df)2.數據清洗1.缺失值的處理(5)填充缺失值24利用函數或映射進行數據轉換。在數據分析中,經常需要進行數據的映射或轉換,在Pandas中可以自定義函數,然后通過map方法實現。data={'姓名':['張三','小明','馬芳','國志'],'性別':['0','1','0','1'],'籍貫':['北京','蘭州','蘭州','上海']}df=pd.DataFrame(data)df['成績']=[58,86,91,78]print(df)defgrade(x):

ifx>=90:

return'優'

elif70<=x<90:

return'良'

elif60<=x<70:

return'中'

else:

return'差'df['等級']=df['成績'].map(grade)print(df)2.數據清洗3.數據異常值檢測異常值是指數據中存在的數值明顯偏離其余數據的值。異常值的存在會嚴重干擾數據分析的結果,因此經常要檢驗數據中是否有輸入錯誤或含有不合理的數據。在利用簡單的數據統計方法中一般常用散點圖、箱線圖和3σ法則。252.數據清洗3.數據異常值檢測1)散點圖方法:26In[19]:wdf=pd.DataFrame(np.arange(20),columns=['W'])wdf['Y']=wdf['W']*1.5+2wdf.iloc[3,1]=128wdf.iloc[18,1]=150wdf.plot(kind='scatter',x='W',y='Y')Out[19]:

2.數據清洗3.數據異常值檢測2)盒圖:利用箱線圖進行異常值檢測時,根據經驗,將最大(最小)值設置為與四分位數值間距為1.5個IQR(IQR=Q3-Q2)的值,即min=Q1-1.5IQR,max=Q3+1.5IQR,小于min和大于max的值被認為是異常值。27fig=wdf.boxplot(column=['Y'],return_type='dict')min=fig['caps'][0].get_ydata()[0]#獲取下邊緣值max=fig['caps'][1].get_ydata()[0]#獲取上邊緣值print('max=',max,';min=',min)print('離群點的索引是:')print(wdf[(wdf['Y']<min)|(wdf['Y']>max)].index)3.數據集成3.數據異常值檢測3)3σ法則:若數據服從正態分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過3倍標準差的值,因為在正態分布的假設下,距離平均值3σ之外的值出現的概率小于0.003。因此根據小概率事件,可以認為超出3σ之外的值為異常數據。28defoutRange(S):

blidx=(S.mean()-3*S.std()>S)|(S.mean()+3*S.std()<S)

idx=np.arange(S.shape[0])[blidx]

outRange=S.iloc[idx]

returnoutRangeoutier=outRange(wdf['Y'])outier2.數據清洗異常數據的處理1)刪除記錄直接將含有異常值的數據刪除。2)視為缺失值將異常值視為缺失值,利用處理缺失值的方法進行處理。3)平均值修正可以用前后兩個觀測值的平均值修正該異常值。4)不處理直接在具有異常值的數據集上進行數據分析與挖掘。3.數據集成數據集成是將多個數據源中的數據合并,存放于一個一致的數據存儲中。數據集成過程中的關鍵問題1.實體識別2.數據冗余和相關分析3.元組重復4.數據值沖突檢測與處理303.數據集成數據集成過程中的關鍵問題1.實體識別實體識別問題是數據集成中的首要問題,因為來自多個信息源的現實世界的等價實體才能匹配。如數據集成中如何判斷一個數據庫中的customer_id和另一數據庫中的cust_no是指相同的屬性?313.數據集成數據集成過程中的關鍵問題2.數據冗余和相關分析冗余是數據集成的另一重要問題。如果一個屬性能由另一個或另一組屬性值“推導”出,則這個屬性可能是冗余的。屬性命名不一致也會導致結果數據集中的冗余。32有些冗余可以被相關分析檢測到,對于標稱屬性,使用

(卡方)檢驗,對于數值屬性,可以使用相關系數(correlationcoefficient)和協方差(covariance)評估屬性間的相關性。3.數據集成數據集成過程中的關鍵問題2.數據冗余和相關分析33(1)標稱數據的

相關檢驗(2)數值數據的相關系數(3)數值數據的協方差3.數據集成34利用Python計算屬性間的相關性。In[22]:importpandasaspdimportnumpyasnpa=[47,83,81,18,72,41,50,66,47,20,96,21,16,60,37,59,22,16,32,63]b=[56,96,84,21,87,67,43,64,85,67,68,64,95,58,56,75,6,11,68,63]data=np.array([a,b]).Tdfab=pd.DataFrame(data,columns=['A','B'])#display(dfab)print('屬性A和B的協方差:',dfab.A.cov(dfab.B))print('屬性A和B的相關系數:',dfab.A.corr(dfab.B))Out[22]:屬性A和B的協方差:310.2157894736842屬性A和B的相關系數:0.499248710465243943.數據集成數據集成過程中的關鍵問題3.元組重復除了檢查屬性的冗余之外,還要檢測重復的元組,如給定唯一的數據實體,存在兩個或多個相同的元組。利用Pandas.DataFrame.duplicates方法檢測重復的數據利用Pandas.DataFrame.drop_duplicates方法刪除重復的數據353.數據集成數據集成過程中的關鍵問題4.數據值沖突檢測與處理數據集成還涉及數據值沖突的檢測與處理。例如不同學校的學生交換信息時,由于不同學校有各自的課程計劃和評分方案,同一門課的成績所采取的評分分數也有可能不同,如十分制或百分制。363.數據集成2.利用Pandas合并數據在實際的數據分析中,可能有不同的數據來源,因此,需要對數據進行合并處理。(1)merge數據合并merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=('_x','_y'),copy=True,indicator=False,validate=None)373.數據集成2.利用Pandas合并數據(1)merge數據合并38參數使用說明left參與合并的左側DataFrameright參與合并的右側DataFramehow連接方法:inner,left,right,outeron用于連接的列名left_on左側DataFrame中用于連接鍵的列right_on右側DataFrame中用于連接鍵的列left_index左側DataFrame中行索引作為連接鍵right_index右側DataFrame中行索引作為連接鍵sort合并后會對數據排序,默認為Truesuffixes修改重復名3.數據集成2.利用Pandas合并數據(1)merge數據合并39price=pd.DataFrame({'fruit':['apple','grape','orange','orange'],'price':[8,7,9,11]})amount=pd.DataFrame({'fruit':['apple','grape','orange'],'amout':[5,11,8]})display(price,amount,pd.merge(price,amount))3.數據集成2.利用Pandas合并數據(1)merge數據合并40merge合并時默認是內連接(inner),即返回交集。通過how參數可以選擇連接方法:左連接(left),右連接(right)和外連接(outer)。【例】左連接。display(pd.merge(price,amount,how='left'))3.數據集成2.利用Pandas合并數據(1)merge數據合并41也可以通過多個鍵進行合并。【例】merge通過多個鍵合并。In[27]:left=pd.DataFrame({'key1':['one','one','two'],

'key2':['a','b','a'],'value1':range(3)})right=pd.DataFrame({'key1':['one','one','two','two'],

'key2':['a','a','a','b'],'value2':range(4)})display(left,right,pd.merge(left,right,on=['key1','key2'],how='left'))3.數據集成2.利用Pandas合并數據(2)concat數據連接如果要合并的DataFrame之間沒有連接鍵,就無法使用merge方法。pandas中的concat方法可以實現,默認情況下會按行的方向堆疊數據。如果在列向上連接設置axis=1即可。423.數據集成2.利用Pandas合并數據(2)concat數據連接43兩個DataFrame的數據連接。In[30]:data1=pd.DataFrame(np.arange(6).reshape(2,3),columns=list('abc'))data2=pd.DataFrame(np.arange(20,26).reshape(2,3),columns=list('ayz'))data=pd.concat([data1,data2],axis=0)display(data1,data2,data)3.數據集成2.利用Pandas合并數據(2)concat數據連接44指定索引順序。In[31]:importpandasaspds1=pd.Series([0,1],index=['a','b'])s2=pd.Series([2,3,4],index=['a','d','e'])s3=pd.Series([5,6],index=['f','g'])s4=pd.concat([s1*5,s3],sort=False)s5=pd.concat([s1,s4],axis=1,sort=False)s6=pd.concat([s1,s4],axis=1,join='inner',sort=False)display(s5,s6)3.數據集成2.利用Pandas合并數據(3)combine_first合并數據45如果需要合并的兩個DataFrame存在重復索引,則使用merge和concat都無法正確合并,此時需要使用combine_first方法。4.數據標準化不同特征之間往往具有不同的量綱,由此造成數值間的差異很大。因此為了消除特征之間量綱和取值范圍的差異可能會造成的影響,需要對數據進行標準化處理。數據標準化(DataStandardization)一直是一項重要的處理流程。一般將數據標準化放在預處理過程中,作為一項通用技術而存在。機器學習中有部分模型是基于距離度量進行模型預測和分類的。由于距離對特征之間不同取值范圍非常敏感,所以基于距離度量的模型是十分有必要做數據標準化處理的。464.數據標準化離差標準化數據離差標準化是對原始數據所做的一種線性變換,將原始數據的數值映射到[0,1]區間。消除大單位和小單位的影響(消除量綱)變異大小的差異影響;47defMinMaxScale(data):

data=(data-data.min())/(data.max()-data.min())

returndatax=np.array([[1.,-1.,

2.],[2.,

0.,

0.],[0.,

1.,-1.]])print('原始數據為:\n',x)x_scaled=MinMaxScale(x)print('標準化后矩陣為:\n',x_scaled,end='\n')原始數據為:

[[1.-1.

2.]

[2.

0.

0.]

[0.

1.-1.]]標準化后矩陣為:

[[0.666666670.

1.

]

[1.

0.333333330.33333333]

[0.333333330.666666670.

]]4.數據標準化標準差標準化數據標準差標準化又稱零均值標準化或z分數標準化,是當前使用最廣泛的數據標準化方法。經過該方法處理的數據均值為0,標準化為1。消除單位影響及自身變量的差異。48defStandardScale(data):

data=(data-data.mean())/data.std()

returndatax=np.array([[1.,-1.,

2.],[2.,0.,0.],[0.,1.,-1.]])print('原始數據為:\n',x)x_scaled=StandardScale(x)print('標準化后矩陣為:\n',x_scaled,end='\n')數據歸一化/標準化的目的是獲得某種“無關性”,如偏置無關、尺度無關和長度無關等。當歸一化/標準化方法背后的物理意義和幾何含義與當前問題的需要相契合時,會對解決該問題有正向作用,反之則會起反作用。一般來說,涉及或隱含距離計算以及損失函數中含有正則項的算法,比如K-Means、KNN、PCA、SVM等,需要進行數據標準化,距離計算無關的概率模型和樹模型,如樸素貝葉斯、決策樹和隨機森林等,則不需要進行數據標準化。4.數據標準化5.數據歸約

數據歸約(DataReduction)用于在盡可能保持數據完整性的基礎上得到數據的歸約表示。也就是說,在歸約后的數據集上挖掘將更有效,而且仍會產生相同或相似的分析結果。數據歸約包括維歸約、數量歸約和數據壓縮。505.數據規約

維歸約的思路是減少所考慮的隨機變量或屬性的個數,用的方法有屬性子集選擇、小波變換和主成分分析。屬性子集選擇是一種維歸約方法,其中不相關、弱相關或冗余的屬性或維被檢測或刪除。而后兩種方法是原始數據變換或投影到較小的空間。515.數據規約

維歸約1.屬性子集選擇屬性子集選擇通過刪除不相關或者冗余屬性(或維)減少數據量。(1)逐步向前選擇由空屬性集作為規約集的起始,迭代確定原屬性集中最好的屬性并添加到規約集中。(2)逐步向后刪除由整個屬性集開始,在每次迭代中刪除尚在屬性集中最差的屬性。525.數據規約-維歸約

維歸約1.屬性子集選擇(3)逐步向前選擇和逐步向后刪除的組合每一步選擇一個最好的屬性,并在屬性中刪除一個最差的屬性。(4)決策樹歸納由給定的數據構造決策樹,不出現在樹中的所有屬性假定是不相關的,出現在樹中的屬性形成規約后的屬性子集。這些方法的約束條件可以不同,可以使用一個度量閾值決定何時終止屬性選擇過程。535.數據規約-維歸約

傅里葉變換-理解傅里葉變換,需要理解兩個核心概念:時域:時間和振幅的關系圖,橫坐標是時間,縱坐標是振幅。頻域:頻率和振幅的關系圖,橫坐標是頻率,縱坐標是振幅。任何「周期(T)「函數,都可以使用」傅立葉級數展開法」將它們分解為有限或無限個不同「頻率」不同「振幅」的正弦函數的疊加。傅里葉級數展開公式如下:如果把函數看成離散點構成的向量,那么就是這些正弦函數「基向量」的線性組合。545.數據規約-維歸約

傅里葉變換555.數據歸約-維歸約

小波變換小波變換是一種新的變換分析方法,它繼承和發展了短時傅立葉變換局部化的思想,同時又克服了窗口大小不隨頻率變化等缺點,能夠提供一個隨頻率改變的“時間-頻率”窗口,是進行信號時頻分析和處理的理想工具。565.數據歸約-維歸約

img=cv.imread("lena_color_256.tif")img=cv.resize(img,(448,448))#將多通道圖像變為單通道圖像img=cv.cvtColor(img,cv2.COLOR_BGR2GRAY).astype(np.float32)plt.figure('二維小波一級變換')coeffs=pywt.dwt2(img,'haar')cA,(cH,cV,cD)=coeffs#將各個子圖進行拼接,最后得到一張圖AH=np.concatenate([cA,cH+255],axis=1)VD=np.concatenate([cV+255,cD+255],axis=1)img=np.concatenate([AH,VD],axis=0)#顯示為灰度圖plt.axis('off')plt.imshow(img,'gray')plt.title('result')plt.show()575.數據歸約-維歸約

主成分分析主成分分析(PrincipalComponentAnalysis,PCA)又稱Karhunen-Loeve或K-L方法,用于搜索k個最能代表數據的n維正交向量,是最常用的一種降維方法。PCA的主要目的是找出數據中最主要的方面代替原始數據。具體的,假如數據集是m個n維數據構成,即(x(1),x(2),...,x(m))。希望將這m個數據的維度從n維降到n’維,這m個n'維的數據集盡可能的代表原始數據集。585.數據歸約-維歸約

主成分分析595.數據歸約-維歸約

5.數據歸約-維歸約

在scikit-learn中,與PCA相關的類都在sklearn.decomposition包中,其中最常用的PCA類是sklearn.decomposition.PCA。PCA類基本不需要調參,一般只需要指定需要降維后的維度,或者希望降維后主成分的方差和占原始維度所有特征方差和的比例閾值就可以了。運行sklearn.decomposition.PCA會返回兩個值,一個是explained_variance_,代表降維后的各主成分的方差值,該值越大,說明越是重要的主成分;一個是explained_variance_ratio_,代表降維后的各主成分的方差值占總方差值的比例,該比例越大,則越是重要的主成分。5.數據歸約-維歸約

主成分分析Sklearn實現鳶尾花數據的

降維,將原來的4維降為2維62importmatplotlib.pyplotaspltfromsklearn.decompositionimportPCAfromsklearn.datasetsimportload_irisdata=load_iris()y=data.targetx=data.datapca=PCA(n_components=2)#加載PCA算法,設置降維后主成分數目為2reduced_x=pca.fit_transform(x)#對樣本進行降維print(reduced_x)print("前兩個主成分的方差占總方差的比例:\n",pca.explained_variance_ratio_)代碼運行后顯示前兩個主成分的方差占總方差的比例為[0.924618720.05306648],表示第一個特征占了總方差比例的92.4%。5.數據歸約-維歸約

5.數據歸約-數量歸約

數量歸約數量歸約(NumerosityReduction)用替代的、較小的數據表示形式換原始數據。這些技術可以是參數或者非參數的。對于參數方法而言,使用模型估計數據,使得一般只需要存放模型參數而不是實際數據(離群點需存放),如回歸和對數-線性模型。存放數據規約表示的非參數方法包括:直方圖、聚類、抽樣和數據立方體聚類641.回歸和對數線性模型回歸和對數模型可以用來近似給定的數據。回歸和對數線性模型可以用來近似給定的數據。在(簡單)線性模型中,對數據擬合得到一條直線,多元回歸是(簡單)線性回歸的擴展,用兩個或多個自變量的線性函數對因變量y建模。5.數據歸約-數量歸約

2.直方圖將直方圖中桶的個數由觀測值的數量n減少到k個,使數據變成一塊一塊的呈現。直方圖使用分箱來近似數據分布。用直方圖規約數據,就是將直方圖中的桶的個數由觀測值的數量n減少到k個,使得數據變成一塊一塊的呈現。5.數據歸約-數量歸約

3.聚類聚類后用簇中的代表代替實際數據。聚類算法是將數據劃分為簇,使得簇內的數據對象盡可能“相似”,而簇間的數據對象盡可能“相異”。5.數據歸約-數量歸約

4.抽樣通過選取隨機樣本子集,實現小數據代表大數據的過程。抽樣過程包括簡單隨機抽樣、簇抽樣和分層抽樣。5.數據立方體聚類數據立方體是將細粒度的屬性聚集到粗粒度的屬性。5.數據歸約-數量歸約

5.數據歸約-數據壓縮

數據壓縮(DataCompression)使用變換,一遍得到原始數據的歸約或“壓縮”表示。如果數據可以在壓縮后的數據重構,而不損失信息,則該數據歸約被稱為無損的。如果是近似重構原數據,稱為有損的。基于小波變換的數據壓縮是一種非常重要的有損壓縮方法。696.數據變換和離散化在數據預處理過程中,不同的數據適合不同的數據挖掘算法。數據變換是一種將原始數據變換成較好數據格式的方法,以便作為數據處理前特定數據挖掘算法的輸入。數據離散化是一種數據變換的形式。數據變換的策略:1.光滑2.屬性構造3.聚集4.規范化5.離散化6.由標稱數據產生概念分層70數據變換與離散化數據變換的策略1.光滑數據光滑用于去掉數據中的噪聲。常用的數據平滑方法有分箱、回歸和聚類等方法。2.屬性構造屬性構造是通過由給定的屬性構造新的屬性并添加到屬性集中,以幫助數據挖掘。3.聚集聚集是對數據進行匯總或聚集。例如,可以聚集日銷售數據,計算月和年銷售量。通常,聚集用來為多個抽象層的數據分析構造數據立方體。71數據變換與離散化數據變換的策略4.規范化把屬性數據按比例縮放,使之落入一個特定的小區間,如-1.0~1.0。(1)最小-最大規范化72(2)z分數規范化(3)小數定標數據變換與離散化數據變換的策略5.離散化73(1)通過分箱離散化分箱是一種基于指定的箱個數的自頂向下的分裂技術。例如使用等寬或等頻分箱,然后用箱均值或中位數替換箱中的每個值,可以將屬性值離散化。分箱對用戶指定的箱個數很敏感,也易受離群點的影響。數據變換與離散化數據變換的策略5.離散化74(2)通過直方圖離散化直方圖把屬性A的值劃分為不相交的區間,稱作桶或箱。可以使用各種劃分規則定義直方圖。如在等寬直方圖中,將值分成相等分區或區間。直方圖分析算法可以遞歸地用于每個分區,自動地產生多級概念分層,直到達到一個預先設定的概念層數,過程終止。(3)通過聚類、決策樹和相關分析離散化數據變換與離散化6.由標稱數據產生概念分層對于標稱數據,概念分層可以基于模式定義以及每個屬性的不同值個數產生。使用概念分層變換數據使得較高層的知識模式可以被發現。它允許在多個抽象層進行挖掘。75Python數據變換與離散化

1.數據規范化數據分析的預處理除了數據清洗、數據合并和標準化之外,還包括數據變換的過程,如類別型數據變換和連續型數據的離散化。76a=[47,83,81,18,72,41]b=[56,96,84,21,87,67]data=np.array([a,b]).Tdfab=pd.DataFrame(data,columns=['A','B'])print('最小-最大規范化:\n',(dfab-dfab.min())/(dfab.max()-dfab.min()))print('零均值規范化:\n',(dfab-dfab.mean())/dfab.std())Python數據變換與離散化2.類別型數據的啞變量處理類別型數據是數據分析中十分常見的特征變量,但是在進行建模時,Python不能像R那樣去直接處理非數值型的變量,因此往往需要對這些類別變量進行一系列轉換,如啞變量。啞變量(DummyVariables)用以反映質的屬性的一個人工變量,是量化了的自變量,通常取值為0或1。Python中利用pandas庫中的get_dummies函數對類別型特征進行啞變量處理。77Python數據變換與離散化2.類別型數據的啞變量處理78Python數據變換與離散化

3.連續型變量的離散化數據分析和統計的預處理階段,經常會碰到年齡、消費等連續型數值,而很多模型算法尤其是分類算法都要求數據是離散的,因此要將數值進行離散化分段統計,提高數據區分度。常用的離散化方法主要有等寬法、等頻法和聚類分析法。(1)等寬法Pandas提供了cut函數,可以進行連續型數據的等寬離散化。cut函數的基礎語法格式為:pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3)79Python數據變換與離散化

3.連續型變量的離散化(1)等寬法

pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3)80參數名稱說明x接收array或Series,待離散化的數據bins接收int、list、array和tuple。若為int指離散化后的類別數目,若為序列型則表示進行切分的區間,每兩個數的間隔為一個區間right接收boolean,代表右側是否為閉區間,默認為Truelabels接收list、array,表示離散化后各個類別的名稱,默認為空retbins接收boolean,代表是否返回區間標簽,默認為Falseprecision接收int,顯示標簽的精度,默認為3Python數據變換與離散化

3.連續型變量的離散化(1)等寬法81np.random.seed(666)score_list=np.random.randint(25,100,size=10)print('原始數據:\n',score_list)bins=[0,59,70,80,100]score_cut=pd.cut(score_list,bins)print(pd.value_counts(score_cut))#統計每個區間人數原始數據:

[27705587959855618676](80,100]

4(0,59]

3(59,70]

2(70,80]

1dtype:int64Python數據變換與離散化(2)等頻法cut函數雖然不能夠直接實現等頻離散化,但可以通過定義將相同數量的記錄放進每個區間。82In[40]:defSameRateCut(data,k):k=2w=data.quantile(np.arange(0,1+1.0/k,1.0/k))data=pd.cut(data,w)returndataresult=SameRateCut(pd.Series(score_list),3)result.value_counts()Out[40]:(73.0,97.0]5(27.0,73.0]4dtype:int64Python數據變換與離散化(3)聚類分析法聚類的方法包括兩步,首先將連續型數據用聚類算法(如K-Means算法等)進行聚類,然后處理聚類得到的簇,為合并到一個簇的連續型數據做同一標記。聚類分析的離散化需要用戶指定簇的個數,用來決定產生的區間數。837.利用sklearn進行數據預處理84利用sklearn進行數據預處理1.數據標準化、平均去除和方差縮放sklearn.preprocessing.scale(X,axis=0,with_mean=True,with_std=True,copy=True)85參數數據類型意義X{array-like,sparsematrix}以此數據為中心縮放axisint(0bydefault)軸向設置,置為0,獨立的標準化每個特征,1則標準化每個樣本(即行)with_meanboolean,Truebydefault如果是True,縮放之前先中心化數據with_stdboolean,Truebydefault如果是True,以單位方差法縮放數據(或者等價地,單位標準差)copyboolean,optional,defaultTrueFalse:原地執行行標準化并避免復制利用sklearn進行數據預處理86數據的標準化、方差和標準差求解示例In[41]:fromsklearnimportpreprocessingimportnumpyasnpX_train=np.array([[1.,-2.,1.5],[2.2,1.3,0.5],[0.3,1.,-1.5]])X_scaled=preprocessing.scale(X_train)print('X_train:\n',X_train)print('X_scaled:\n',X_scaled)print('均值:',X_scaled.mean(axis=0))print('單位方差:',X_scaled.std(axis=0))Out[41]:X_train:[[1.-2.1.5][2.21.30.5][0.31.-1.5]]X_scaled:[[-0.21242964-1.409427721.06904497][1.317063790.805387270.26726124][-1.104634150.60404045-1.33630621]]均值:

[0.0.0.]單位方差:

[1.1.1.]利用sklearn進行數據預處理1.數據標準化、平均去除和方差縮放preprocessing模塊還提供了一個實用程序類StandardScaler,用以實現TransformerAPI計算訓練集的均值和標準差,以便以后能夠在測試集上重新應用相同的轉換。sklearn的轉換器通常與分類器、回歸器或者其他的評估器組合以構建復合評估器。87利用sklearn進行數據預處理88數據的標準化計算示例。In[42]:scaler=preprocessing.StandardScaler().fit(X_train)print('scaler.scale_:',scaler.scale_)print('scaler.mean_:',scaler.mean_)scaler.transform(X_train)Out[42]:scaler.scale_:[0.784573491.489966441.24721913]scaler.mean_:[1.166666670.10.16666667]array([[1.,-2.,1.5],[2.2,1.3,0.5],[0.3,1.,-1.5]])利用sklearn進行數據預處理14六月202589然后在新數據上使用Scaler實例來像在訓練集上那樣轉換它:In[42]X_test=[[-1.,1.,0.]]scaler.transform(X_test)Out[42]array([[-2.76158538,0.60404045,-0.13363062]])通過將with_mean=False或with_std=False傳遞給StandardScaler的構造函數,可以禁用置中或縮放。利用sklearn進行數據預處理2.特征縮放另一種標準化是特征縮放,使其介于給定的最小最大值之間,通常是0-1之間,或者使每個特征的最大絕對值被縮放當單位大小。(1)一般特征值縮放sklearn.preprocessing.minmax_scale(X,feature_range=(0,1),axis=0,copy=True)min_max_scaler=preprocessing.minmax_scale()X_train_minmax=min_max_scaler.fit_transform(X_train)min_max_scaler.transform(X_test)90利用sklearn進行數據預處理數據的縮放示例。In[43]:X_train=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])min_max_scaler=preprocessing.MinMaxScaler()X_train_minmax=min_max_scaler.fit_transform(X_train)print('原數據:\n',X_train)print('歸一化:\n',X_train_minmax)然后可以在新數據上使用Scaler實例來像在培訓集上那樣轉換它:In[43]:X_test=np.array([[-3.,-1.,4.]])X_test_minmax=min_max_scaler.transform(X_test)print('測試數據:',X_test)print('歸一化的測試數據:\n',X_test_minmax)print('',min_max_scaler.scale_)print('',min_max_scaler.min_)利用sklearn進行數據預處理利用MaxAbsScaler將數據歸一化。In[44]:X_train=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])max_Abs_scaler=preprocessing.MaxAbsScaler()X_train_minmax=max_Abs_scaler.fit_transform(X_train)print('原數據:\n',X_train)print('歸一化:\n',X_train_minmax)然后可以在新數據上使用Scaler實例來像在訓練集上那樣轉換它:In[44]:X_test=np.array([[-3.,-1.,4.]])X_test_maxAbs=max_Abs_scaler.transform(X_test)print('測試數據:',X_test)print('歸一化的測試數據:',X_test_maxAbs)利用sklearn進行數據預處理2.特征縮放(2)縮放稀疏數據將稀疏數據居中會破壞數據中的稀疏結構,但是縮放稀疏矩陣又是有意義的,特別是當特征處于不同的縮放比例。

MaxAbsScaler和maxabs_scale適用于縮放稀疏數據。93利用sklearn進行數據預處理2.特征縮放(3)帶異常值的縮放數據如果您的數據包含許多異常值,則使用數據的平均值和方差進行縮放可能不會很好地工作。94利用sklearn進行數據預處理3.非線性變換非線性變換有分位數轉換和冪轉換。分位數變換和冪變換都是基于特征的單調變換,從而保持每個特征值的秩。分位數變換將所有特征置于相同的期望分布中。冪變換是一類參數變換,其目的是將數據從任意分布映射到接近高斯分布的位置。(1)映射到均勻分布QuantileTransformer()和QuantileTransform提供非參數轉換,將數據映射到0~1的均勻分布。95利用sklearn進行數據預處理數據映射到值介于0和1之間的均勻分布In[45]:fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitX,y=load_iris(return_X_y=True)X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)quantile_transformer=preprocessing.QuantileTransformer(random_state=0)X_train_trans=quantile_transformer.fit_transform(X_train)X_test_trans=quantile_transformer.transform(X_test)print(np.percentile(X_train[:,0],[0,25,50,75,100]))#此特征對應于以厘米為單位的萼片長度。print(np.percentile(X_train_trans[:,0],[0,25,50,75,100]))Out[45]:[4.35.15.86.57.9][0.0.238738740.509009010.743243241.]利用sklearn進行數據預處理3.非線性變換(2)映射到高斯分布將數據映射到盡可能接近高斯分布,以穩定方差和最小化偏度。使用Box-cox變換將對數正態分布繪制的樣本映射到正態分布示例。97利用sklearn進行數據預處理使用Box-Cox將從對數正態分布繪制的樣本映射到正態分布的示例。In[46]:pt=preprocessing.PowerTransformer(method='box-cox',standardize=False)X_lognormal=np.random.RandomState(616).lognormal(size=(3,3))print(X_lognormal)T=pt.fit_transform(X_lognormal)print(T)Out[46]:[[1.283317181.180922280.84160269][0.942932791.609608360.3879099][1.352356680.217156731.09977091]][[0.490243490.17881995-0.1563781][-0.051028920.5

溫馨提示

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

評論

0/150

提交評論