數字化時代,資料可以說是如同企業的血液。然而,不準确、不完整、不一緻的資料卻讓企業的營運處處受阻。很多企業最初的出發點是好的,想要降本增效,結果呢,是降本增笑。企業怎麼能從海量資料中找到準确的資訊而避免耗費大量時間和精力?又怎麼能避免資料混亂而導緻的決策失誤?
答案是——資料清洗。簡單來說,資料清洗就是對資料進行審查和校驗的過程,目的是删除重複資訊、糾正存在的錯誤,并提供資料一緻性。如何有效進行資料清洗,走好數字化轉型的每一步,是企業要思考的重要命題。
先給大家分享一份《資料倉庫建設方案》,包含了數倉的技術架構、數倉建設關鍵動作、數倉載體/工具、配置參考、大資料場景支撐案例等内容,限時免費下載下傳!
https://s.fanruan.com/gp9fn 「連結」
一、資料清洗的意義.
衆所周知,在資料分析報告中,未經清洗的資料很可能會導緻錯誤的結論,降低報告的可信度。而通過資料清洗,就可以去除錯誤、備援或不完整的資料,提高資料分析的準确性。
作為預處理的重要環節,資料清洗在各個領域都有着廣泛的應用:
(1)對于建立資料倉庫,當多個資料庫合并或多個資料源內建時,需要進行資料清洗。資料清洗包括資料的清洗和結構轉換兩個過程,為資料倉庫的高效運作提供保障。
(2)在機器學習和人工智能領域,資料清洗的作用主要展現在資料收集、清洗、預處理、存儲和分析等方面。通過資料清洗處理不完整、錯誤或重複的資料,為模型訓練提供高品質的資料。
二、常見的資料清洗問題及處理方法
其實,資料清洗作為資料處理的一部分,不是簡單的過程,而是會面臨各種各樣的問題,這裡給大家列舉幾個常見的資料清洗問題,并給出相應的處理方法,希望對大家有所幫助!
(一)缺失值處理
1. 識别缺失值的方法
- 熱圖可視化是一種有效的識别缺失值的方法。通過将資料以熱圖的形式展示,可以直覺地看出哪些資料點存在缺失。顔色的深淺可以代表資料的完整性程度,顔色越淺表示缺失值越多。比如下圖就是資料可視化熱圖:
- 列出缺失資料百分比也是一種常見的方法。可以計算每個字段的缺失值比例,例如,假設有一個包含 1000 條記錄的資料集,某個字段有 200 條記錄存在缺失,那麼該字段的缺失資料百分比為 20%。
- 缺失資料直方圖可以幫助我們更直覺地了解資料的缺失情況。将資料集中的缺失值數量以直方圖的形式展示,可以清晰地看出不同字段的缺失值分布情況。比如在下圖展示的缺失資料直方圖中。
2. 處理缺失值的政策
- 丢棄觀察值是一種處理缺失值的方法。在丢棄觀察值時,我們一般要滿足兩個條件:一是缺失值數量較少;二是缺失資料對整體資料影響較小,是以,這就要求我們樹立“大局觀念”,從資料的整體大局出發。例如,在一個包含 1000 條記錄的資料集,如果隻有幾十條記錄存在缺失值,并且這些記錄的缺失不會對資料分析結果産生重大影響,那麼可以考慮删除這些記錄。千萬不能隻看資料量的差異,這樣很可能就會把一些關鍵資料誤删!
- 丢棄特征也是一種處理方法。如果某個特征的缺失值比例過高,比如超過 50%,那麼可以考慮删除這個特征。因為過多的缺失值可能會導緻該特征在資料分析中失去意義。
- 填充缺失值是一種常用的處理政策。可以根據業務知識或過往經驗給出推測填充,例如根據使用者的其他行為特征推測缺失的資訊。也可以利用同一名額資料計算結果填充,如使用均值、中位數等。還可以利用不同名額資料推算結果填充,比如用身份證資訊可以揭示年齡等資訊。
(二)重複資料處理
在處理資料集中完全或部分重複的記錄時,可以使用多種方法。
首先,可以使用去重工具自動識别和删除重複資料行。許多資料庫管理系統和資料分析軟體都提供了去重功能,可以快速地找出重複的資料并進行删除。這裡就不給大家推薦一些專業的資料處理工具了,就用最簡單的Excel就能解決,在 Excel 中,可以使用 “資料” 菜單下的 “删除重複項” 功能,選擇要去重的列,即可自動删除重複的資料行。
此外,還可以合并多列資料實作去重。有時候,重複的資料可能不是完全相同的記錄,而是某些關鍵列的值相同。在這種情況下,可以将多個列的資料合并起來,作為判斷重複的依據。例如,将姓名、身份證号和出生日期三個列的資料合并起來,如果合并後的結果相同,則認為是重複記錄。
(三)異常值處理
目前來說,分箱、聚類和回歸等方法是識别和處理資料中異常值的有效手段。
1. 分箱方法
分箱方法可以将資料劃分為若幹個區間,将落在區間外的資料點視為異常值。例如,可以使用等寬分箱法,将資料劃分為若幹個寬度相等的區間,然後判斷每個資料點所在的區間。如果一個資料點落在了區間範圍之外,那麼可以認為它是異常值。
2. 聚類方法
聚類方法可以将資料點分為不同的簇,異常值通常會落在較小的簇或者遠離其他簇的位置。例如,使用 KMeans 聚類算法,将資料點分為多個簇,然後觀察每個簇的大小和分布情況。如果某個資料點所在的簇非常小,或者該資料點與其他簇的距離很遠,那麼可以認為它是異常值。
【補充】
K-means算法是一種疊代求解的聚類分析算法,其核心思想是将資料集中的n個對象劃分為K個聚類,使得每個對象到其所屬聚類的中心(或稱為均值點、質心)的距離之和最小。這裡所說的距離通常指的是歐氏距離,但也可以是其他類型的距離度量。K-means算法的執行過程通常包括以下幾個步驟:
(1)初始化:選擇K個初始聚類中心
在算法開始時,需要随機選擇K個資料點作為初始的聚類中心。這些初始聚類中心的選擇對最終的聚類結果有一定的影響,是以在實際應用中,通常會采用一些啟發式的方法來選擇較好的初始聚類中心,如K-means++算法。
(2)配置設定:将每個資料點配置設定給最近的聚類中心
對于資料集中的每個資料點,計算其與每個聚類中心的距離,并将其配置設定給距離最近的聚類中心。這一步通常使用歐氏距離作為距離度量,計算公式如下:
(3)更新:重新計算每個聚類的中心
對于每個聚類,重新計算其聚類中心。新的聚類中心是該聚類内所有資料點的均值,計算公式如下:
(4)疊代:重複配置設定和更新步驟,直到滿足終止條件
3. 回歸方法
回歸方法可以通過建立資料的回歸模型,預測資料的趨勢和範圍,将超出預測範圍的資料點視為異常值。最常見的是使用線性回歸模型,根據已知的資料點建立回歸方程,然後預測未知資料點的值。如果某個資料點的實際值與預測值相差較大,那麼可以認為它是異常值。
在分析資料不合理值時,需要結合統計方法和實際業務情況進行人工處理。例如,可以計算資料的均值、中位數、标準差等統計量,判斷資料點是否超出了合理的範圍。同時,還需要結合業務知識,了解資料的實際含義和可能的取值範圍,對異常值進行合理的判斷和處理。
例如某電商公司,記錄了每天的訂單金額資料。
首先,計算訂單金額資料的均值、中位數和标準差。假設經過計算,訂單金額的均值為 500 元,中位數為 480 元,标準差為 150 元。
根據統計學的經驗法則,通常認為資料落在均值加減三個标準差範圍内是比較合理的。即 [500 - 3×150, 500 + 3×150] = [50, 950]。如果發現有訂單金額資料為 1500 元,那麼這個資料點就明顯超出了合理範圍。
(四)資料字段格式問題處理
1. 确定正确的資料字段格式
在處理資料字段格式問題時,首先需要确定正确的資料字段格式。不同的資料類型有不同的格式要求,例如日期字段通常需要按照特定的格式進行存儲,如 “YYYY-MM-DD”。數字字段可以分為整數、小數等不同類型,這就需要根據實際情況進行處理。文本字段也需要注意字元編碼、大小寫等問題。
通過對資料的中繼資料進行分析,可以了解每個字段的正确格式要求。同時,可以抽取一部分資料進行人工檢視,确定哪些字段需要進行格式轉換或清洗。
2. 清洗文本格式
清洗文本格式是處理資料字段格式問題的一個重要方面。去除多餘的空格、特殊字元、标點符号等格式問題可以提高資料的品質和一緻性。
可以使用正規表達式等工具來去除文本中的特殊字元和标點符号。例如,使用 Python 的正規表達式子產品,可以定義一個正規表達式模式,比對除了字母和數字以外的所有字元,然後用空字元串替換這些字元,進而去除特殊字元和标點符号。
去除多餘的空格可以使用字元串處理函數。例如,在 Python 中,可以使用strip()函數去除字元串兩端的空格,使用replace()函數去除字元串中的多個連續空格。
三、高效的資料清洗方法
其實,在資料清洗過程中,可以通過封裝函數和使用pipe()方法串聯起來,形成資料清洗的标準模闆,進而提高資料清洗的效率和準确性。
1. 去除缺失值和重複值
對于缺失值的處理,可以采用多種方法。如果資料集中存在少量缺失值,可以選擇直接删除含有缺失值的記錄。但如果缺失值較多,簡單删除可能會影響資料的完整性。這時,可以考慮用中位數、平均數或衆數來填充缺失值。例如,對于數值類型的特征值,可以使用中位數填充,就像這樣:
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
對于重複值的處理,可以使用drop_duplicates()方法。将這些處理步驟封裝成一個函數:
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()
2. 轉換資料類型
在使用pandas處理資料時,經常會遇到資料集中的變量類型被自動變成object的情況。這時可以使用convert_dtypes來進行批量的轉換,它會自動推斷資料原來的類型,并實作轉換。同時,可以列印出裡面各列的資料類型,友善檢視和檢查資料的正确性。以下是封裝成函數的代碼:
def convert_dtypes(df):
print(df.dtypes)
return df.convert_dtypes()
3. 檢測極值
對于極值的檢測,可以通過箱型圖或z-score方法。箱型圖由最大值、上四分位數(Q3)、中位數(Q2)、下四分位數和最小值五個統計量組成,其中 Q1 和 Q3 之間的間距稱為是四分位間距(IQR),通常樣本中的資料大于 Q3 + 1.5IQR 和小于 Q1 - 1.5IQR 定義為異常值。以下是通過箱型圖檢測異常值的示例代碼:
sample = [11, 500, 20, 24, 400, 25, 10, 21, 13, 8, 15, 10]
plt.boxplot(sample, vert=False)
plt.title("箱型圖來檢測異常值", fontproperties="SimHei")
plt.xlabel('樣本資料', fontproperties="SimHei")
z-score是以标準差為機關去度量某個資料偏離平均數的距離,計算公式為:
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
對待異常值,可以将其删除或者替換成其他的值,如上面箱型圖提到的上四分位數或者下四分位數。以下是删除異常值的代碼:
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)]
以下是替換異常值的代碼:
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
最後,将這些函數用pipe()方法串聯起來,形成一個資料清洗的标準模闆:
df_cleaned = (df.pipe(fill_missing_values_and_drop_duplicates, 'History').pipe(remove_outliers2, 'Salary').pipe(convert_dtypes))
通過這種方式,可以将資料清洗的各個步驟封裝成函數,然後用pipe()方法串聯起來,形成一個可重複使用的資料清洗标準模闆,提高資料清洗的效率和準确性,為後續的資料分析和模組化工作奠定堅實的基礎。
綜上所述,資料清洗在資料分析和企業決策中起着至關重要的作用。企業若想在數字化時代實作精準決策和高效營運,離不開高品質的資料支撐,而資料清洗正是確定資料品質的關鍵環節。說實話,資料清洗是一項複雜而又關鍵的工作,需要企業各方面的合力。隻有公司高層、IT人員和業務部門共同發力,建立正确的資料清洗流程和方法,才能為企業的資料分析和決策提供高品質的資料支援。
想要進一步了解企業資料清洗和治理方法的,可以點選連結進行咨詢,解決資料處理過程中的難題!https://s.fanruan.com/upmfv 帆軟通行證登入