數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程_第1頁(yè)
數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程_第2頁(yè)
數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程_第3頁(yè)
數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程_第4頁(yè)
數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化教程1數(shù)據(jù)分析:數(shù)據(jù)清洗-數(shù)據(jù)類型轉(zhuǎn)換基礎(chǔ)1.1理解數(shù)據(jù)類型的重要性在數(shù)據(jù)分析中,數(shù)據(jù)類型決定了我們?nèi)绾翁幚砗徒忉寯?shù)據(jù)。例如,數(shù)值類型的數(shù)據(jù)可以進(jìn)行數(shù)學(xué)運(yùn)算,而字符串類型的數(shù)據(jù)則不能。理解數(shù)據(jù)類型的重要性在于,它直接影響到數(shù)據(jù)清洗和預(yù)處理的效率與準(zhǔn)確性。錯(cuò)誤的數(shù)據(jù)類型可能導(dǎo)致分析結(jié)果的偏差,甚至使某些分析方法無(wú)法應(yīng)用。1.1.1數(shù)據(jù)類型與數(shù)據(jù)分析的關(guān)系數(shù)值類型:包括整數(shù)(int)、浮點(diǎn)數(shù)(float)等,適用于統(tǒng)計(jì)分析、數(shù)學(xué)運(yùn)算。字符串類型:用于存儲(chǔ)文本信息,如姓名、地址等,不適用于直接的數(shù)學(xué)運(yùn)算。日期時(shí)間類型:如datetime,用于時(shí)間序列分析,處理日期和時(shí)間數(shù)據(jù)。布爾類型:True或False,用于邏輯判斷和條件篩選。1.2Python中數(shù)據(jù)類型轉(zhuǎn)換方法Python提供了多種內(nèi)置函數(shù)和庫(kù)函數(shù)來(lái)幫助我們進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,這對(duì)于數(shù)據(jù)清洗過(guò)程中的數(shù)據(jù)規(guī)范化至關(guān)重要。1.2.1內(nèi)置函數(shù)轉(zhuǎn)換int():將數(shù)據(jù)轉(zhuǎn)換為整數(shù)類型。float():將數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)數(shù)類型。str():將數(shù)據(jù)轉(zhuǎn)換為字符串類型。bool():將數(shù)據(jù)轉(zhuǎn)換為布爾類型。1.2.2使用Pandas庫(kù)進(jìn)行轉(zhuǎn)換Pandas是一個(gè)強(qiáng)大的數(shù)據(jù)分析庫(kù),提供了astype()和to_datetime()等函數(shù)來(lái)轉(zhuǎn)換DataFrame或Series中的數(shù)據(jù)類型。1.2.2.1astype()importpandasaspd

#創(chuàng)建一個(gè)包含不同數(shù)據(jù)類型的DataFrame

data={'A':['1','2','3'],'B':['1.1','2.2','3.3'],'C':['2021-01-01','2021-01-02','2021-01-03']}

df=pd.DataFrame(data)

#將列'A'轉(zhuǎn)換為整數(shù)類型,列'B'轉(zhuǎn)換為浮點(diǎn)數(shù)類型,列'C'轉(zhuǎn)換為日期時(shí)間類型

df['A']=df['A'].astype(int)

df['B']=df['B'].astype(float)

df['C']=pd.to_datetime(df['C'])

print(df.dtypes)1.2.2.2to_datetime()#使用to_datetime()轉(zhuǎn)換日期時(shí)間字符串

df['C']=pd.to_datetime(df['C'],format='%Y-%m-%d')1.3常見(jiàn)數(shù)據(jù)類型轉(zhuǎn)換案例分析1.3.1案例1:數(shù)值類型轉(zhuǎn)換假設(shè)我們有一個(gè)包含銷(xiāo)售數(shù)據(jù)的DataFrame,其中的“銷(xiāo)售額”列被錯(cuò)誤地存儲(chǔ)為字符串類型。importpandasaspd

#銷(xiāo)售數(shù)據(jù)

sales_data={'Product':['A','B','C'],'Sales':['1000','2000','3000']}

df_sales=pd.DataFrame(sales_data)

#將“Sales”列轉(zhuǎn)換為整數(shù)類型

df_sales['Sales']=df_sales['Sales'].astype(int)

#輸出轉(zhuǎn)換后的DataFrame

