箱线图的几种计算方法比较

一、绘制箱线图所需要的几个指标

q1:下四分位数
q2:中四分位数
q3:上四分位数
上限和下限:由q3和q1计算得出。

二、计算方法

1、“n+1”方法

来源:网络

(1)确定四分位数的位置。Qi所在位置=i(n+1)/4,其中i=1,2,3。n表示序列中包含的项数。
(2)根据位置,计算相应的四分位数	

2、“n-1”方法

来源:网络

(1)确定四分位数的位置。Qi所在位置=i(n-1)/4,其中i=1,2,3。n表示序列中包含的项数。
(2)根据位置,计算相应的四分位数		

3、“np”方法

来源:《概率论与数理统计》(浙大版)

(1)确定四分位数的位置。Qi所在位置np=(i*n)/4,其中i=1,2,3。n表示序列中包含的项数。
(2)如果np不为整数,Qi=X[np+1]
(3)如果np为整数,Qi=(X[np]+X[np+1])/2

三、示例

一组序列数为例:12,15,17,19,20,23,25,28,30,33,34,35,36,37
	方法1:
	Q1所在的位置=(14+1)/4=3.75,
	Q1=0.25×第三项+0.75×第四项=0.25×17+0.75×19=18.5;	
	方法2:
	Q1所在的位置=(14-1)/4=3.25,
	Q1=0.75×第三项+0.25×第四项=0.75×17+0.25×19=17.5;	
	方法3:
	Q1所在的位置=14*0.25=3.5,
	Q1=19.

备注:spss中可能采用的是方法1(因为没有亲身验证过,只是网上有这种说法)。

四、smile简介

Smile (Statistical Machine Intelligence and Learning Engine) 是一个快速、全面的机器学习系统。受益于先进的数据结构与算法,Smile 有最一流的性能。
Smile 覆盖了机器学习的方方面面,包括分类、回归、聚类、关联规则挖掘、特征选取、流形学习(manifold learning,)、多维尺度分析(MDS)、遗传算法、missing value imputation、最邻近搜索等等。

Smile 有提供q1、q3等值的计算方法,但结果与上述有所不同。
仍以上述数据为例:

----------smile method ------------------------
q1==19.0
median==28.0
q3==34.0
----------n+1 method ------------------------
q1==18.5
median==26.5
q3==34.25
----------np method ------------------------
q1==19.0
median==26.5
q3==34.0
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是这几种方法的 Python 代码实现: 1. 使用条件过滤 ```python import pandas as pd # 创建一个示例 DataFrame data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': [100, 200, 300, 400, 500]} df = pd.DataFrame(data) # 筛选出所有大于 3 的数据,并删除或替换 df = df[df['A'] <= 3] ``` 2. 使用统计学方法 ```python import pandas as pd import numpy as np # 创建一个示例 DataFrame data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': [100, 200, 300, 400, 500]} df = pd.DataFrame(data) # 计算 Z 分数并删除或替换超过阈值的数据 z_scores = np.abs((df - df.mean()) / df.std()) df = df[(z_scores < 3).all(axis=1)] ``` 3. 使用箱线图 ```python import pandas as pd import seaborn as sns # 创建一个示例 DataFrame data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': [100, 200, 300, 400, 500]} df = pd.DataFrame(data) # 使用 seaborn 绘制箱线图并删除或替换异常值 sns.boxplot(data=df) q1 = df.quantile(0.25) q3 = df.quantile(0.75) iqr = q3 - q1 df = df[~((df < (q1 - 1.5 * iqr)) | (df > (q3 + 1.5 * iqr))).any(axis=1)] ``` 4. 使用聚类方法 ```python import pandas as pd from sklearn.cluster import KMeans # 创建一个示例 DataFrame data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50], 'C': [100, 200, 300, 400, 500]} df = pd.DataFrame(data) # 使用 KMeans 聚类方法并删除或替换异常值 kmeans = KMeans(n_clusters=2).fit(df) labels = kmeans.labels_ centers = kmeans.cluster_centers_ distances = [np.linalg.norm(x - centers[labels[i]]) for i, x in enumerate(df.values)] df = df[distances < np.percentile(distances, 99)] ``` 以上方法仅供参考,实际应用中需要根据具体数据情况和实际需求选择合适的方法。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值