6 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理《Python數(shù)據(jù)挖掘》_第1頁
6 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理《Python數(shù)據(jù)挖掘》_第2頁
6 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理《Python數(shù)據(jù)挖掘》_第3頁
6 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理《Python數(shù)據(jù)挖掘》_第4頁
6 使用pandas進(jìn)行數(shù)據(jù)預(yù)處理《Python數(shù)據(jù)挖掘》_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

使用pandas進(jìn)行數(shù)據(jù)預(yù)處理1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標(biāo)準(zhǔn)化數(shù)據(jù)3轉(zhuǎn)換數(shù)據(jù)4數(shù)據(jù)預(yù)處理簡介數(shù)據(jù)預(yù)處理簡介合并數(shù)據(jù)合并數(shù)據(jù)合并數(shù)據(jù)數(shù)據(jù)預(yù)處理簡介數(shù)據(jù)預(yù)處理簡介數(shù)據(jù)預(yù)處理簡介合并數(shù)據(jù)橫向或縱向堆疊合并數(shù)據(jù)主鍵合并數(shù)據(jù)重疊合并數(shù)據(jù)橫向堆疊,即將兩個(gè)表在x軸向拼接在一起,可以使用concat函數(shù)完成。concat函數(shù)的基本使用格式如下。concat函數(shù)的常用參數(shù)及其說明如下表。堆疊合并數(shù)據(jù)1.橫向堆疊參數(shù)名稱參數(shù)說明objs接收多個(gè)Series、DataFrame、Panel的組合。表示參與連接的pandas對(duì)象的列表的組合。無默認(rèn)值axis接收int。表示連接的軸向,可選0和1。默認(rèn)為0pandas.concat(objs,axis=0,join='outer',ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False,sort=False,copy=True)concat函數(shù)的常用參數(shù)及其說明(續(xù)表)。堆疊合并數(shù)據(jù)參數(shù)名稱參數(shù)說明join接收str。表示其他軸向上的索引是按交集(inner)還是并集(outer)進(jìn)行合并。默認(rèn)為outerignore_index接收bool。表示是否不保留連接軸上的索引,產(chǎn)生一組新索引range(total_length)。默認(rèn)為Falsekeys接收sequence。表示與連接對(duì)象有關(guān)的值,用于形成連接軸向上的層次化索引。默認(rèn)為Nonelevels接收包含多個(gè)sequence的list。表示在指定keys參數(shù)后,指定用作層次化索引各級(jí)別上的索引。默認(rèn)為Nonenames接收list。表示在設(shè)置了keys和levels參數(shù)后,用于創(chuàng)建分層級(jí)別的名稱。默認(rèn)為Noneverify_integrity接收bool。表示檢查新連接的軸是否包含重復(fù)項(xiàng),如果發(fā)現(xiàn)重復(fù)項(xiàng),那么引發(fā)異常。默認(rèn)為Falsesort接收bool。表示對(duì)非連接軸進(jìn)行排序。默認(rèn)為False當(dāng)參數(shù)axis=1時(shí),concat函數(shù)可做行對(duì)齊,然后將不同列名稱的兩張或多張表合并。當(dāng)兩個(gè)表索引不完全一樣時(shí),可以設(shè)置join參數(shù)選擇是內(nèi)連接還是外連接。在內(nèi)連接的情況下,僅僅返回索引重疊部分?jǐn)?shù)據(jù);在外連接的情況下,則顯示索引的并集部分?jǐn)?shù)據(jù),不足的地方則使用空值填補(bǔ),橫向堆疊外連接示例如圖所示。當(dāng)兩份數(shù)據(jù)索引完全一樣時(shí),不論join參數(shù)的取值是inner或outer,結(jié)果都是將兩個(gè)表完全按照x軸拼接起來。堆疊合并數(shù)據(jù)dict1={'ID':[1,2,3,4,5,6,7,8,9],'System':['win10','win10',np.nan,'win10',np.nan,np.nan,'win7','win7','win8'],'cpu':['i7','i5',np.nan,'i7',np.nan,np.nan,'i5','i5','i3']}dict2={'ID':[1,2,3,4,5,6,7,8,9],'System':[np.nan,np.nan,'win7',np.nan,'win8','win7',np.nan,np.nan,np.nan],'cpu':[np.nan,np.nan,'i3',np.nan,'i7','i5',np.nan,np.nan,np.nan]}堆疊合并數(shù)據(jù)使用concat函數(shù)時(shí),在默認(rèn)情況下,即axis=0,concat函數(shù)做列對(duì)齊,將不同行索引的兩張或多張表縱向合并。在兩張表的列名并不完全相同的情況下,可以使用join參數(shù)。當(dāng)join參數(shù)取值為inner時(shí),返回的僅僅是列名的交集所代表的列。當(dāng)join參數(shù)取值為outer時(shí),返回的是兩者列名的并集所代表的列。其原理示意如圖。當(dāng)兩張表的列名完全相同時(shí),不論join參數(shù)的取值是inner還是outer,結(jié)果都是將兩個(gè)表完全按照y軸拼接起來。堆疊合并數(shù)據(jù)2.縱向堆疊append()方法也可以用于縱向合并兩張表。但是使用append()方法實(shí)現(xiàn)縱向表堆疊的前提條件是兩張表的列名需要完全一致。append()方法的基本使用格式如下。append()方法的參數(shù)說明如下。堆疊合并數(shù)據(jù)參數(shù)名稱參數(shù)說明other接收DataFrame或Series。表示要添加的新數(shù)據(jù)。無默認(rèn)值ignore_index接收bool。如果輸入True,那么就會(huì)對(duì)新生成的DataFrame使用新的索引(自動(dòng)產(chǎn)生),而忽略原來數(shù)據(jù)的索引。默認(rèn)為Falseverify_integrity接收bool。如果輸入True,那么當(dāng)ignore_index為False時(shí),會(huì)檢查添加的數(shù)據(jù)索引是否沖突,若沖突,則會(huì)添加失敗。默認(rèn)為Falsesort接收bool。如果輸入True,那么會(huì)對(duì)合并的兩個(gè)表的列進(jìn)行排序。默認(rèn)為Falsepandas.DataFrame.append(other,ignore_index=False,verify_integrity=False,sort=False)主鍵合并,即通過一個(gè)或多個(gè)鍵將兩個(gè)數(shù)據(jù)集的行連接起來,類似于SQL中的join。針對(duì)兩張包含不同特征的表,將根據(jù)某幾個(gè)特征一一對(duì)應(yīng)拼接起來,合并后數(shù)據(jù)的列數(shù)為兩個(gè)原數(shù)據(jù)的列數(shù)和減去連接鍵的數(shù)量。主鍵合并數(shù)據(jù)和數(shù)據(jù)庫的join一樣,merge函數(shù)也有左連接(left)、右連接(right)、內(nèi)連接(inner)和外連接(outer)。比起數(shù)據(jù)庫SQL語言中的join,merge函數(shù)還有其自身獨(dú)到之處,如可以在合并過程中對(duì)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行排序等,merge函數(shù)的基本使用格式如下。根據(jù)merge函數(shù)中的參數(shù)說明,并按照需求修改相關(guān)參數(shù),即可以多種方法實(shí)現(xiàn)主鍵合并。主鍵合并數(shù)據(jù)pandas.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)merge函數(shù)的常用參數(shù)及其說明。主鍵合并數(shù)據(jù)參數(shù)名稱參數(shù)說明left接收DataFrame或Series。表示要添加的新數(shù)據(jù)1。無默認(rèn)值right接收DataFrame或Series。表示要添加的新數(shù)據(jù)2。無默認(rèn)值how接收“inner”“outer”“l(fā)eft”或“right”。表示數(shù)據(jù)的連接方式。默認(rèn)為inneron接收str或sequence。表示兩個(gè)數(shù)據(jù)合并的主鍵(必須一致)。默認(rèn)為Noneleft_on接收str或sequence。表示left參數(shù)接收數(shù)據(jù)用于合并的主鍵。默認(rèn)為Nonemerge函數(shù)的常用參數(shù)及其說明(續(xù)表)。主鍵合并數(shù)據(jù)參數(shù)名稱參數(shù)說明right_on接收str或sequence。表示right參數(shù)接收數(shù)據(jù)用于合并的主鍵。默認(rèn)為Noneleft_index接收bool。表示是否將left參數(shù)接收數(shù)據(jù)的index作為連接主鍵。默認(rèn)為Falseright_index接收bool。表示是否將right參數(shù)接收數(shù)據(jù)的index作為連接主鍵。默認(rèn)為Falsesort接收bool。表示是否根據(jù)連接鍵對(duì)合并后的數(shù)據(jù)進(jìn)行排序。默認(rèn)為Falsesuffixes接收tuple。表示用于追加到left和right參數(shù)接收數(shù)據(jù)列名相同時(shí)的后綴。默認(rèn)為('_x','_y')在數(shù)據(jù)分析和數(shù)據(jù)處理過程中偶爾會(huì)出現(xiàn)兩份數(shù)據(jù)的內(nèi)容幾乎一致的情況,但是某些特征在其中一張表上是完整的,而在另外一張表上的數(shù)據(jù)則是缺失的。combine_first()方法來進(jìn)行重疊數(shù)據(jù)合并,其原理如下圖所示。重疊合并數(shù)據(jù)combine_first()方法的基本使用格式如下。combine_first()方法的常用參數(shù)及其說明表如下。重疊合并數(shù)據(jù)參數(shù)名稱參數(shù)說明other接收DataFrame。表示參與重疊合并的另一個(gè)DataFrame。無默認(rèn)值pandas.DataFbine_first(other)1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標(biāo)準(zhǔn)化數(shù)據(jù)3轉(zhuǎn)換數(shù)據(jù)4記錄重復(fù),即一個(gè)或多個(gè)特征的某幾條記錄的值完全相同。方法一:利用列表(list)去重,自定義去重函數(shù)。方法二:利用集合(set)元素唯一的特性去重。比較上述兩種方法可以發(fā)現(xiàn),方法一代碼冗長。方法二看似代碼簡潔了許多,但是會(huì)導(dǎo)致數(shù)據(jù)的排列發(fā)生改變。檢測與處理重復(fù)值1.記錄重復(fù)pandas提供了一個(gè)名為drop_duplicates的去重方法,使用該方法進(jìn)行去重不會(huì)改變數(shù)據(jù)原始排列,并且兼具代碼簡潔和運(yùn)行穩(wěn)定的特點(diǎn)。不僅支持單一特征的數(shù)據(jù)去重,還能夠依據(jù)DataFrame的其中一個(gè)或多個(gè)特征進(jìn)行去重操作。drop_duplicates()方法的基本使用格式如下。檢測與處理重復(fù)值pandas.DataFrame.drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)drop_duplicates()方法的常用參數(shù)及其說明。檢測與處理重復(fù)值參數(shù)名稱參數(shù)說明subset接收str或sequence。表示進(jìn)行去重的列。默認(rèn)為Nonekeep接收特定str。表示重復(fù)時(shí)保留第幾個(gè)數(shù)據(jù),“first”表示保留第一個(gè);“l(fā)ast”表示保留最后一個(gè);False表示只要有重復(fù)都不保留。默認(rèn)為firstinplace接收bool。表示是否在原表上進(jìn)行操作。默認(rèn)為Falseignore_index接收bool。表示是否忽略索引。默認(rèn)為False結(jié)合相關(guān)的數(shù)學(xué)和統(tǒng)計(jì)學(xué)知識(shí),要去除連續(xù)的特征重復(fù),可以利用特征間的相似度將兩個(gè)相似度為1的特征去除其中一個(gè)。在pandas中,相似度的計(jì)算方法為corr()。使用該方法計(jì)算相似度時(shí),默認(rèn)為pearson法,可以通過method參數(shù)進(jìn)行調(diào)節(jié),目前還支持spearman法和kendall法。通過相似度矩陣去重存在一個(gè)弊端是只能對(duì)數(shù)值型重復(fù)特征去重,類別型特征之間無法通過計(jì)算相似系數(shù)來衡量相似度,因此無法根據(jù)相似度矩陣對(duì)其進(jìn)行去重處理。除了使用相似度矩陣進(jìn)行特征去重之外,還可以通過equals()方法進(jìn)行特征去重。檢測與處理重復(fù)值2.特征重復(fù)equals()方法的基本使用格式如下。equals()方法的參數(shù)說明表如下。檢測與處理重復(fù)值參數(shù)名稱參數(shù)說明other接收Series或DataFrame。表示要與第一個(gè)進(jìn)行比較的另一個(gè)Series或DataFrame。無默認(rèn)值pandas.DataFrame.equals(other)在數(shù)據(jù)中的某個(gè)或某些特征的值是不完整的,這些值稱為缺失值。pandas提供了識(shí)別缺失值的isnull()方法以及識(shí)別非缺失值的notnull()方法,這兩種方法在使用時(shí)返回的都是布爾值,即True和False。結(jié)合sum函數(shù)、isnull()方法和notnull()方法,可以檢測數(shù)據(jù)中缺失值的分布以及數(shù)據(jù)中一共含有多少缺失值。isnull()方法和notnull()方法的結(jié)果正好相反,因此使用其中任意一個(gè)都可以識(shí)別出數(shù)據(jù)是否存在缺失值。檢測與處理缺失值刪除法是指將含有缺失值的特征或記錄刪除。刪除法分為刪除觀測記錄和刪除特征兩種,它屬于通過減少樣本量來換取信息完整度的一種方法,是一種較為簡單的缺失值處理方法。pandas中提供了簡便的刪除缺失值的dropna()方法,通過控制參數(shù),既可以刪除觀測記錄,又可以刪除特征。dropna()方法的基本使用格式如下。檢測與處理缺失值1.刪除法pandas.DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)dropna()方法的常用參數(shù)及其說明。檢測與處理缺失值參數(shù)名稱參數(shù)說明axis接收0或1。表示軸向,0為刪除觀測記錄(行),1為刪除特征(列)。默認(rèn)為0how接收特定str。表示刪除的形式,當(dāng)取值為any時(shí),表示只要有缺失值存在就執(zhí)行刪除操作;當(dāng)取值為all時(shí),表示當(dāng)且僅當(dāng)全部為缺失值時(shí)才執(zhí)行刪除操作。默認(rèn)為anysubset接收array。表示進(jìn)行去重的列/行。默認(rèn)為Noneinplace接收bool。表示是否在原表上進(jìn)行操作。默認(rèn)為False替換法是指用一個(gè)特定的值替換缺失值。特征可分為數(shù)值型和類別型,兩者出現(xiàn)缺失值時(shí)的處理方法也是不同的。當(dāng)缺失值所在特征為數(shù)值型時(shí),通常利用其均值、中位數(shù)或眾數(shù)等描述其集中趨勢的統(tǒng)計(jì)量來代替缺失值。當(dāng)缺失值所在特征為類別型時(shí),則選擇使用眾數(shù)來替換缺失值。檢測與處理缺失值2.替換法pandas庫中提供了缺失值替換的fillna()方法,fillna()方法的基本使用格式如下。fillna()方法的常用參數(shù)及其說明如下。檢測與處理缺失值pandas.DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None)參數(shù)名稱參數(shù)說明value接收scalar、dict、Series或DataFrame。表示用于替換缺失值的值。默認(rèn)為Nonemethod接收特定str。表示填補(bǔ)缺失值的方式。當(dāng)取值為“backfilll”或“bfill”時(shí)表示使用下一個(gè)非缺失值來填補(bǔ)缺失值;當(dāng)取值為“pad”或“ffill”時(shí)表示使用上一個(gè)非缺失值來填補(bǔ)缺失值。默認(rèn)為Nonefillna()方法的常用參數(shù)及其說明(續(xù)表)。檢測與處理缺失值參數(shù)名稱參數(shù)說明axis接收0或1。表示軸向。默認(rèn)為Noneinplace接收bool。表示是否在原表上進(jìn)行操作。默認(rèn)為Falselimit接收int。表示填補(bǔ)缺失值個(gè)數(shù)上限,超過則不進(jìn)行填補(bǔ)。默認(rèn)為Nonedowncast接收dict。表示轉(zhuǎn)換數(shù)據(jù)類型。默認(rèn)為None刪除法簡單易行,但是會(huì)引起數(shù)據(jù)結(jié)構(gòu)變動(dòng),樣本減少;替換法使用難度較低,但是會(huì)影響數(shù)據(jù)的標(biāo)準(zhǔn)差,導(dǎo)致信息量變動(dòng)。線性插值是一種較為簡單的插值方法,它針對(duì)已知的值求出線性方程,通過求解線性方程得到缺失值。檢測與處理缺失值3.插值法多項(xiàng)式插值是利用已知的值擬合一個(gè)多項(xiàng)式,使得現(xiàn)有的數(shù)據(jù)滿足這個(gè)多項(xiàng)式,再利用這個(gè)多項(xiàng)式求解缺失值,常見的多項(xiàng)式插值又分有拉格朗日插值和牛頓插值等。樣條插值是以可變樣條來做出一條經(jīng)過一系列點(diǎn)的光滑曲線的插值方法。插值樣條由一些多項(xiàng)式組成,每一個(gè)多項(xiàng)式都由相鄰兩個(gè)數(shù)據(jù)點(diǎn)決定,這樣可以保證兩個(gè)相鄰多項(xiàng)式及其導(dǎo)數(shù)在連接處連續(xù)。檢測與處理缺失值SciPy庫中的interpolate模塊除了提供常規(guī)的插值法外,還提供了如在圖形學(xué)領(lǐng)域具有重要作用的重心坐標(biāo)插值(BarycentricInterpolator)等。在實(shí)際應(yīng)用中,需要根據(jù)不同的場景選擇合適的插值方法。#線性插值importnumpyasnpfromerpolateimportinterp1d#創(chuàng)建自變量xx=np.array([1,2,3,4,5,8,9,10])#創(chuàng)建因變量y1y1=np.array([2,8,18,32,50,128,162,200])#創(chuàng)建因變量y2y2=np.array([3,5,7,9,11,17,19,21])檢測與處理缺失值#線性插值擬合x、y1linear_ins_value1=interp1d(x,y1,kind='linear')#線性插值擬合x、y2linear_ins_value2=interp1d(x,y2,kind='linear')print('當(dāng)x為6、7時(shí),使用線性插值y1為:',linear_ins_value1([6,7]))print('當(dāng)x為6、7時(shí),使用線性插值y2為:',linear_ins_value2([6,7]))#拉格朗日插值fromerpolateimportlagrangelarge_ins_value1=lagrange(x,y1)#拉格朗日插值擬合x、y1large_ins_value2=lagrange(x,y2)#拉格朗日插值擬合x、y2print('當(dāng)x為6,7時(shí),使用拉格朗日插值y1為:',large_ins_value1([6,7]))print('當(dāng)x為6,7時(shí),使用拉格朗日插值y2為:',large_ins_value2([6,7]))#樣條插值#樣條插值擬合x、y1y1_new=np.linspace(x.min(),x.max(),10)f=interp1d(x,y1,kind='cubic')#編輯插值函數(shù)格式spline_ins_value1=f(y1_new)#通過相應(yīng)的插值函數(shù)求得新的函數(shù)點(diǎn)#樣條插值擬合x、y2y2_new=np.linspace(x.min(),x.max(),10)f=interp1d(x,y2,kind='cubic')#編輯插值函數(shù)格式spline_ins_value2=f(y2_new)#通過相應(yīng)的插值函數(shù)求得新的函數(shù)點(diǎn)print('使用樣條插值y1為:',spline_ins_value1)print('使用樣條插值y2為:',spline_ins_value2)從擬合結(jié)果可以看出,在多項(xiàng)式插值和樣條插值兩種情況下的擬合都非常出色,線性插值法只在自變量和因變量為線性關(guān)系的情況下擬合才較為出色。在實(shí)際分析過程中,由于自變量與因變量的關(guān)系是線性的情況非常少見,所以在大多數(shù)情況下,多項(xiàng)式插值和樣條插值是較為合適的選擇。SciPy庫中的interpolate模塊除了提供常規(guī)的插值法外,還提供了如在圖形學(xué)領(lǐng)域具有重要作用的重心坐標(biāo)插值(BarycentricInterpolator)等。在實(shí)際應(yīng)用中,需要根據(jù)不同的場景選擇合適的插值方法。檢測與處理缺失值3σ原則又稱為拉依達(dá)準(zhǔn)則,其原則就是先假設(shè)一組檢測數(shù)據(jù)只含有隨機(jī)誤差,對(duì)原始數(shù)據(jù)進(jìn)行計(jì)算處理得到標(biāo)準(zhǔn)差,然后按一定的概率確定一個(gè)區(qū)間,認(rèn)為誤差超過這個(gè)區(qū)間就屬于異常。3σ原則僅適用于對(duì)正態(tài)或近似正態(tài)分布的樣本數(shù)據(jù)進(jìn)行處理。正態(tài)分布數(shù)據(jù)的3σ原則如下表所示,其中σ代表標(biāo)準(zhǔn)差,μ代表均值。數(shù)據(jù)的數(shù)值分布幾乎全部集中在區(qū)間(μ

