iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0

~今天要分享的是「資料清洗」~
資料清洗是資料分析前的關鍵步驟之一,同時也是資料預處理的一部分。它的主要目的是處理原始數據中的錯誤和不一致性,以確保資料的品質。以下是一些資料清洗中常見的情況:

  1. 缺失值處理
  • 介紹:當資料不存在或未被記錄的情況發生時,這些值會被標示為NaN、NA、None、NaT或其他符號。
  • python實作:我們首先可以透過isna()或isnull()語法來尋找資料內是否有缺失值,之後透過刪除、補眾數、補平均數或插值的方法來處理缺失值,以下是程式碼示範:

→建立資料框

import pandas as pd
import numpy as np

data = pd.DataFrame([
                     [1,"apple",3],
                     [4,np.nan,5],
                     [None,"banana",7],
                     [8,"apple",10],
                     [np.nan,"apple",12],
                     [5,"banana",8],
                     [4,None,5],
                     [4,"apple",100],
                     [9,"apple",4],
                     [np.nan,"apple",8]
                    ])
data

→確認哪些是空值

data.isnull()

→兩種處理方式
方式一、刪除缺失值

#刪除缺失值
data.dropna()

方式二、缺失值補值

#缺失值補值
print("第零行平均數為:",data[0].mean())
print("第一行眾數為:",data[1].mode(dropna=True))
data[0].fillna(5,inplace=True)
data[1].fillna("apple",inplace=True)
data
  1. 重複數據處理
  • 介紹:由於資料輸入錯誤或是在資料提取跟收集的過程中,資料存在相同或幾乎相同的觀測值。
  • python實作:承上例缺失值補值後的資料框,會發現第一列與第六列的數據是一模一樣的,假設第六列的數據是不小心輸入錯誤的重複數據,我們可以使用下列程式碼將此資料刪除:
#重複數據刪除
data.drop(index=6,inplace=True)
data
  1. 異常值處理
  • 介紹:資料明顯不同於其他的觀測值,也就是發生極端值或錯誤值的情況。
  • python實作:承上例處理後的資料框,會發現第七列的第二行資料值明顯比其他數據來的大很多,此時我們同樣以drop()語法將資料刪除:
#異常值刪除
data.drop(index=7,inplace=True)
data
  1. 資料型別轉換
  • 介紹:根據分析的需要,將一種資料型別的資料轉換為另一種資料型別的操作。
  • python實作:有時候可能因為在excel上誤把數值資料設定成文字格式,或是為了資料呈現的美觀,希望將浮點數資料轉為整數格式,我們都可以使用以下程式碼實現我們的需求:
#資料型別轉換
data[0]=data[0].astype(int)
data
  1. 時間序列處理
  • 介紹:一般來說,時間是由年、月、日、小時、分鐘、秒和微秒組成,對於時間序列的處理,最重要的是處理日期和時間格式,進而提取相關信息。
  • python實作:我們熟悉的日期格式是年-月-日,但在某些國家會有當地習慣使用的格式,例如美國習慣以月-日-年來做標示,以下的程式碼教導大家該如何處理時間格式不同的狀況:
#時間序列處理
import pandas as pd

date=pd.Series(["18-9-2023","17-9-2023","2023-9-16","9-15-2023","2023/9/14"])
pd.to_datetime(date,dayfirst=True)
  1. 數據標準化
  • 介紹:將不同特徵或變數之間的數據轉化為一致的單位或比例,以便進行比較和分析。
  • python實作:當需要做分析的資料單位不同,就需要做標準化處理,下方所示的程式碼是一種最常見的處理方式:
    →建立資料框
import pandas as pd

data1 = pd.DataFrame([
                     [1,1000],
                     [4,1090],
                     [6,1055],
                     [8,1029],
                     [3,1048],
                     [5,1095],
                     [4,1037],
                     [2,1026],
                     [6,1083],
                     [2,1034]
                    ])
data1

→標準化資料

#數據標準化
from sklearn.preprocessing import StandardScaler
standar=StandardScaler()
standar.fit_transform(data1)

上一篇
鐵人賽第三天~
下一篇
鐵人賽第五天~ETL(擷取、轉換、載入)
系列文
打造數據科學之路:資料分析與機器學習的完整指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言