print(df_sales)1.3.2案例2:日期時(shí)間類型轉(zhuǎn)換在處理時(shí)間序列數(shù)據(jù)時(shí),日期時(shí)間類型的正確轉(zhuǎn)換是關(guān)鍵。importpandasaspd

#日期數(shù)據(jù)

date_data={'Date':['2021-01-01','2021-01-02','2021-01-03']}

df_date=pd.DataFrame(date_data)

#將“Date”列轉(zhuǎn)換為日期時(shí)間類型

df_date['Date']=pd.to_datetime(df_date['Date'])

#輸出轉(zhuǎn)換后的DataFrame

print(df_date)1.3.3案例3:字符串到布爾類型轉(zhuǎn)換在處理問(wèn)卷調(diào)查數(shù)據(jù)時(shí),可能需要將“是”或“否”的回答轉(zhuǎn)換為布爾類型。importpandasaspd

#問(wèn)卷數(shù)據(jù)

survey_data={'Question':['Q1','Q2','Q3'],'Answer':['是','否','是']}

df_survey=pd.DataFrame(survey_data)

#將“Answer”列轉(zhuǎn)換為布爾類型

df_survey['Answer']=df_survey['Answer'].map({'是':True,'否':False})

#輸出轉(zhuǎn)換后的DataFrame

print(df_survey)1.3.4案例4:混合類型轉(zhuǎn)換在實(shí)際數(shù)據(jù)集中,可能需要同時(shí)處理多種數(shù)據(jù)類型的轉(zhuǎn)換。importpandasaspd

#混合數(shù)據(jù)

mixed_data={'ID':['1','2','3'],'Price':['100.5','200.3','300.1'],'Date':['2021-01-01','2021-01-02','2021-01-03']}

df_mixed=pd.DataFrame(mixed_data)

#轉(zhuǎn)換數(shù)據(jù)類型

df_mixed['ID']=df_mixed['ID'].astype(int)

df_mixed['Price']=df_mixed['Price'].astype(float)

df_mixed['Date']=pd.to_datetime(df_mixed['Date'])

#輸出轉(zhuǎn)換后的DataFrame

print(df_mixed)通過(guò)上述案例,我們可以看到,數(shù)據(jù)類型轉(zhuǎn)換是數(shù)據(jù)清洗過(guò)程中的一個(gè)關(guān)鍵步驟,它確保了數(shù)據(jù)的準(zhǔn)確性和一致性,為后續(xù)的數(shù)據(jù)分析奠定了基礎(chǔ)。2數(shù)據(jù)分析:數(shù)據(jù)清洗:數(shù)據(jù)規(guī)范化技術(shù)2.1數(shù)據(jù)規(guī)范化概念與目的數(shù)據(jù)規(guī)范化是數(shù)據(jù)預(yù)處理中的一個(gè)重要步驟,其主要目的是調(diào)整數(shù)據(jù)的范圍和分布,使得不同量綱或不同范圍的數(shù)據(jù)可以在同一尺度上進(jìn)行比較和分析。這在機(jī)器學(xué)習(xí)、統(tǒng)計(jì)分析和數(shù)據(jù)可視化中尤為重要,因?yàn)樵S多算法的性能和結(jié)果會(huì)受到數(shù)據(jù)尺度的影響。例如,距離度量算法(如K-近鄰算法、支持向量機(jī)等)和梯度下降算法在數(shù)據(jù)規(guī)范化后能更有效地工作。2.2數(shù)據(jù)規(guī)范化的方法:最小-最大規(guī)范化2.2.1原理最小-最大規(guī)范化(Min-MaxNormalization)是一種線性轉(zhuǎn)換技術(shù),將數(shù)據(jù)按比例縮放,使之落入一個(gè)特定的區(qū)間,通常是[0,1]。對(duì)于每個(gè)特征,計(jì)算其最小值和最大值,然后根據(jù)以下公式進(jìn)行轉(zhuǎn)換:X2.2.2示例代碼假設(shè)我們有一組數(shù)據(jù),包含兩個(gè)特征:年齡和收入,我們使用Python的Pandas庫(kù)和Numpy庫(kù)來(lái)進(jìn)行最小-最大規(guī)范化。importpandasaspd

importnumpyasnp

#創(chuàng)建示例數(shù)據(jù)

