數(shù)據(jù)預(yù)處理是數(shù)據(jù)分析和機(jī)器學(xué)習(xí)項(xiàng)目中的關(guān)鍵步驟,它直接影響到后續(xù)分析和模型的準(zhǔn)確性。
指數(shù)據(jù)分析之前,對數(shù)據(jù)進(jìn)行加工處理,使數(shù)據(jù)在后續(xù)的分析方法中更加的準(zhǔn)確、有效。
主要有:數(shù)據(jù)合井、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換。
數(shù)據(jù)合并:將兩個(gè)表格中的數(shù)據(jù)通過一定的邏輯合并到一起。
數(shù)據(jù)清洗:去除重復(fù)值、處理缺失值、處理異常值。
數(shù)據(jù)轉(zhuǎn)換:對數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,以便于后續(xù)的分析。
1. 合并兩個(gè)DataFrame
假設(shè)我們有兩個(gè)DataFrame,一個(gè)包含用戶信息,另一個(gè)包含用戶購買記錄。
import pandas as pd
# 用戶信息
users = pd.DataFrame({
? ? 'user_id': [1, 2, 3],
? ? 'name': ['Alice', 'Bob', 'Charlie']
})
# 用戶購買記錄
purchases = pd.DataFrame({
? ? 'user_id': [1, 2, 3],
? ? 'item': ['book', 'pen', 'notebook']
})
# 使用merge函數(shù)合并數(shù)據(jù)
merged_df = pd.merge(users, purchases, on='user_id')
print(merged_df)
圖例子,要在“電影評分”表中匹配“電影票房”表中的票房數(shù)據(jù)作為新的一列數(shù)據(jù)插入,我們可以通過excel中的vlookup函數(shù)實(shí)現(xiàn)。
匹配前:?
匹配后:
?
如果需要合并多個(gè)DataFrame,可以使用`reduce`函數(shù)結(jié)合`merge`。
from functools import reduce
# 假設(shè)還有第三個(gè)DataFrame
additional_purchases = pd.DataFrame({
? ? 'user_id': [1, 2, 4],
? ? 'item': ['pen', 'notebook', 'pencil']
})
# 使用reduce合并所有DataFrame
all_merged_df = reduce(lambda left, right: pd.merge(left, right, on='user_id'), [users, purchases, additional_purchases])
print(all_merged_df)
數(shù)據(jù)清洗是去除數(shù)據(jù)中的噪聲和不一致性的過程。這包括處理缺失值、異常值、重復(fù)數(shù)據(jù)等。
?# 假設(shè)在merged_df中有缺失值
merged_df['item'].fillna('Unknown', inplace=True)
print(merged_df)
# 假設(shè)item列中有一個(gè)異常值
merged_df['item'] = merged_df['item'].replace('pencil', 'pen') ?# 將異常值替換為正常值
? # 刪除重復(fù)數(shù)據(jù)
merged_df.drop_duplicates(inplace=True)
print(merged_df)
?用圖例子的話是這樣
比如,我們在用“八爪魚”爬取網(wǎng)頁數(shù)據(jù)時(shí),由于網(wǎng)速原因有時(shí)重復(fù)爬取到同一條數(shù)據(jù):
?可以在excel中通過:選中所有數(shù)據(jù)——“數(shù)據(jù)”——“刪除重復(fù)值”對重復(fù)數(shù)據(jù)進(jìn)行刪除。
數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)轉(zhuǎn)換成適合分析的格式。這包括數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)標(biāo)準(zhǔn)化、數(shù)據(jù)編碼等。?
1. 數(shù)據(jù)類型轉(zhuǎn)換?
# 將user_id轉(zhuǎn)換為字符串類型
merged_df['user_id'] = merged_df['user_id'].astype(str)
print(merged_df.dtypes)
2. 數(shù)據(jù)標(biāo)準(zhǔn)化
# 假設(shè)需要對item列進(jìn)行標(biāo)準(zhǔn)化處理
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
merged_df['item'] = label_encoder.fit_transform(merged_df['item'])
print(merged_df['item'])
3. 數(shù)據(jù)編碼
# 對name列進(jìn)行獨(dú)熱編碼
encoded_df = pd.get_dummies(merged_df['name'])
print(encoded_df)
數(shù)據(jù)轉(zhuǎn)換用圖例子的話是這樣:
比如將年齡(數(shù)字)轉(zhuǎn)換為各年齡段的標(biāo)識(少/青/中/老年),我們可以通過excel中的IF函數(shù)嵌套實(shí)現(xiàn):
數(shù)據(jù)預(yù)處理是數(shù)據(jù)分析和機(jī)器學(xué)習(xí)項(xiàng)目中的重要環(huán)節(jié),它確保了數(shù)據(jù)的質(zhì)量和準(zhǔn)確性。通過使用`pandas`庫,我們可以輕松地進(jìn)行數(shù)據(jù)合并、清洗和轉(zhuǎn)換。本文通過具體的代碼示例,展示了如何在Python中實(shí)現(xiàn)這些步驟。掌握這些技能,將有助于你更有效地進(jìn)行數(shù)據(jù)分析和模型構(gòu)建。
在實(shí)際應(yīng)用中,數(shù)據(jù)預(yù)處理可能更加復(fù)雜,需要根據(jù)具體的數(shù)據(jù)集和業(yè)務(wù)需求進(jìn)行調(diào)整。但本文提供的基礎(chǔ)框架和方法,可以作為開始的起點(diǎn)。希望本文能夠幫助你更好地理解數(shù)據(jù)預(yù)處理的重要性,并在實(shí)踐中應(yīng)用這些知識。
因篇幅問題不能全部顯示,請點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2
違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)