
缺失數(shù)據(jù)處理-插值法
在數(shù)據(jù)挖掘中,原始海量的數(shù)據(jù)中存在著大量不完整、不一致、有異常、偏離點(diǎn)的數(shù)據(jù)。這些問題數(shù)據(jù)輕則影響數(shù)據(jù)挖掘執(zhí)行效率,重則影響執(zhí)行結(jié)果。因此數(shù)據(jù)預(yù)處理工作必不可少,而其中常見工作的就是數(shù)據(jù)集的缺失值處理。
數(shù)據(jù)缺失值處理可分兩類。一類是刪除缺失數(shù)據(jù),一類是進(jìn)行數(shù)據(jù)插補(bǔ)。前者比較簡單粗暴,但是這種方法最大的局限就是它是以減少歷史數(shù)據(jù)來換取數(shù)據(jù)的完備,會造成資源的大量浪費(fèi),尤其在數(shù)據(jù)集本身就少的情況下,刪除記錄可能會直接影響分析結(jié)果的客觀性和準(zhǔn)確性
本文介紹數(shù)據(jù)常用的插補(bǔ)方法。對拉格朗日插值法和滑動平均窗口法進(jìn)行重點(diǎn)介紹和實現(xiàn)。
介紹
常用的插值方法如下:
這里只對插值法和窗口滑動平均進(jìn)行介紹。
滑動平均窗口法
概念:
??一個列表a 中的第 i 個位置數(shù)據(jù)為缺失數(shù)據(jù),則取前后 window 個數(shù)據(jù)的平均值,作為插補(bǔ)數(shù)據(jù)。
示例:
a = [3,4,5,6,None,4,5,2,5] 、 window = 3
則 None位置的數(shù)據(jù)為:(4+5+6+4+5+2)/6 = 2.67
拉格朗日插值法
概念
??根據(jù)數(shù)學(xué)概念可知,對于平面上已知的n個點(diǎn)(無兩點(diǎn)在一條直線上)可以找到一個n-1次的多項式,使此多項式通過這n個點(diǎn)。
??因此我們需先求得多項式函數(shù)L(x),然后將缺失值對應(yīng)的點(diǎn)x帶入插值多項式得到缺失值的近似值L(x)。多項式函數(shù)L(x)的求法如下:
實現(xiàn)
代碼
# coding:utf-8
# 拉格朗日插值代碼
import pandas as pd # 導(dǎo)入數(shù)據(jù)分析庫Pandas
from scipy.interpolate import lagrange # 導(dǎo)入拉格朗日插值函數(shù)
# 構(gòu)建原始數(shù)據(jù)
data = pd.DataFrame([
["2015/3/1", 59],
["2015/2/28", 2618.2],
["2015/2/27", 2608.4],
["2015/2/26", 2651.9],
["2015/2/25", 3442.1],
["2015/2/24", 3393.1],
["2015/2/23", 3136.6],
["2015/2/22", 3744.1],
["2015/2/21", ],
["2015/2/20", 4060.3],
["2015/2/19", 3614.7],
["2015/2/18", 3295.5],
["2015/2/16", 2332.1],
["2015/2/15", 2699.3],
["2015/2/14", ],
["2015/2/13", 3036.8],
["2015/2/12", 1865],
["2015/2/11", 3014.3],
["2015/2/10", 2742.8],
["2015/2/9", 2173.5],
["2015/2/8", 3161.8],
["2015/2/7", 3023.8],
["2015/2/6", 2998.1],
], columns=[u'日期', u'銷量'])
# 設(shè)置異常值,把銷量大于5000和銷量小于400的異常值替換為None
data[u'銷量'][(data[u'銷量'] < 400) | (data[u'銷量'] > 5000)] = None
# 把要處理的數(shù)據(jù)取出來,pandas中dataframe格式單獨(dú)取出一列就是series數(shù)據(jù)格式
tmp_data_1 = data[u'銷量'].copy()
tmp_data_2 = data[u'銷量'].copy()
def ployinterp_column(series, pos, window=5):
"""
:param series: 列向量
:param pos: 被插值的位置
:param window: 為取前后的數(shù)據(jù)個數(shù)
:return:
"""
y = series[list(range(pos - window, pos)) + list(range(pos + 1, pos + 1 + window))] # 取數(shù)
y = y[y.notnull()] # 剔除空值
return lagrange(y.index, list(y))(pos) # 插值并返回插值結(jié)果
def sma_mothod(series, pos, window=5):
"""
:param series: 列向量
:param pos: 被插值的位置
:param window: 為取前后的數(shù)據(jù)個數(shù)
:return:
"""
y = series[list(range(pos - window, pos)) + list(range(pos + 1, pos + 1 + window))] # 取數(shù)
y = y[y.notnull()]
return reduce(lambda a, b: a + b, y) / len(y)
for j in range(len(tmp_data_1)):
if (tmp_data_1.isnull())[j]: # 如果為空即插值。
tmp_data_1[j] = ployinterp_column(tmp_data_1, j)
print j, data.loc[j, u'日期'], tmp_data_1[j]
print
for j in range(len(tmp_data_2)):
if (tmp_data_2.isnull())[j]: # 如果為空即插值。
tmp_data_2[j] = sma_mothod(tmp_data_2, j)
print j, data.loc[j, u'日期'], tmp_data_2[j]
輸出
0 2015/3/1 -291.4
8 2015/2/21 4275.25476248
14 2015/2/14 3680.66999227
0 2015/3/1 2942.74
8 2015/2/21 3236.97
14 2015/2/14 2883.43
分析
對比之下,滑動窗口方法的輸出都還比較合理。但顯而易見的是拉格朗日插值對0位置的數(shù)據(jù)處理的很不好,插值為
-291.4。擬合點(diǎn)的數(shù)據(jù)格式為(x,y),具體數(shù)據(jù):(1, 2618.2), (2, 2608.4),(3, 2651.9),(4,
3442.1), (5, 3393.1)。我們把拉格朗日多項式打印出來:
??L(x) = -94.97 x^4 + 1065 x^3 - 3991 x^2 + 5930 x^1 - 291.4
??把 x= 0 帶入得到 L(x),就得到了 -291.4。這里x=0就是L(x)的截距。直觀感覺就不太合理,猜測就是拉格朗日插值法對邊緣數(shù)據(jù)敏感(即插值需要左右兩邊數(shù)據(jù)提供信息,在缺失左邊數(shù)據(jù)信息情況下,得到的結(jié)果就不太合理),日后求證!
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03