箱线图代码

# 导入第三方模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 导入数据
sunspots = pd.read_csv(r'merge2.csv',usecols=[3])

u =np.mean(sunspots)   #计算平均值
std =np.std(sunspots)  #计算标准差
print(u,std)



#绘制箱线图(1.5倍的四分位差,如需绘制3倍的四分位差,只需调整whis参数)
plt.boxplot(x = sunspots, # 指定绘制箱线图的数据
         whis = 1.5, # 指定1.5倍的四分位差
         widths = 0.7, # 指定箱线图的宽度为0.8
         patch_artist = True, # 指定需要填充箱体颜色
         showmeans = True, # 指定需要显示均值
         boxprops = {'facecolor':'steelblue'}, # 指定箱体的填充色为铁蓝色
        #指定异常点的填充色、边框色和大小
         flierprops = {'markerfacecolor':'red', 'markeredgecolor':'red', 'markersize':5},
         # 指定均值点的标记符号(菱形)、填充色和大小
        meanprops = {'marker':'D','markerfacecolor':'black', 'markersize':4},
         medianprops = {'linestyle':'--','color':'orange'}, # 指定中位数的标记符号(虚线)和颜色
         labels = [''] # 去除箱线图的x轴刻度值
         )
#显示图形
plt.show()


s=sunspots.describe()
print (s)
print('________')


#寻找异常点

df2 =sunspots.copy()
lst=[]
for col in df2:
    df2_col =df2[col]
    Q1 = df2_col.quantile(q=0.25)
    Q3 = df2_col.quantile(q=0.75)
    iqr = Q3 - Q1
    low_whisker = Q1 - 1.5 * (Q3 - Q1)
    up_whisker = Q3 + 1.5 * (Q3 - Q1)
    error=df2_col[(df2_col < low_whisker)|(df2_col >up_whisker )]
    lst.append(error)
    err_data= pd.concat(lst)
print('一共检测到异常数据共:%i'%len(err_data))
print('展示异常数据前20条:',err_data.head(20))


# 处理异常值 → 替换为NaN,并以插值方法处理

Q1 = df2_col.quantile(q=0.25)
Q3 = df2_col.quantile(q=0.75)
iqr = Q3 - Q1
low_whisker = Q1 - 1.5 * (Q3 - Q1)
up_whisker = Q3 + 1.5 * (Q3 - Q1)
data_nor=df2_col[(df2_col >=low_whisker)& (df2_col <=up_whisker )]# 将正常的数据按数据框形式筛选出来,返回一个已用NaN替换掉异常值
data_nor.isna().sum()
data_nor.isna().sum().sum()

# print (data_nor)
# 插值处理NaN
data_clean = data_nor.fillna(data_nor.mean())
data_clean.isna().sum()  # 确认缺失值已处理
print (data_clean)
data_clean.to_csv("merge6.csv",index=False,encoding="utf_8_sig")
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值