3σ,μ+3σ)內(nèi),超出這個(gè)范圍的數(shù)據(jù)僅占不到0.3%。故根據(jù)小概率原理,可以認(rèn)為超出3σ的部分為異常數(shù)據(jù)。檢測與處理異常值1.3σ原則數(shù)值分布在數(shù)據(jù)中的占比(μ

σ,

σ)0.6827(μ

2σ,

2σ)0.9545(μ

3σ,

3σ)0.9973all_info=pd.read_csv('../tmp/all_info_notnull.csv')#定義3σ原則來識(shí)別異常值函數(shù)defout_range(ser1):bool_ind=(ser1.mean()-3*ser1.std()>ser1)|\(ser1.mean()+3*ser1.var()<ser1)index=np.arange(ser1.shape[0])[bool_ind]outrange=ser1.iloc[index]returnoutrangeoutlier=out_range(all_info['年齡'])print('使用3σ原則判定異常值個(gè)數(shù)為:',outlier.shape[0])print('異常值的最大值為:',outlier.max())print('異常值的最小值為:',outlier.min())示例箱線圖提供了識(shí)別異常值的一個(gè)標(biāo)準(zhǔn),即異常值通常被定義為小于QL-1.5IQR或大于QU+1.5IQR的值。QL稱為下四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它??;QU稱為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它大;IQR稱為四分位數(shù)間距,是上四分位數(shù)QU與下四分位數(shù)QL之差,其間包含了全部觀察值的一半。檢測與處理異常值2.