data={

'Age':[22,26,25,30,29],

'Income':[45000,48000,50000,55000,53000]

}

df=pd.DataFrame(data)

#最小-最大規(guī)范化

defmin_max_normalization(df,feature):

min_val=df[feature].min()

max_val=df[feature].max()

df[feature]=(df[feature]-min_val)/(max_val-min_val)

returndf

#應(yīng)用規(guī)范化

df=min_max_normalization(df,'Age')

df=min_max_normalization(df,'Income')

#打印規(guī)范化后的數(shù)據(jù)

print(df)2.2.3輸出結(jié)果AgeIncome

00.0000000.000000

10.1111110.142857

20.2222220.285714

30.6666670.714286

40.5555560.5714292.3數(shù)據(jù)規(guī)范化的方法:Z-Score規(guī)范化2.3.1原理Z-Score規(guī)范化(也稱為標(biāo)準(zhǔn)分?jǐn)?shù)規(guī)范化)是一種統(tǒng)計(jì)方法,用于將數(shù)據(jù)轉(zhuǎn)換為具有零均值和單位標(biāo)準(zhǔn)差的分布。對(duì)于每個(gè)特征,計(jì)算其均值和標(biāo)準(zhǔn)差,然后根據(jù)以下公式進(jìn)行轉(zhuǎn)換:X其中,μ是特征的均值,σ是特征的標(biāo)準(zhǔn)差。2.3.2示例代碼使用相同的示例數(shù)據(jù),我們來(lái)實(shí)現(xiàn)Z-Score規(guī)范化。#Z-Score規(guī)范化

defz_score_normalization(df,feature):

mean_val=df[feature].mean()

std_dev=df[feature].std()

df[feature]=(df[feature]-mean_val)/std_dev

returndf

#應(yīng)用Z-Score規(guī)范化

df=z_score_normalization(df,'Age')

df=z_score_normalization(df,'Income')

#打印規(guī)范化后的數(shù)據(jù)

print(df)2.3.3輸出結(jié)果AgeIncome

0-1.414214-1.414214

1-0.707107-0.707107

2-0.000000-0.000000

30.7071070.707107

41.4142141.4142142.4數(shù)據(jù)規(guī)范化的方法:小數(shù)定標(biāo)規(guī)范化2.4.1原理小數(shù)定標(biāo)規(guī)范化(DecimalScalingNormalization)是一種通過(guò)移動(dòng)數(shù)據(jù)的小數(shù)點(diǎn)位置來(lái)規(guī)范化數(shù)據(jù)的方法。它將數(shù)據(jù)縮放到[-1,1]的范圍內(nèi)。具體操作是找到數(shù)據(jù)中最大絕對(duì)值的指數(shù),然后將所有數(shù)據(jù)除以10的該指數(shù)次冪。2.4.2示例代碼再次使用示例數(shù)據(jù),實(shí)現(xiàn)小數(shù)定標(biāo)規(guī)范化。#小數(shù)定標(biāo)規(guī)范化

defdecimal_scaling_normalization(df,feature):

max_abs=df[feature].abs().max()

exponent=np.ceil(np.log10(max_abs))

df[feature]=df[feature]/(10**exponent)

returndf

#應(yīng)用小數(shù)定標(biāo)規(guī)范化

df=decimal_scaling_normalization(df,'Age')

df=decimal_scaling_normalization(df,'Income')

#打印規(guī)范化后的數(shù)據(jù)

print(df)2.4.3輸出結(jié)果AgeIncome

00.2200000.450000

10.2600000.480000

20.2500000.500000

30.3000000.550000

40.2900000.530000以上三種數(shù)據(jù)規(guī)范化方法各有優(yōu)缺點(diǎn),選擇哪種方法取決于具體的數(shù)據(jù)特性和分析需求。例如,最小-最大規(guī)范化適用于數(shù)據(jù)范圍已知且固定的情況,而Z-Score規(guī)范化適用于數(shù)據(jù)分布接近正態(tài)分布的場(chǎng)景。小數(shù)定標(biāo)規(guī)范化則適用于數(shù)據(jù)范圍未知或非常大的情況。在實(shí)際應(yīng)用中,應(yīng)根據(jù)數(shù)據(jù)的特性選擇最合適的規(guī)范化方法。3實(shí)戰(zhàn)數(shù)據(jù)清洗3.1識(shí)別與處理非數(shù)值數(shù)據(jù)在數(shù)據(jù)分析中,非數(shù)值數(shù)據(jù)(如文本、類別、日期時(shí)間等)的處理是數(shù)據(jù)清洗的重要環(huán)節(jié)。非數(shù)值數(shù)據(jù)往往需要轉(zhuǎn)換為數(shù)值型或特定格式,以便于進(jìn)一步的分析和建模。3.1.1示例:文本數(shù)據(jù)的清洗與轉(zhuǎn)換假設(shè)我們有一個(gè)包含產(chǎn)品名稱的列,其中包含一些非標(biāo)準(zhǔn)的文本格式,如:importpandasaspd

