為了讓資料更適合進行後續的分析、建立模型,模型的決策準確性,資料探索與清理是資料分析過程中非常重要的步驟,主要目的在於確保資料的品質和可靠性。
因為前幾篇的例子中的資料,並沒有缺失值與重複值的部分,我另外找了一份有包含的資料來做案例分析,由於找到的資料沒有重複值的部分,故本文主要解釋處理缺失值的部分,重複值再另外找一份有包含重複值的資料,在來解釋如何處理重複值的。
import pandas as pd
df = pd.read_excel('Ditry Data Sample.xlsx')
# 顯示數據完整資訊
print(df.info())
從Non-Null Count這一列來看,是有存在空值的,也就是缺失值。
# 檢查是否有缺失值
print(df.isnull().sum())
缺失值是資料分析過程中常見的問題,處理缺失值的方法主要取決於缺失值的數量、分佈以及資料集的特性,對於某些特定的資料集缺失值可能是極具有意義的,例如在某些業務情境中,缺失本身可能代表特定的行為模式。(可能是不能回答)
dropna
):當缺失值數量較少且不會影響分析結果時,可以選擇直接刪除含有缺失值的整列數據。# 刪除含有缺失值的列
df_cleaned = df.dropna()
# 顯示被刪除後的資訊
print(df_cleaned.info())
此份資料刪除有缺失值的列,只少一筆資料,若這筆資料不是那麼重要,那麼刪除不會影響後續模型的結果。
# 刪除包含缺失值的欄位
df_cleaned = df.dropna(axis=1)
print(df_cleaned.info())
此份資料刪除包含缺失值的欄位,結果Spending_USD
則被刪除了,所以要用其他方法來處理缺失值。
interpolation
):對於時間序列資料或具有順序性的資料,可以使用插值方法根據已知值預測缺失值。ffill
和 bfill
):用前一個有效值或後一個有效值填補缺失值,適用於時間序列資料。# 找出有缺失值的行
rows_with_missing = df[df.isnull().any(axis=1)]
# 只顯示有缺失值的列
columns_with_missing = rows_with_missing.loc[:, df.isnull().any()]
print(columns_with_missing)
# 根據上面找到是在271行有缺失值
print(df.iloc[271])
原來是在2020年Great Britain少了一筆資料,那我們把Great Britain印出來來看,要用什麼方法處理缺失值比較恰當。
Great_Britain_data = df[df['Country'] == 'Great Britain']
print(Great_Britain_data)
由上面的資料來看,根據資料會隨著時間的變化,我們可以用插值法 (Interpolation)來補缺失值,也可以使用其他模型來預測,但這樣會相對複雜許多。
import pandas as pd
df = pd.read_csv('healthexp_uncleaned.csv')
# 插值法填補
df.interpolate(method='linear', inplace=True)
Great_Britain_data = df[df['Country'] == 'Great Britain']
print(Great_Britain_data)
這樣就順利的補了2020年這筆資料了。
後續在找有什麼資料,可以在說明更多補缺失值的方法,或者別人是怎麼做的案例。