python插值填补缺省值,数据清洗用python处理缺失值
大家好,本篇文章主要讲的是大蟒如何去除异常值和缺失值的插值,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
1.使用箱型法去除异常值:
将数组作为铭牌导入
进口熊猫作为螺纹中径
将绘制精美的图表作为血小板计数导入
导入操作系统
data=pd.read_excel(try.xls ,header=0)
#打印(数据。形状)
# print(data.head(10))
# print(data.describe())
neg_list=[位移]
打印((1)数据的行数为:)
R=data.shape[0]
打印(R)
打印((2)小于或大于阈值的数据提取:)
对于负_列表:中的项目
neg_item=data[item]2000
打印(项目小于2000的有str(neg_item.sum())个)
打印((3)异常值的个数:)
对于负_列表:中的项目
iqr=数据[项目]。分位数(0.75) -数据[项目]。分位数(0.25)
q _异常_L=数据[项目]数据[项目]。分位数(0.25) - 1.5 * iqr
q _异常_U=数据[项目]数据[项目]。分位数(0.75) 1.5 * iqr
打印(项目中有str(q _异常_ l . sum()q _异常_U.sum())个异常值)
打印((4)箱型图确定上下限:)
对于负_列表:中的项目
iqr=数据[项目]。分位数(0.75) -数据[项目]。分位数(0.25)
太小=数据[项目]。分位数(0.25) - 1.5 * iqr
太大=数据[项目]。分位数(0.25) 1.5 * iqr
打印(下限是,太小_小)
打印(上限是,太大了)
打印((5)所有数据为:)
a=[]
因为我在否定列表:中
答。追加(数据[我])
打印(一份)
打印((6)所有正常数据:)
b=[]
j=0
而j R:
if (a[0][j]太小_ :
if (a[0][j] Too_big):
追加(a[0][j])
j=1
打印(二)
打印((7)所有异常数据:)
c=[]
i=0
而我R:
如果(a[0][i]太小或一个[0][i]太大):
追加(a[0][i])
a[0][i]=无
i=1
打印(三)
打印((8)把所有异常数据删除后:)
打印(一份)
打印((9)所有数据处理后输出:)
d=[]
k=0
而k R:
追加(a[0][k])
k=1
打印(四)
df=pd .数据帧(d,列=[位移])
df.to_excel(try_result.xls )
2.拉格朗日插值:
导入操作系统
进口熊猫作为螺纹中径
将数组作为铭牌导入
从scipy.interpolate导入拉格朗日
将matplotlib.pyplot作为血小板计数导入
PLT。RC params[ font。sans-serif ]=[ sim hei ]#用来正常显示中文标签
PLT。RC params[轴。unicode _ MINUS ]=False #用来正常显示负号
# 数据的读取
data=pd.read_excel(try.xls ,header=0)
neg_list=[位移]
# 数据的行数
R=data.shape[0]
# 异常数据的个数
对于负_列表:中的项目
iqr=数据[项目]。分位数(0.75) -数据[项目]。分位数(0.25)
q _异常
_L = data[item] < data[item].quantile(0.25) - 1.5 * iqr
q_abnormal_U = data[item] > data[item].quantile(0.75) + 1.5 * iqr
# print(item + 中有 + str(q_abnormal_L.sum() + q_abnormal_U.sum()) + 个异常值)
# 确定数据上限和下限
for item in neg_list:
iqr = data[item].quantile(0.75) - data[item].quantile(0.25)
Too_small = data[item].quantile(0.25) - 1.5 * iqr
Too_big = data[item].quantile(0.25) + 1.5 * iqr
data[u位移][(data[u位移]<Too_small) (data[u位移]>Too_big)] = None #过滤异常值,将其变为空值
#s为列向量,n为被插值位置,k为取前后的数据个数
def ployinter(s,n,k=5):
y = s[list(range(n-k,n)) + list(range(n+1,n+1+k))]
y = y[y.notnull()] #剔除空值
return lagrange(y.index,list(y))(n)
#逐个元素判断是否需要插值
for i in data.columns:
for j in range(len(data)):
if(data[i].isnull())[j]:
data[i][j] = ployinter(data[i],j)
# print(data[u位移])
# 输出拉格朗日插值后的数据
data.to_excel("try_result.xls")
# 把表格列数据调整为arr,arr为修改后的数据
print("拉格朗日插值后的数据:")
d = []
k = 0
while k < R:
d.append(data[u位移][k])
k +=1
# print(d)
arr = np.array(d)
print(arr)
# 输出图像
x = np.arange(len(d))
plt.plot(x,d,b-,label="one", marker=*,markersize=4,linewidth=1) # b代表blue颜色 -代表直线
plt.title(位移曲线)
plt.legend(loc=upper left,bbox_to_anchor=(1.0,1.0))
# 直接更改X轴坐标数
# plt.xticks((0,1,2,3,4,5,6,7,8),(0, 1, 2, 3, 4, 5, 6, 7, 8))
plt.xlabel(时间/h)
plt.ylabel(位移/mm)
#plt.grid(x1)
plt.show()
3.数据拟合:
import numpy as npimport pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
def Fun(p, x): # 定义拟合函数形式
a1, a2, a3 , a4 = p
return a1 * x ** 3 + a2 * x ** 2 + a3 * x + a4
def error(p, x, y): # 拟合残差
return Fun(p, x) - y
def main():
x = np.linspace(1, 31, 31) # 创建时间序列
data = pd.read_excel(try.xls, header=0)
y = data[u位移]
p0 = [0.1, -0.01, 100, 1000] # 拟合的初始参数设置
para = leastsq(error, p0, args=(x, y)) # 进行拟合
y_fitted = Fun(para[0], x) # 画出拟合后的曲线
plt.figure
plt.plot(x, y, r, label=Original curve)
plt.plot(x, y_fitted, -b, label=Fitted curve)
plt.legend()
plt.show()
print(para[0])
if __name__ == __main__:
main()
4.输出图像:
import pandas as pdimport numpy as np
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] #用来正常显示中文标签
plt.rcParams[axes.unicode_minus]=False #用来正常显示负号
jiaodu = [0, 15, 30, 15, 60, 75, 90, 105, 120]
x = range(len(jiaodu))
y = [85.6801, 7.64586, 86.0956, 159.229, 179.534, 163.238, 96.4436, 10.1619, 90.9262,]
#plt.figure(figsize=(10, 6))
plt.plot(x,y,b-,label="1", marker=*,markersize=7,linewidth=3) # b代表blue颜色 -代表直线
plt.title(各个区域亮度变化)
plt.legend(loc=upper left,bbox_to_anchor=(1.0,1.0))
plt.xticks((0,1,2,3,4,5,6,7,8),(0, 15, 30, 15, 60, 75, 90, 105, 120))
plt.xlabel(角度)
plt.ylabel(亮度)
#plt.grid(x1)
plt.show()
到此这篇关于python如何去除异常值和缺失值的插值的文章就介绍到这了,更多相关python去除异常值和缺失值内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。