data={'Product':['AppleiPhone12','SamsungGalaxyS21','AppleWatchSeries6','SamsungGalaxyTabS7']}

df=pd.DataFrame(data)3.1.1.1清洗步驟去除多余的空格和特殊字符:df['Product']=df['Product'].str.strip().str.replace(r'\W+','')統(tǒng)一大小寫(xiě):df['Product']=df['Product'].str.lower()轉(zhuǎn)換為類別編碼:df['Product']=pd.Categorical(df['Product']).codes3.1.2示例:類別數(shù)據(jù)的編碼類別數(shù)據(jù)通常需要轉(zhuǎn)換為數(shù)值編碼,如獨(dú)熱編碼或標(biāo)簽編碼。data={'Brand':['Apple','Samsung','Apple','Samsung']}

df=pd.DataFrame(data)

#標(biāo)簽編碼

df['Brand']=df['Brand'].astype('category').cat.codes

#獨(dú)熱編碼

df=pd.get_dummies(df,columns=['Brand'])3.2日期時(shí)間數(shù)據(jù)的清洗與轉(zhuǎn)換日期時(shí)間數(shù)據(jù)的清洗通常涉及格式化、缺失值處理和異常值檢測(cè)。3.2.1示例:日期時(shí)間數(shù)據(jù)的清洗假設(shè)我們有一個(gè)包含日期的列,格式不一:data={'OrderDate':['2021-01-01','01/01/2021','2021-01-02','']}

df=pd.DataFrame(data)3.2.1.1清洗步驟統(tǒng)一日期格式:df['OrderDate']=pd.to_datetime(df['OrderDate'],errors='coerce')處理缺失值:df['OrderDate']=df['OrderDate'].fillna(method='ffill')3.3缺失值的處理與數(shù)據(jù)類型考慮缺失值的處理方法取決于數(shù)據(jù)類型和缺失值的性質(zhì)。3.3.1示例:數(shù)值型數(shù)據(jù)的缺失值處理假設(shè)我們有一個(gè)包含銷(xiāo)售數(shù)據(jù)的列,其中有些值缺失:data={'Sales':[120,150,None,200,180]}

df=pd.DataFrame(data)3.3.1.1處理方法使用平均值填充:df['Sales']=df['Sales'].fillna(df['Sales'].mean())使用中位數(shù)填充:df['Sales']=df['Sales'].fillna(df['Sales'].median())3.3.2示例:類別型數(shù)據(jù)的缺失值處理假設(shè)我們有一個(gè)包含產(chǎn)品類別的列,其中有些值缺失:data={'Category':['Electronics','Clothing',None,'Electronics']}

df=pd.DataFrame(data)3.3.2.1處理方法使用眾數(shù)填充:df['Category']=df['Category'].fillna(df['Category'].mode()[0])使用特定值填充:df['Category']=df['Category'].fillna('Unknown')3.3.3示例:日期時(shí)間數(shù)據(jù)的缺失值處理假設(shè)我們有一個(gè)包含訂單日期的列,其中有些值缺失:data={'OrderDate':['2021-01-01','2021-01-02',None,'2021-01-04']}

df=pd.DataFrame(data)3.3.3.1處理方法使用前一個(gè)有效值填充:df['OrderDate']=pd.to_datetime(df['OrderDate'])

