3σ 原則 | (u-3*σ ,u+3*σ ) |
離差標(biāo)準(zhǔn)化 | (x-min)/(max-min) |
標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化 | (x-u)/σ |
小數(shù)定標(biāo)標(biāo)準(zhǔn)化 |
x/10**k k=np.ceil(log10(max(|x|))) |
u 均值
σ 標(biāo)準(zhǔn)差
正太分布的數(shù)據(jù)基本都分布在(u-3σ,u+3σ)范圍內(nèi)
其他的數(shù)據(jù)
import pandas as pd import numpy as np def three_sigma(se): """ 自實(shí)現(xiàn)3σ原則,進(jìn)行數(shù)據(jù)過(guò)濾 :param se:傳進(jìn)來(lái)的series結(jié)構(gòu)數(shù)據(jù) :return:去除異常值之后的series數(shù)據(jù) """ bool_id=((se.mean()-3*se.std())se) (se(se.mean()+3*se.std())) print(bool_id) return se[bool_id] #加載數(shù)據(jù) detail=pd.read_excel('./meal_order_detail.xlsx') #進(jìn)行異常值處理 res=three_sigma(detail['amounts']) print(detail.shape) print(res.shape)
(x-min)/(max-min)
import pandas as pd import numpy as np def minmax_sca(data): """ 離差標(biāo)準(zhǔn)化 param data:傳入的數(shù)據(jù) return:標(biāo)準(zhǔn)化之后的數(shù)據(jù) """ new_data=(data-data.min())/(data.max()-data.min()) return new_data #加載數(shù)據(jù) detail=pd.read_excel('./meal_order_detail.xlsx') res=minmax_sca(detail[['amounts','counts']]) print(res) data=res bool_id=data.loc[:,'count']==1 print(data.loc[bool_id],'counts')
(x-u)/σ
異常值對(duì)標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化的影響不大
轉(zhuǎn)化之后的數(shù)據(jù)--->均值0 標(biāo)準(zhǔn)差1
import pandas as pd import numpy as np def stand_sca(data): """ 標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化 :param data:傳入的數(shù)據(jù) :return:標(biāo)準(zhǔn)化之后的數(shù)據(jù) """ new_data=(data-data.mean())/data.std() return new_data #加載數(shù)據(jù) detail=pd.read_excel('./meal_order_detail.xlsx') res=stand_sca(detail[['amounts','counts']]) print(res) print('res的均值:',res.mean()) print('res的標(biāo)準(zhǔn)差:',res.std())
x/(10^k) k=math.ceil(log10(max(|x|)))
以10為底,x的絕對(duì)值的最大值的對(duì)數(shù) 最后進(jìn)行向上取整
import pandas as pd import numpy as np def deci_sca(data): """ 自實(shí)現(xiàn)小數(shù)定標(biāo)標(biāo)準(zhǔn)化 :param data: 傳入的數(shù)據(jù) :return: 標(biāo)準(zhǔn)化之后的數(shù)據(jù) """ new_data=data/(10**(np.ceil(np.log10(data.abs().max())))) return new_data #加載數(shù)據(jù) detail = pd.read_excel('./meal_order_detail.xlsx') res = deci_sca(detail[['amounts', 'counts']]) print(res)
補(bǔ)充:pandas數(shù)據(jù)處理基礎(chǔ)之標(biāo)準(zhǔn)化與標(biāo)簽數(shù)值化
fit(): Method calculates the parameters μ and σ and saves them as internal objects.
解釋:簡(jiǎn)單來(lái)說(shuō),就是求得訓(xùn)練集X的均值,方差,最大值,最小值,這些訓(xùn)練集X固有的屬性。
transform(): Method using these calculated parameters apply the transformation to a particular dataset.
解釋:在fit的基礎(chǔ)上,進(jìn)行標(biāo)準(zhǔn)化,降維,歸一化等操作(看具體用的是哪個(gè)工具,如PCA,StandardScaler等)。
fit_transform(): joins the fit() and transform() method for transformation of dataset.
解釋:fit_transform是fit和transform的組合,既包括了訓(xùn)練又包含了轉(zhuǎn)換。 transform()和fit_transform()二者的功能都是對(duì)數(shù)據(jù)進(jìn)行某種統(tǒng)一處理(比如標(biāo)準(zhǔn)化~N(0,1),將數(shù)據(jù)縮放(映射)到某個(gè)固定區(qū)間,歸一化,正則化等)
fit_transform(trainData)對(duì)部分?jǐn)?shù)據(jù)先擬合fit,找到該part的整體指標(biāo),如均值、方差、最大值最小值等等(根據(jù)具體轉(zhuǎn)換的目的),然后對(duì)該trainData進(jìn)行轉(zhuǎn)換transform,從而實(shí)現(xiàn)數(shù)據(jù)的標(biāo)準(zhǔn)化、歸一化等等。
必須先用fit_transform(trainData),之后再transform(testData)
如果直接transform(testData),程序會(huì)報(bào)錯(cuò)
如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),雖然也能歸一化,但是兩個(gè)結(jié)果不是在同一個(gè)“標(biāo)準(zhǔn)”下的,具有明顯差異。(一定要避免這種情況)
注意:StandardScaler().fit_transform(x,fit_params),fit_params決定標(biāo)準(zhǔn)化的標(biāo)簽數(shù)據(jù),就是每個(gè)標(biāo)準(zhǔn)化的標(biāo)桿數(shù)據(jù),此參數(shù)不同,則每次標(biāo)準(zhǔn)化的過(guò)程則不同。
from sklearn import preprocessing # 獲取數(shù)據(jù) cols = ['OverallQual','GrLivArea', 'GarageCars','TotalBsmtSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt'] ##選取列 x = data_train[cols].values y = data_train['SalePrice'].values x_scaled = preprocessing.StandardScaler().fit_transform(x) ##進(jìn)行歸一化 y_scaled = preprocessing.StandardScaler().fit_transform(y.reshape(-1,1))##先將y轉(zhuǎn)換成一列,再進(jìn)行歸一
還有以下形式,和上面的標(biāo)準(zhǔn)化原理一致,都是先f(wàn)it,再transform。
由ss決定標(biāo)準(zhǔn)化進(jìn)程的獨(dú)特性
# 先將數(shù)據(jù)標(biāo)準(zhǔn)化 from sklearn.preprocessing import StandardScaler ss = StandardScaler() ## #用測(cè)試集訓(xùn)練并標(biāo)準(zhǔn)化 ss.fit(missing_age_X_train)##首先f(wàn)it missing_age_X_train = ss.transform(missing_age_X_train) #進(jìn)行transform missing_age_X_test = ss.transform(missing_age_X_test)
1.當(dāng)某列數(shù)據(jù)不是數(shù)值型數(shù)據(jù)時(shí),將難以標(biāo)準(zhǔn)化,此時(shí)要將數(shù)據(jù)轉(zhuǎn)化成數(shù)據(jù)型形式。
數(shù)據(jù)處理前數(shù)據(jù)顯示:
經(jīng)過(guò)標(biāo)簽化數(shù)據(jù)處理
from sklearn import preprocessing f_names = ['CentralAir', 'Neighborhood'] ##需要處理的數(shù)據(jù)標(biāo)簽 for x in f_names: label = preprocessing.LabelEncoder() data_train[x] = label.fit_transform(data_train[x]) ##數(shù)據(jù)標(biāo)準(zhǔn)化
處理之后變成:
2.當(dāng)某列有對(duì)應(yīng)的標(biāo)簽值時(shí),即某個(gè)量對(duì)應(yīng)相應(yīng)確定的標(biāo)簽時(shí),例如oldtown就對(duì)應(yīng)1,sawyer就對(duì)應(yīng)2,分類的str轉(zhuǎn)換為序列類這時(shí)使用如下:
數(shù)據(jù)處理之前
利用轉(zhuǎn)換:
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}#將標(biāo)簽對(duì)應(yīng)數(shù)值 train_df['Title'] = train_df['Title'].map(title_mapping)#處理數(shù)據(jù) train_df['Title'] = train_df['Title'].fillna(0)##將其余標(biāo)簽填充為0值
處理過(guò)后:
3.多個(gè)數(shù)據(jù)標(biāo)簽需要分列采用one_hot形式時(shí),處理之前
處理之后
train_test.loc[train_test["Age"].isnull() ,"age_nan"] = 1 ##將標(biāo)簽轉(zhuǎn)換成1 train_test.loc[train_test["Age"].notnull() ,"age_nan"] = 0##將此標(biāo)簽成為0 train_test = pd.get_dummies(train_test,columns=['age_nan']) ##columns決定哪幾行分列處理,prefix參數(shù)是每列前綴
one_hot 形式轉(zhuǎn)變成功。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
標(biāo)簽:惠州 鷹潭 上海 常德 黑龍江 四川 益陽(yáng) 黔西
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用pandas模塊實(shí)現(xiàn)數(shù)據(jù)的標(biāo)準(zhǔn)化操作》,本文關(guān)鍵詞 使用,pandas,模塊,實(shí)現(xiàn),數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。