鱼C论坛

 找回密码
 立即注册
查看: 1180|回复: 2

关于获取数据异常值的代码几处疑问。问题可能有点多。已经加了注释。请大神帮忙指点

[复制链接]
发表于 2022-3-22 21:34:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1.     # predict y value using model
  2.     try:
  3.         y_pred=pd.Series(model.predict(X),index=y.index)       #这里try里面和except里面的代码不懂是什么意思,,index=y.index是什么意思,为什么在except里面加上model.fit(X,y)
  4.     except:
  5.         model.fit(X,y)
  6.         y_pred=pd.Series(model.predict(X),index=y.index)

  7.     reside=y-y_pred  
  8.     mean_reside=reside.mean()  
  9.     std_reside=reside.std()   

  10.     z=(reside-mean_reside)/std_reside
  11.     outliers=z[abs(z)>sigma].index        #设置异常数据的条件

  12.   
  13.     print('R2=',model.score(X,y))
  14.     print('mse=',mean_squared_error(y,y_pred))  
  15.     print('----------------------------------')

  16.     print(len(outliers),'outliers')
  17.     print(outliers.tolist)      

  18.     plt.figure(figsize=(15,5))
  19.     ax_131=plt.subplot(1,3,1)
  20.     plt.plot(y,y_pred,'.')
  21.     plt.plot(y.loc[outliers],y_pred.loc[outliers],'ro')
  22.    
  23.     plt.legend(['Accepted','Outlier'])   
  24.     plt.xlabel('y')
  25.     plt.ylabel('y_pred');
  26.     plt.show()  ###################代码运行结果(如图),是因为这里的区别,不加这一句就是正常结果,但是想不明白加了为什么会是图片所示的那样紫



  27.     ax_132=plt.subplot(1,3,2)
  28.     plt.plot(y,y-y_pred,'.')
  29.     plt.plot(y.loc[outliers],y.loc[outliers]-y_pred.loc[outliers],'ro')
  30.     plt.legend(['Accepled','Outlier'])
  31.     plt.xlabel('y')
  32.     plt.ylabel('y-y_pred')
  33.    

  34.     ax_133=plt.subplot(1,3,3)
  35.     z.plot.hist(bins=50,ax=ax_133)
  36.     z.loc[outliers].plot.hist(color='r',bins=50,ax=ax_133)     #ax=ax_133是什么意思,并没有在hist函数中找到ax参数
  37.     plt.legend(['Accepted','Outlier'])
  38.     plt.xlabel('z')
  39.    


  40.     plt.savefig('outliers.png')

  41.     return outliers
  42. from sklearn.linear_model import Ridge
  43. from sklearn.metrics import mean_squared_error
  44. X_train=train_data.iloc[:,0:-1]                                           #不明白这句代码的意思
  45. y_train=train_data.iloc[:,-1]
  46. outliers=find_outliers(Ridge(),X_train,y_train)
复制代码

代码有plt.show()

代码有plt.show()

代码没有plt.show()

代码没有plt.show()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-23 11:05:02 | 显示全部楼层
我是用箱线图方法做的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-23 11:05:47 | 显示全部楼层
  1. import pandas as pd
  2. import numpy as np
  3. # 读取文件
  4. file = 'S3地下水位高程-step2.CSV'
  5. f = pd.read_csv(file, encoding='gbk')
  6. f.head()
  7. # 定义 异常点 正常点 的集合
  8. anomalies,normal= [],[]

  9. # 统计高程的信息
  10. f1 = f.describe()
  11. sdata = dict(pd.Series(f1.level, index = list(f1.index)))
  12. print(sdata)

  13. # 求 分位数和上下胡须
  14. Q1, Q3 = sdata['25%'],sdata['75%']
  15. IQR = Q3 - Q1
  16. lower_limit = Q1 - 1.5 * IQR
  17. upper_limit = Q3 + 1.5 * IQR
  18. print("下限:{0:3f} \n上限:{1:3f}".format(lower_limit,upper_limit))
  19. # 下限:203.020000
  20. # 上限:205.960000

  21. # 给出两种异常点,并且获取新的无异常点的数据集合
  22. low_point = f.loc[f['level'] < lower_limit, :]
  23. up_point = f.loc[f['level'] > upper_limit, :]

  24. # 留下正常值啊
  25. norm_data = f.loc[(lower_limit < f['level'] ) & (f['level'] < upper_limit) , :]
  26. # (lower_limit > f['level'] ) + (f['level'] > upper_limit) 这个可以做加和,是我理解的&负号的那种or作用

  27. norm_data.to_csv('S3地下水位高程-step2-去异常值版本.csv')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 14:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表