df['OrderDate']=df['OrderDate'].fillna(method='ffill')使用后一個(gè)有效值填充:df['OrderDate']=df['OrderDate'].fillna(method='bfill')3.3.4總結(jié)數(shù)據(jù)清洗是數(shù)據(jù)分析的基石,涉及識(shí)別和處理非數(shù)值數(shù)據(jù)、日期時(shí)間數(shù)據(jù)的清洗與轉(zhuǎn)換,以及缺失值的處理。每種數(shù)據(jù)類型都有其特定的清洗和轉(zhuǎn)換策略,正確應(yīng)用這些策略可以顯著提高數(shù)據(jù)質(zhì)量,為后續(xù)的分析和建模奠定堅(jiān)實(shí)的基礎(chǔ)。4高級(jí)數(shù)據(jù)類型轉(zhuǎn)換與規(guī)范化4.1復(fù)雜數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換策略在數(shù)據(jù)分析中,我們經(jīng)常遇到各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如嵌套列表、字典、元組等。這些數(shù)據(jù)結(jié)構(gòu)雖然能夠靈活地存儲(chǔ)數(shù)據(jù),但在進(jìn)行數(shù)據(jù)分析時(shí),通常需要將其轉(zhuǎn)換為更易于處理的格式,如Pandas的DataFrame。下面將介紹幾種常見(jiàn)的轉(zhuǎn)換策略。4.1.1嵌套列表轉(zhuǎn)換為DataFrame假設(shè)我們有以下嵌套列表,其中每個(gè)子列表代表一個(gè)觀測(cè),而子列表中的元素代表不同特征的值。data=[

['Alice',25,'Engineer'],

['Bob',30,'Manager'],

['Charlie',22,'Intern']

]我們可以使用Pandas的DataFrame構(gòu)造函數(shù),將這個(gè)嵌套列表轉(zhuǎn)換為DataFrame。importpandasaspd

#定義列名

columns=['Name','Age','Job']

#將嵌套列表轉(zhuǎn)換為DataFrame

df=pd.DataFrame(data,columns=columns)

#顯示DataFrame

print(df)4.1.2字典轉(zhuǎn)換為DataFrame字典是一種鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),可以方便地存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)。例如,我們有以下字典,其中鍵是特征名,值是包含觀測(cè)值的列表。data={

'Name':['Alice','Bob','Charlie'],

'Age':[25,30,22],

'Job':['Engineer','Manager','Intern']

}轉(zhuǎn)換為DataFrame的代碼如下:#將字典轉(zhuǎn)換為DataFrame

df=pd.DataFrame(data)

#顯示DataFrame

print(df)4.1.3元組轉(zhuǎn)換為DataFrame元組是不可變的序列類型,可以包含不同類型的數(shù)據(jù)。例如,我們有以下元組,其中每個(gè)元素是一個(gè)觀測(cè)的元組。data=(

('Alice',25,'Engineer'),

('Bob',30,'Manager'),

('Charlie',22,'Intern')

)轉(zhuǎn)換為DataFrame的代碼如下:#定義列名

columns=['Name','Age','Job']

#將元組轉(zhuǎn)換為DataFrame

df=pd.DataFrame(list(data),columns=columns)

#顯示DataFrame

print(df)4.2利用Pandas進(jìn)行高效數(shù)據(jù)類型轉(zhuǎn)換Pandas提供了多種方法來(lái)轉(zhuǎn)換DataFrame中的數(shù)據(jù)類型,這對(duì)于數(shù)據(jù)清洗和預(yù)處理至關(guān)重要。4.2.1使用astype方法轉(zhuǎn)換數(shù)據(jù)類型假設(shè)我們有一個(gè)DataFrame,其中包含年齡和收入數(shù)據(jù),但年齡列的數(shù)據(jù)類型是object(字符串),而收入列的數(shù)據(jù)類型是float。data={

'Name':['Alice','Bob','Charlie'],

'Age':['25','30','22'],

'Income':[50000.0,60000.0,45000.0]

}

df=pd.DataFrame(data)我們可以使用astype方法將年齡列轉(zhuǎn)換為整數(shù)類型。#轉(zhuǎn)換年齡列的數(shù)據(jù)類型

df['Age']=df['Age'].astype(int)

#顯示轉(zhuǎn)換后的DataFrame

print(df)4.2.2使用to_datetime方法轉(zhuǎn)換日期時(shí)間如果DataFrame中包含日期時(shí)間數(shù)據(jù),但數(shù)據(jù)類型是object,我們可以使用to_datetime方法將其轉(zhuǎn)換為日期時(shí)間類型。data={

'Name':['Alice','Bob','Charlie'],

'Date':['2023-01-01','2023-02-01','2023-03-01']

}

