日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)

發布時間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于問題一中的異常值處理,我選取了拉格朗日插值的方法,但是上篇博客寫的模糊,這里寫一下:

導入需要的包:

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σ原則的數據,并標記為空值:

def three_sigma(data_input):for i in range(data_input.shape[0]):for j in range(data_input.shape[1]):mean=data_input.iloc[:,j].mean()std=data_input.iloc[:,j].std()if abs(data_input.iloc[i,j]-mean)>3*std:data_input.iloc[i,j]=np.nanelse:continuereturn data_input three_sigma(data_285)


我們檢查一下是否存在空值:

data_285.isnull().sum()[data_285.isnull().sum()>0]


我們看一下313的數據集:

data_313_2=three_sigma(data_313) data_313_2

data_313_2.isnull().sum()[data_313_2.isnull().sum()>0]


我們檢查一下空值的位置:

isnull=[] for i in data_313_2.columns:for j in data_313_2.index:if data_313_2.isnull().loc[j,i]:isnull.append((j,i)) isnull,len(isnull)


第一列為索引位置!

我們測試一下其中的一個值:

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.loc[37,'S-ZORB.FC_2801.PV'] 859.8040999999996

我們檢驗一下新數據據是否合適:

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)

此時,我們的數據不再有異常值,處理完成!

總結

以上是生活随笔為你收集整理的【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。