數據挖掘之空數據處理(有史以來最全面)

缺失值處理常用方式

均值,中位數,衆數插補法

使用固定值(規定的標準值)

最近鄰插補法

迴歸方法:可以使用線性迴歸或者多項式迴歸(SVR)

插值法:拉格朗日差值和牛頓插值法。

拉格朗日插值法原理(看懂原理需要數學修煉):
在這裏插入圖片描述
在這裏插入圖片描述

拉格朗日插值法代碼示例

在這裏插入圖片描述
2月14號這一天存在空數據,下面我們使用拉格朗日插值法,對數據進行填充

#拉格朗日插值代碼
import pandas as pd
 #拉格朗日插值函數
from scipy.interpolate import lagrange

 #銷量數據路徑
inputfile = './catering_sale.xls'
#輸出數據路徑
outputfile = './sales.xls'

data = pd.read_excel(inputfile)
 #過濾異常值,將其變爲空值
data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] = None

#自定義列向量插值函數
#s爲列向量,n爲被插值的位置,k爲取前後的數據個數,默認爲5
def ployinterp_column(s, n, k=5):
    y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數
    y = y[y.notnull()] #剔除空值
    return lagrange(y.index, list(y))(n) #插值並返回插值結果

#逐個元素判斷是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]: #如果爲空即插值。
            data[i][j] = ployinterp_column(data[i], j)

data['日期'] = data['日期'].dt.date  
#輸出結果,寫入文件
data.to_excel(outputfile)

在這裏插入圖片描述
插值後大家發現,2月14號插值成功,營收4156,符合實際情況,因爲2月14號是週六,客流量比較大,而且是情人節,所以基本符合情況。
大家同時也發現2月21號的數據之前特別大,多達6607,所以我們把這一數據假定成異常值,進行刪除,重新生成了,拉格朗日填充結果爲4275,也比較正常,因爲2月21號也是週六。
我們可以發現這樣一個規律,週一至週五營業額比較少,週六日比較多。

牛頓法,與拉格朗日類似,scipy沒有提供方法,如果項目中需要使用,需要自己根據原理實現代碼。

參考書目:
《Python數據分析與挖掘實戰》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章