
作者:俊欣
來源:關(guān)于數(shù)據(jù)分析與可視化
今天來分享一個高效率的數(shù)據(jù)清洗的方法,畢竟我們平常在工作和生活當(dāng)中經(jīng)常會遇到需要去處理雜七雜八的數(shù)據(jù)集,有一些數(shù)據(jù)集中有缺失值、有些數(shù)據(jù)集中有極值、重復(fù)值等等。這次用到的數(shù)據(jù)集樣本在文末有獲取的辦法。
我們首先導(dǎo)入所需要用到的庫,并且讀取數(shù)據(jù)
import pandas as pd import numpy as np
df = pd.read_csv("DirectMarketing.csv")
我們先來大致地看一下數(shù)據(jù)集中各個特征值的情況,通過info()這個方法
df.info()
我們看到上面的“History”這一列,只有697條數(shù)據(jù)不是空值,那就意味著還有另外3條數(shù)據(jù)是空值,與之對應(yīng)的方式有將含有缺失值的數(shù)據(jù)刪掉,或者將缺失值的部分替換為是中位數(shù)或者是平均數(shù),
# 將缺失值給移除掉 df.dropna(axis = 0, inplace = True)
要是數(shù)據(jù)集中存在大量的缺失值,只是簡簡單單地移除掉怕是會影響到數(shù)據(jù)的完整性,如果是數(shù)值類型的特征值,就用用平均值或者是中位數(shù)來替換,如果是離散類型的缺失值,就用眾數(shù)來替換
def fill_missing_values_num(df, col_name): val = df[col_name].median()
df[col_name].fillna(val, inplace = True) return df
def fill_missing_values_cate(df, col_name): val = df[col_name].value_counts().index.tolist()[0]
df[col_name].fillna(val, inplace = True) return df
而可能存在重復(fù)值的部分,pandas當(dāng)中有drop_ducplicates()方法來進(jìn)行處理
df.drop_duplicates(inplace = True)
最后我們封裝成一個函數(shù),對于缺失值的處理小編這里選擇用中位數(shù)填充的方式來處理
def fill_missing_values_and_drop_duplicates(df, col_name): val = df[col_name].value_counts().index.tolist()[0]
df[col_name].fillna(val, inplace = True) return df.drop_duplicates()
經(jīng)常使用pandas的人可能都有這種體驗,它經(jīng)常會將數(shù)據(jù)集中的變量類型直接變成object,這里我們可以直接使用“convert_dtypes”來進(jìn)行批量的轉(zhuǎn)換,它會自動推斷數(shù)據(jù)原來的類型,并實現(xiàn)轉(zhuǎn)換,并且打印出來里面各列的數(shù)據(jù)類型,封裝成一個函數(shù)
def convert_dtypes(df): print(df.dtypes) return df.convert_dtypes()
對于極值的檢測有多種方式,例如我們可以通過箱型圖的方式來查看
sample = [11, 500, 20, 24, 400, 25, 10, 21, 13, 8, 15, 10] plt.boxplot(sample, vert=False) plt.title("箱型圖來檢測異常值",fontproperties="SimHei") plt.xlabel('樣本數(shù)據(jù)',fontproperties="SimHei")
我們可以通過箱型圖來明顯的看出當(dāng)中有兩個異常值,也就是400和500這兩個,箱型圖由最大值、上四分位數(shù)(Q3)、中位數(shù)(Q2)、下四分位數(shù)和最小值五個統(tǒng)計量組成,其中Q1和Q3之間的間距稱為是四分位間距(interquartile range,IQR),而通常若是樣本中的數(shù)據(jù)大于Q3+1.5IQR和小于Q1-1.5IQR定義為異常值
當(dāng)然了除此之外,還可以通過z-score的方法來檢測,Z-score是以標(biāo)準(zhǔn)差為單位去度量某個數(shù)據(jù)偏離平均數(shù)的距離,計算公式為
我們用python來實現(xiàn)一下當(dāng)中的步驟
outliers = [] def detect_outliers_zscore(data, threshold): mean = np.mean(data) std = np.std(data) for i in data: z_score = (i-mean)/std if (np.abs(z_score) > threshold): outliers.append(i) return outliers# Driver code
而對待異常值的方式,首先最直接的就是將異常值給去掉,我們檢測到異常值所在的行數(shù),然后刪掉該行,當(dāng)然當(dāng)數(shù)據(jù)集當(dāng)中的異常值數(shù)量很多的時候,移除掉必然會影響數(shù)據(jù)集的完整性,從而影響建模最后的效果
def remove_outliers1(df, col_name): low = np.quantile(df[col_name], 0.05)
high = np.quantile(df[col_name], 0.95) return df[df[col_name].between(low, high, inclusive=True)]
其次我們可以將異常值替換成其他的值,例如上面箱型圖提到的上四分位數(shù)或者是下四分位數(shù)
def remove_outliers2(df, col_name): low_num = np.quantile(df[col_name], 0.05) high_num = np.quantile(df[col_name], 0.95) df.loc[df[col_name] > high_num, col_name] = high_num df.loc[df[col_name] < low_num , col_name] = low_num return df
因此回到上面用到的樣本數(shù)據(jù)集,我們將之前數(shù)據(jù)清洗的函數(shù)統(tǒng)統(tǒng)整合起來,用pipe()的方法來串聯(lián)起來,形成一個數(shù)據(jù)清洗的標(biāo)準(zhǔn)模板
def fill_missing_values_and_drop_duplicates(df, col_name): val = df[col_name].value_counts().index.tolist()[0]
df[col_name].fillna(val, inplace = True) return df.drop_duplicates() def remove_outliers2(df, col_name): low_num = np.quantile(df[col_name], 0.05)
high_num = np.quantile(df[col_name], 0.95)
df.loc[df[col_name] > float(high_num), col_name] = high_num return df def convert_dtypes(df): print(df.dtypes) return df.convert_dtypes()
df_cleaned = (df.pipe(fill_missing_values_and_drop_duplicates, 'History').
pipe(remove_outliers2, 'Salary').
pipe(convert_dtypes))
所以我們之后再數(shù)據(jù)清洗的過程當(dāng)中,可以將這種程序化的清洗步驟封裝成一個個函數(shù),然后用pipe()串聯(lián)起來,用在每一個數(shù)據(jù)分析的項目當(dāng)中,更快地提高我們工作和分析的效率。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10