【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)
生活随笔
收集整理的這篇文章主要介紹了
【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)于問(wèn)題一中的異常值處理,我選取了拉格朗日插值的方法,但是上篇博客寫(xiě)的模糊,這里寫(xiě)一下:
導(dǎo)入需要的包:
import numpy as np import pandas as pd import matplotlib.pyplot as plt導(dǎo)入我們的數(shù)據(jù)集:
data_285=pd.read_excel('附件三:285號(hào)和313號(hào)樣本原始數(shù)據(jù).xlsx',sheet_name='操作變量285') data_285=data_285.iloc[:,1:] data_285 data_313=pd.read_excel('附件三:285號(hào)和313號(hào)樣本原始數(shù)據(jù).xlsx',sheet_name='操作變量313') data_313=data_313.iloc[:,1:] data_313
我們檢查不符合3σ\sigmaσ原則的數(shù)據(jù),并標(biāo)記為空值:
我們檢查一下是否存在空值:
我們看一下313的數(shù)據(jù)集:
我們檢查一下空值的位置:
第一列為索引位置!
我們測(cè)試一下其中的一個(gè)值:
data_313_2.loc[37,'S-ZORB.FC_2801.PV'] nan我們計(jì)算計(jì)算拉格朗日插值:
from scipy.interpolate import lagrange #傳入存在缺失值的列,缺失值所在0軸坐標(biāo)index,按前后k個(gè)數(shù)來(lái)計(jì)算拉格朗日插值,返回index的拉格朗日插值 def lag_fill(df,i,k):r=0 if (i-k)<0 else (i-k) # python的三目運(yùn)算符較為特殊l=len(df.index) if (i+1+k)>len(df.index) else (i+1+k)y=df.loc[list(range(r,i))+list(range(i+1,l))] #取index前后k個(gè)數(shù)據(jù)作為y代入拉格朗日函數(shù)進(jìn)行擬合for j in y.index:if y.isnull().loc[j]:y.drop(index=j,inplace=True)x=y.indexlag=lagrange(x.values,y.values)return lag(i) for i in isnull:fnum=lag_fill(data_313_2.loc[:,i[1]],i[0],1)data_313_2.loc[i[0],i[1]]=fnum data_313_2
我們看一下上個(gè)位置的數(shù)據(jù):
我們檢驗(yàn)一下新數(shù)據(jù)據(jù)是否合適:
data_313_2_new=three_sigma(data_313_2) data_313_2_new data_313_2_new.isnull().sum()[data_313_2_new.isnull().sum()>0] isnull_2=[] for i in data_313_2_new.columns:for j in data_313_2_new.index:if data_313_2_new.isnull().loc[j,i]:isnull_2.append((j,i)) isnull_2,len(isnull_2) for j in isnull_2:fnum_1=lag_fill(data_313_2_new.loc[:,j[1]],j[0],1)data_313_2_new.loc[j[0],j[1]]=fnum_1 data_313_2_new.isnull().sum()[data_313_2_new.isnull().sum()>0] Series([], dtype: int64)再次檢查:
data_313_2_new_2=three_sigma(data_313_2_new) data_313_2_new_2.isnull().sum()[data_313_2_new_2.isnull().sum()>0] isnull_3=[] for i in data_313_2_new_2.columns:for j in data_313_2_new_2.index:if data_313_2_new_2.isnull().loc[j,i]:isnull_3.append((j,i)) isnull_3,len(isnull_3) for m in isnull_3:fnum_2=lag_fill(data_313_2_new_2.loc[:,m[1]],m[0],1)data_313_2_new_2.loc[m[0],m[1]]=fnum_2 data_313_2_new_3=three_sigma(data_313_2_new_2) data_313_2_new_3 isnull_4=[] for i in data_313_2_new_3.columns:for j in data_313_2_new_3.index:if data_313_2_new_3.isnull().loc[j,i]:isnull_4.append((j,i)) isnull_4,len(isnull_4) for n in isnull_4:fnum_3=lag_fill(data_313_2_new_3.loc[:,n[1]],n[0],1)data_313_2_new_3.loc[n[0],n[1]]=fnum_3 data_313_2_new_4=three_sigma(data_313_2_new_3) data_313_2_new_4.isnull().sum()[data_313_2_new_4.isnull().sum()>0]我們的結(jié)果為:
Series([], dtype: int64)此時(shí),我們的數(shù)據(jù)不再有異常值,處理完成!
總結(jié)
以上是生活随笔為你收集整理的【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高压脉冲电源
- 下一篇: 两行配置解决github官网访问速度慢的