
缺失數(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ǔ)。前者比較簡(jiǎn)單粗暴,但是這種方法最大的局限就是它是以減少歷史數(shù)據(jù)來換取數(shù)據(jù)的完備,會(huì)造成資源的大量浪費(fèi),尤其在數(shù)據(jù)集本身就少的情況下,刪除記錄可能會(huì)直接影響分析結(jié)果的客觀性和準(zhǔn)確性
本文介紹數(shù)據(jù)常用的插補(bǔ)方法。對(duì)拉格朗日插值法和滑動(dòng)平均窗口法進(jìn)行重點(diǎn)介紹和實(shí)現(xiàn)。
介紹
常用的插值方法如下:
這里只對(duì)插值法和窗口滑動(dòng)平均進(jìn)行介紹。
滑動(dòng)平均窗口法
概念:
??一個(gè)列表a 中的第 i 個(gè)位置數(shù)據(jù)為缺失數(shù)據(jù),則取前后 window 個(gè)數(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é)概念可知,對(duì)于平面上已知的n個(gè)點(diǎn)(無兩點(diǎn)在一條直線上)可以找到一個(gè)n-1次的多項(xiàng)式,使此多項(xiàng)式通過這n個(gè)點(diǎn)。
??因此我們需先求得多項(xiàng)式函數(shù)L(x),然后將缺失值對(duì)應(yīng)的點(diǎn)x帶入插值多項(xiàng)式得到缺失值的近似值L(x)。多項(xiàng)式函數(shù)L(x)的求法如下:
實(shí)現(xiàn)
代碼
# coding:utf-8
# 拉格朗日插值代碼
import pandas as pd # 導(dǎo)入數(shù)據(jù)分析庫(kù)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ù)個(gè)數(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ù)個(gè)數(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
分析
對(duì)比之下,滑動(dòng)窗口方法的輸出都還比較合理。但顯而易見的是拉格朗日插值對(duì)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)。我們把拉格朗日多項(xiàng)式打印出來:
??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)的截距。直觀感覺就不太合理,猜測(cè)就是拉格朗日插值法對(duì)邊緣數(shù)據(jù)敏感(即插值需要左右兩邊數(shù)據(jù)提供信息,在缺失左邊數(shù)據(jù)信息情況下,得到的結(jié)果就不太合理),日后求證!
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10