การ Impute ข้อมูล Time-Series

การจัดการข้อมูลที่หายไปใน Python

Suraj Donthi

Deep Learning & Computer Vision Consultant

ชุดข้อมูล Airquality

import pandas as pd
airquality = pd.read_csv('air-quality.csv', parse_dates='Date', 
                                index_col='Date')

airquality.head()
             Ozone    Solar    Wind    Temp
Date                
1976-05-01    41.0    190.0     7.4    67
1976-05-02    36.0    118.0     8.0    72
1976-05-03    12.0    149.0    12.6    74
1976-05-04    18.0    313.0    11.5    62
1976-05-05     NaN      NaN    14.3    56
การจัดการข้อมูลที่หายไปใน Python

ชุดข้อมูล Airquality

airquality.isnull().sum()
Ozone    37
Solar     7
Wind      0
Temp      0
dtype: int64
airquality.isnull.mean() * 100
Ozone    24.183007
Solar     4.575163
Wind      0.000000
Temp      0.000000
dtype: float64
การจัดการข้อมูลที่หายไปใน Python

เมธอด .fillna()

attribute method ใน .fillna() สามารถกำหนดเป็น

  • 'ffill' หรือ 'pad'
  • 'bfill' หรือ 'backwardfill'
การจัดการข้อมูลที่หายไปใน Python

เมธอด Ffill

  • แทนที่ NaN ด้วยค่าที่สังเกตได้ล่าสุด
  • pad เหมือนกับ 'ffill'
airquality.fillna(method='ffill', inplace=True)
การจัดการข้อมูลที่หายไปใน Python


airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01     NaN
1976-06-02     NaN
1976-06-03     NaN
1976-06-04     NaN
1976-06-05     NaN
1976-06-06     NaN
1976-06-07    29.0
1976-06-08     NaN
1976-06-09    71.0
airquality.fillna(method='ffill', 
                         inplace=True)
airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01    37.0
1976-06-02    37.0
1976-06-03    37.0
1976-06-04    37.0
1976-06-05    37.0
1976-06-06    37.0
1976-06-07    29.0
1976-06-08    29.0
1976-06-09    71.0
การจัดการข้อมูลที่หายไปใน Python

เมธอด Bfill

  • แทนที่ NaN ด้วยค่าถัดไปที่สังเกตได้
  • backfill เหมือนกับ 'bfill'
df.fillna(method='bfill', inplace=True)
การจัดการข้อมูลที่หายไปใน Python


airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01     NaN
1976-06-02     NaN
1976-06-03     NaN
1976-06-04     NaN
1976-06-05     NaN
1976-06-06     NaN
1976-06-07    29.0
1976-06-08     NaN
1976-06-09    71.0
airquality.fillna(method='bfill', 
                         inplace=True)
airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01    29.0
1976-06-02    29.0
1976-06-03    29.0
1976-06-04    29.0
1976-06-05    29.0
1976-06-06    29.0
1976-06-07    29.0
1976-06-08    71.0
1976-06-09    71.0
การจัดการข้อมูลที่หายไปใน Python

เมธอด .interpolate()

  • เมธอด .interpolate() ขยายลำดับค่าไปยังค่าที่หายไป

attribute method ใน .interpolate() สามารถกำหนดเป็น

  • 'linear'
  • 'quadratic'
  • 'nearest'
การจัดการข้อมูลที่หายไปใน Python

Linear Interpolation

  • Impute ด้วยค่าแบบเชิงเส้นหรือค่าระยะเท่ากัน
df.interpolate(method='linear', inplace=True)

ตัวอย่าง linear interpolation

การจัดการข้อมูลที่หายไปใน Python


airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01     NaN
1976-06-02     NaN
1976-06-03     NaN
1976-06-04     NaN
1976-06-05     NaN
1976-06-06     NaN
1976-06-07    29.0
1976-06-08     NaN
1976-06-09    71.0
airquality.interpolate(
          method='linear', inplace=True)
airquality['Ozone'][30:40]
Date         Ozone        
1976-05-31    37.0
1976-06-01    35.9
1976-06-02    34.7
1976-06-03    33.6
1976-06-04    32.4
1976-06-05    31.3
1976-06-06    30.1
1976-06-07    29.0
1976-06-08    50.0
1976-06-09    71.0
การจัดการข้อมูลที่หายไปใน Python

Quadratic Interpolation

  • Impute ด้วยค่าแบบกำลังสอง
df.interpolate(method='quadratic', inplace=True)

ตัวอย่าง quadratic interpolation

การจัดการข้อมูลที่หายไปใน Python


airquality['Ozone'][30:39]
             Ozone
Date                
1976-05-31    37.0
1976-06-01     NaN
1976-06-02     NaN
1976-06-03     NaN
1976-06-04     NaN
1976-06-05     NaN
1976-06-06     NaN
1976-06-07    29.0
1976-06-08     NaN
airquality.interpolate(
  method='quadratic', inplace=True)
airquality['Ozone'][30:39]
             Ozone
Date                
1976-05-31    37.0
1976-06-01   -38.4
1976-06-02   -79.4
1976-06-03   -85.9
1976-06-04   -62.4
1976-06-06    -2.8
1976-06-07    29.0
1976-06-08    62.2
การจัดการข้อมูลที่หายไปใน Python

การ Impute ด้วยค่าใกล้เคียงที่สุด

  • Impute ด้วยค่าที่สังเกตได้ใกล้เคียงที่สุด
df.interpolate(method='nearest', inplace=True)

ตัวอย่าง nearest interpolation

การจัดการข้อมูลที่หายไปใน Python


airquality['Ozone'][30:39]
Date         Ozone        
1976-05-31    37.0
1976-06-01     NaN
1976-06-02     NaN
1976-06-03     NaN
1976-06-04     NaN
1976-06-05     NaN
1976-06-06     NaN
1976-06-07    29.0
1976-06-08     NaN
airquality.interpolate(
  method='nearest', inplace=True)
airquality['Ozone'][30:39]
Date         Ozone        
1976-05-31    37.0
1976-06-01    37.0
1976-06-02    37.0
1976-06-03    37.0
1976-06-04    29.0
1976-06-05    29.0
1976-06-06    29.0
1976-06-07    29.0
1976-06-08    29.0
การจัดการข้อมูลที่หายไปใน Python

มาฝึกกันเถอะ!

การจัดการข้อมูลที่หายไปใน Python

Preparing Video For Download...