箱線圖分析箱線圖依據(jù)實(shí)際數(shù)據(jù)繪制,真實(shí)、直觀地表現(xiàn)出了數(shù)據(jù)分布的本來面貌,且沒有對(duì)數(shù)據(jù)做任何限制性要求,其判斷異常值的標(biāo)準(zhǔn)以四分位數(shù)和四分位數(shù)間距為基礎(chǔ)。四分位數(shù)給出了數(shù)據(jù)分布的中心、散布和形狀的某種指示,具有一定的魯棒性,即25%的數(shù)據(jù)可以變得任意遠(yuǎn),而不會(huì)很大地?cái)_動(dòng)四分位數(shù),所以異常值通常不能對(duì)這個(gè)標(biāo)準(zhǔn)施加影響。鑒于此,箱線圖識(shí)別異常值的結(jié)果比較客觀,因此在識(shí)別異常值方面具有一定的優(yōu)越性。檢測與處理異常值importmatplotlib.pyplotaspltplt.figure(figsize=(10,8),dpi=1080)p=plt.boxplot(list(all_info['年齡'].values))#畫出箱線圖outlier1=p['fliers'][0].get_ydata()#fliers為異常值的標(biāo)簽plt.savefig('../tmp/用戶年齡異常數(shù)據(jù)識(shí)別.jpg')plt.show()print('年齡數(shù)據(jù)異常值個(gè)數(shù)為:',len(outlier1))print('年齡數(shù)據(jù)異常值的最大值為:',max(outlier1))print('年齡數(shù)據(jù)異常值的最小值為:',min(outlier1))示例1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標(biāo)準(zhǔn)化數(shù)據(jù)3轉(zhuǎn)換數(shù)據(jù)4離差標(biāo)準(zhǔn)化是對(duì)原始數(shù)據(jù)的一種線性變換,結(jié)果是將原始數(shù)據(jù)的數(shù)值映射到[0,1]區(qū)間,轉(zhuǎn)換公式如下。其中,max為樣本數(shù)據(jù)的最大值,min為樣本數(shù)據(jù)的最小值,max-min為極差。離差標(biāo)準(zhǔn)化保留了原始數(shù)據(jù)值之間的聯(lián)系,是消除量綱和數(shù)據(jù)取值范圍影響較為簡單的方法。離差標(biāo)準(zhǔn)化前后的數(shù)據(jù)的整體分布情況并未發(fā)生改變,原先取值較大的數(shù)據(jù),在做完離差標(biāo)準(zhǔn)化后的值依舊較大。離差標(biāo)準(zhǔn)化的缺點(diǎn):若數(shù)值集中某個(gè)數(shù)值很大,則規(guī)范化后各其余值會(huì)接近于0,并且將會(huì)相差不大。離差標(biāo)準(zhǔn)化數(shù)據(jù)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化也叫零均值標(biāo)準(zhǔn)化或分?jǐn)?shù)標(biāo)準(zhǔn)化,是當(dāng)前使用較為廣泛的數(shù)據(jù)標(biāo)準(zhǔn)化方法,經(jīng)過該方法處理的數(shù)據(jù)均值為0,標(biāo)準(zhǔn)差為1,轉(zhuǎn)化公式如下式。其中,為原始數(shù)據(jù)的均值,