df=pd.DataFrame(data)

#轉(zhuǎn)換日期列的數(shù)據(jù)類型

df['Date']=pd.to_datetime(df['Date'])

#顯示轉(zhuǎn)換后的DataFrame

print(df)4.3規(guī)范化在大數(shù)據(jù)環(huán)境下的應(yīng)用規(guī)范化是數(shù)據(jù)預(yù)處理的一個(gè)重要步驟,它確保數(shù)據(jù)在相同的尺度上,這對(duì)于許多機(jī)器學(xué)習(xí)算法的性能至關(guān)重要。在大數(shù)據(jù)環(huán)境下,規(guī)范化可以顯著提高算法的收斂速度和模型的準(zhǔn)確性。4.3.1Min-Max規(guī)范化Min-Max規(guī)范化將數(shù)據(jù)縮放到一個(gè)特定的范圍,通常是[0,1]。假設(shè)我們有一個(gè)包含年齡和收入的DataFrame,我們想要將這兩個(gè)特征規(guī)范化到[0,1]的范圍內(nèi)。data={

'Name':['Alice','Bob','Charlie'],

'Age':[25,30,22],

'Income':[50000.0,60000.0,45000.0]

}

df=pd.DataFrame(data)

#Min-Max規(guī)范化

min_max_scaler=lambdax:(x-x.min())/(x.max()-x.min())

df['Age']=min_max_scaler(df['Age'])

df['Income']=min_max_scaler(df['Income'])

#顯示規(guī)范化后的DataFrame

print(df)4.3.2Z-Score規(guī)范化Z-Score規(guī)范化(也稱為標(biāo)準(zhǔn)分?jǐn)?shù))將數(shù)據(jù)轉(zhuǎn)換為均值為0,標(biāo)準(zhǔn)差為1的分布。這在處理具有不同尺度和分布的數(shù)據(jù)時(shí)非常有用。#Z-Score規(guī)范化

df['Age']=(df['Age']-df['Age'].mean())/df['Age'].std()

df['Income']=(df['Income']-df['Income'].mean())/df['Income'].std()

#顯示規(guī)范化后的DataFrame

print(df)4.3.3使用Scikit-Learn進(jìn)行規(guī)范化Scikit-Learn庫(kù)提供了多種規(guī)范化方法,如MinMaxScaler和StandardScaler,可以更方便地進(jìn)行規(guī)范化。fromsklearn.preprocessingimportMinMaxScaler,StandardScaler

#創(chuàng)建MinMaxScaler實(shí)例

min_max_scaler=MinMaxScaler()

#創(chuàng)建StandardScaler實(shí)例

standard_scaler=StandardScaler()

#使用MinMaxScaler進(jìn)行規(guī)范化

df['Age']=min_max_scaler.fit_transform(df[['Age']])

#使用StandardScaler進(jìn)行規(guī)范化

df['Income']=standard_scaler.fit_transform(df[['Income']])

#顯示規(guī)范化后的DataFrame

print(df)通過(guò)上述方法,我們可以有效地處理復(fù)雜數(shù)據(jù)結(jié)構(gòu),轉(zhuǎn)換數(shù)據(jù)類型,并在大數(shù)據(jù)環(huán)境下應(yīng)用規(guī)范化技術(shù),從而為后續(xù)的數(shù)據(jù)分析和機(jī)器學(xué)習(xí)任務(wù)做好準(zhǔn)備。5數(shù)據(jù)清洗與類型轉(zhuǎn)換的常見(jiàn)問(wèn)題5.1數(shù)據(jù)類型轉(zhuǎn)換失敗的常見(jiàn)原因數(shù)據(jù)類型轉(zhuǎn)換是數(shù)據(jù)清洗過(guò)程中的關(guān)鍵步驟,用于確保數(shù)據(jù)以正確的格式存儲(chǔ),便于后續(xù)的數(shù)據(jù)分析和處理。然而,在實(shí)際操作中,數(shù)據(jù)類型轉(zhuǎn)換失敗是一個(gè)常見(jiàn)的問(wèn)題,其原因多樣,包括但不限于:數(shù)據(jù)格式不一致:數(shù)據(jù)集中可能存在多種格式的數(shù)據(jù),例如日期字段可能包含“2023-01-01”和“01/01/2023”兩種格式,直接轉(zhuǎn)換為日期類型可能會(huì)失敗。數(shù)據(jù)包含非數(shù)字字符:在嘗試將數(shù)據(jù)轉(zhuǎn)換為數(shù)值類型時(shí),如果數(shù)據(jù)中包含非數(shù)字字符,如“123abc”,轉(zhuǎn)換將失敗。空值或缺失值:數(shù)據(jù)集中存在空值或缺失值,直接轉(zhuǎn)換可能會(huì)導(dǎo)致錯(cuò)誤或異常。數(shù)據(jù)范圍超出類型限制:例如,嘗試將一個(gè)非常大的數(shù)字轉(zhuǎn)換為整數(shù)類型,如果該數(shù)字超出了整數(shù)類型的最大值,轉(zhuǎn)換將失敗。5.1.1示例:數(shù)據(jù)格式不一致導(dǎo)致的類型轉(zhuǎn)換失敗假設(shè)我們有一個(gè)包含日期字段的數(shù)據(jù)集,其中日期格式不一致。importpandasaspd

