【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)
生活随笔
收集整理的這篇文章主要介紹了
【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于問題一中的異常值處理,我選取了拉格朗日插值的方法,但是上篇博客寫的模糊,這里寫一下:
導入需要的包:
import numpy as np import pandas as pd import matplotlib.pyplot as plt導入我們的數據集:
data_285=pd.read_excel('附件三:285號和313號樣本原始數據.xlsx',sheet_name='操作變量285') data_285=data_285.iloc[:,1:] data_285 data_313=pd.read_excel('附件三:285號和313號樣本原始數據.xlsx',sheet_name='操作變量313') data_313=data_313.iloc[:,1:] data_313
我們檢查不符合3σ\sigmaσ原則的數據,并標記為空值:
我們檢查一下是否存在空值:
我們看一下313的數據集:
我們檢查一下空值的位置:
第一列為索引位置!
我們測試一下其中的一個值:
data_313_2.loc[37,'S-ZORB.FC_2801.PV'] nan我們計算計算拉格朗日插值:
from scipy.interpolate import lagrange #傳入存在缺失值的列,缺失值所在0軸坐標index,按前后k個數來計算拉格朗日插值,返回index的拉格朗日插值 def lag_fill(df,i,k):r=0 if (i-k)<0 else (i-k) # python的三目運算符較為特殊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個數據作為y代入拉格朗日函數進行擬合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
我們看一下上個位置的數據:
我們檢驗一下新數據據是否合適:
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]我們的結果為:
Series([], dtype: int64)此時,我們的數據不再有異常值,處理完成!
總結
以上是生活随笔為你收集整理的【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高压脉冲电源
- 下一篇: 两行配置解决github官网访问速度慢的