為原始數(shù)據(jù)的標(biāo)準(zhǔn)差。標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化后的值區(qū)間不局限于[0,1],并且存在負(fù)值。同時(shí)也不難發(fā)現(xiàn),標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化和離差標(biāo)準(zhǔn)化一樣不會(huì)改變數(shù)據(jù)的分布情況。標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化數(shù)據(jù)通過移動(dòng)數(shù)據(jù)的小數(shù)位數(shù),將數(shù)據(jù)映射到區(qū)間[-1,1],移動(dòng)的小數(shù)位數(shù)取決于數(shù)據(jù)絕對(duì)值的最大值,其轉(zhuǎn)化公式如下式。3種標(biāo)準(zhǔn)化方法各有其優(yōu)勢。離差標(biāo)準(zhǔn)化方法簡單,便于理解,標(biāo)準(zhǔn)化后的數(shù)據(jù)限定在[0,1]區(qū)間內(nèi)。標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化受數(shù)據(jù)分布的影響較小。小數(shù)定標(biāo)標(biāo)準(zhǔn)化方法的適用范圍廣,并且受數(shù)據(jù)分布的影響較小,相比較于前兩種方法,該方法適用程度適中。小數(shù)定標(biāo)標(biāo)準(zhǔn)化數(shù)據(jù)1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標(biāo)準(zhǔn)化數(shù)據(jù)3轉(zhuǎn)換數(shù)據(jù)4在數(shù)據(jù)分析模型中有相當(dāng)一部分的算法模型都要求輸入的特征為數(shù)值型,但在實(shí)際數(shù)據(jù)中,特征的類型不一定只有數(shù)值型,還會(huì)存在相當(dāng)一部分的類別型。類別型特征需要經(jīng)過啞變量處理才可以放入模型之中。啞變量處理的示例如下圖。啞變量處理類別型數(shù)據(jù)在Python中可以利用pandas庫中的get_dummies函數(shù)對(duì)類別型特征進(jìn)行啞變量處理,get_dummies函數(shù)的基本使用格式如下。get_dummies函數(shù)的常用參數(shù)及其說明如下。啞變量處理類別型數(shù)據(jù)pandas.get_dummies(data,prefix=None,prefix_sep='_',dummy_na=False,columns=None,sparse=False,drop_first=False,dtype=None)參數(shù)名稱參數(shù)說明data接收array、DataFrame或Series。表示需要啞變量處理的數(shù)據(jù)。無默認(rèn)值prefix接收str、str的列表或str的dict。表示啞變量化后列名的前綴。默認(rèn)為Noneprefix_sep接收str。表示前綴的連接符。默認(rèn)為“_”get_dummies函數(shù)的常用參數(shù)及其說明(續(xù)表)。啞變量處理類別型數(shù)據(jù)參數(shù)名稱參數(shù)說明dummy_na接收bool。表示是否為NaN值添加一列。默認(rèn)為Falsecolumns接收類似list的數(shù)據(jù)。表示DataFrame中需要編碼的列名。默認(rèn)為Nonesparse接收bool。表示虛擬列是否是稀疏的。默認(rèn)為Falsedrop_first接收bool。表示是否通過從k個(gè)分類級(jí)別中刪除第一級(jí)來獲得k