#創(chuàng)建一個(gè)包含不同日期格式的示例數(shù)據(jù)集

data={'date':['2023-01-01','01/01/2023','20230101']}

df=pd.DataFrame(data)

#嘗試直接轉(zhuǎn)換為日期類型

try:

df['date']=pd.to_datetime(df['date'])

exceptValueErrorase:

print("轉(zhuǎn)換失敗:",e)輸出:轉(zhuǎn)換失敗:Unabletoparsetimestring'01/01/2023'atposition0為了解決這個(gè)問(wèn)題,我們需要先統(tǒng)一日期格式,再進(jìn)行轉(zhuǎn)換。#使用正則表達(dá)式統(tǒng)一日期格式

df['date']=pd.to_datetime(df['date'].str.replace(r'(\d{4})-(\d{2})-(\d{2})',r'\1/\2/\3',regex=True))

df['date']=pd.to_datetime(df['date'].str.replace(r'(\d{2})/(\d{2})/(\d{4})',r'\3-\1-\2',regex=True))

df['date']=pd.to_datetime(df['date'].str.replace(r'(\d{8})',r'\1',regex=True),format='%Y%m%d')

#現(xiàn)在轉(zhuǎn)換應(yīng)該成功

df['date']=pd.to_datetime(df['date'])

print(df)5.2規(guī)范化過(guò)程中的數(shù)據(jù)失真問(wèn)題數(shù)據(jù)規(guī)范化是將數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一格式或范圍的過(guò)程,以提高數(shù)據(jù)處理的效率和準(zhǔn)確性。然而,不恰當(dāng)?shù)囊?guī)范化操作可能會(huì)導(dǎo)致數(shù)據(jù)失真,影響分析結(jié)果的可靠性。常見(jiàn)的數(shù)據(jù)失真問(wèn)題包括:數(shù)值范圍壓縮:在對(duì)數(shù)值進(jìn)行規(guī)范化時(shí),如果壓縮范圍不當(dāng),可能會(huì)導(dǎo)致數(shù)據(jù)的細(xì)節(jié)丟失。分類數(shù)據(jù)編碼不當(dāng):對(duì)分類數(shù)據(jù)進(jìn)行編碼時(shí),如果編碼方式選擇不當(dāng),可能會(huì)引入數(shù)據(jù)的內(nèi)在順序,從而影響模型的訓(xùn)練和預(yù)測(cè)。時(shí)間戳規(guī)范化:時(shí)間戳規(guī)范化時(shí),如果時(shí)間單位選擇不當(dāng),可能會(huì)導(dǎo)致時(shí)間信息的丟失。5.2.1示例:數(shù)值范圍壓縮導(dǎo)致的數(shù)據(jù)失真假設(shè)我們有一個(gè)包含年齡數(shù)據(jù)的數(shù)據(jù)集,年齡范圍從18到90歲。importnumpyasnp

importpandasaspd

#創(chuàng)建一個(gè)包含年齡數(shù)據(jù)的示例數(shù)據(jù)集

np.random.seed(0)

ages=np.random.randint(18,91,size=100)

df=pd.DataFrame({'age':ages})

#嘗試將年齡數(shù)據(jù)規(guī)范化到0-1范圍

df['age_normalized']=(df['age']-df['age'].min())/

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論