1個(gè)分類級(jí)別。默認(rèn)為False對(duì)于一個(gè)類別型特征,若其取值有m個(gè),則經(jīng)過啞變量處理后將變成了m個(gè)二元特征,并且這些特征互斥,每次只有一個(gè)激活,這使得數(shù)據(jù)變得稀疏。對(duì)類別型特征進(jìn)行啞變量處理主要解決了部分算法模型無法處理類別型數(shù)據(jù)的問題,在一定程度上起到了擴(kuò)充特征的作用。由于數(shù)據(jù)變成了稀疏矩陣的形式,因此也加快了算法模型的運(yùn)算速度。啞變量處理類別型數(shù)據(jù)某些模型算法,特別是分類算法,如ID3決策樹算法和Apriori算法等,要求數(shù)據(jù)是離散的,此時(shí)就需要將連續(xù)型特征數(shù)據(jù)(數(shù)值型)變換成離散型特征數(shù)據(jù)(類別型),即連續(xù)特征離散化。連續(xù)特征的離散化就是在數(shù)據(jù)的取值范圍內(nèi)設(shè)定若干個(gè)離散的劃分點(diǎn),將取值范圍劃分為一些離散化的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間中的數(shù)據(jù)值。因此離散化涉及到兩個(gè)子任務(wù),分別為確定分類數(shù)和如何將連續(xù)型數(shù)據(jù)映射到類別型數(shù)據(jù)上。連續(xù)特征離散化示例如圖。離散化連續(xù)型數(shù)據(jù)等寬法將數(shù)據(jù)的值域分成具有相同寬度的區(qū)間,區(qū)間的個(gè)數(shù)由數(shù)據(jù)本身的特點(diǎn)決定或由用戶指定,與制作頻率分布表類似。pandas提供了cut函數(shù),可以進(jìn)行連續(xù)型數(shù)據(jù)的等寬離散化,其基礎(chǔ)語法如下。cut函數(shù)的常用參數(shù)及其說明如下。離散化連續(xù)型數(shù)據(jù)1.等寬法pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False,duplicates='raise',ordered=True)參數(shù)名稱參數(shù)說明x接收array或Series。表示需要進(jìn)行離散化處理的數(shù)據(jù)。無默認(rèn)值bins接收int、list、array或tuple。若參數(shù)值為int,則表示離散化后的類別數(shù)目;若參數(shù)值為序列類型的數(shù)據(jù),則表示進(jìn)行切分的區(qū)間,每兩個(gè)數(shù)的間隔為一個(gè)區(qū)間。無默認(rèn)值cut函數(shù)的常用參數(shù)及其說明(續(xù)表)。使用等寬法離散化的缺陷:等寬法離散化對(duì)數(shù)據(jù)分布具有較高要求,如果數(shù)據(jù)分布不均勻,那么各個(gè)類的數(shù)目也會(huì)變得非常不均勻,有些區(qū)間包含許多數(shù)據(jù),而另外一些區(qū)間的數(shù)據(jù)極少,這會(huì)嚴(yán)重?fù)p壞所建立的模型。離散化連續(xù)型數(shù)據(jù)參數(shù)名稱參數(shù)說明right接收bool。表示右側(cè)是否為閉區(qū)間。默認(rèn)為Truelabels接收list、array。表示離散化后各個(gè)類別的名稱。默認(rèn)為Noneretbins接收bool。表示是否返回區(qū)間標(biāo)簽。默認(rèn)為Falseprecision接收int。表示顯示標(biāo)簽的精度。默認(rèn)為3duplicates接收指定str。表示是否允許重復(fù)區(qū)間,可選raise和drop,raise表示不允許,drop表示允許。默認(rèn)為raisec

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論