为了删除离群值,我们需要首先定义什么是离群值。一般来说,我们可以把一组数的平均值加上/减去两到三个标准差作为正常值的范围, 超出这个范围的就可以认为是异常值。
那么下面就是一组基于Python的删除离群值操作的攻略:
离群值的检测
我们可以借助三个方法来检测离群值:
1. 计算IQR(四分位间距)
IQR = Q3 - Q1
其中Q3是数据上四分位数,Q1是数据下四分位数。具体实现如下:
# 计算IQR(四分位间距)
Q1 = df['col_name'].quantile(0.25)
Q3 = df['col_name'].quantile(0.75)
IQR = Q3 - Q1
2. 确定高/低端离群值的范围
高端离群值的范围:Q3 + 1.5 * IQR
低端离群值的范围:Q1 - 1.5 * IQR
3. 离群值检测
我们可以将高端离群值范围以上和低端离群值范围以下的数据判断为离群值。即:
# 离群值检测
outliers = df[(df['col_name'] < Q1 - 1.5 * IQR) | (df['col_name'] > Q3 + 1.5 * IQR)]
对于上述代码,我们可以适用于每一行是一类数据的情况。需要指定'df'为数据来源。
离群值的删除
当我们检测到离群值时,可以采取两种方法来删除它们:
1. 删除离群值
df.drop(outliers.index,inplace=True)
其中,outliers是我们要删除的离群值所在的行(部分行)。
2. 替换离群值
我们可以将离群值替换为中位数或平均数来修正它们,代码如下:
df['col_name'][outliers.index] = df['col_name'].median()
这里我们将离群值设为中位数。
示例
基于如上攻略,在以下情景中,我们可以实现删除离群值:
1. 商品价格数据
我们有一个商品价格数据的表格,其中有价格异常的物品,我们需要删除这些物品的信息。数据如下:
+--------+--------+--------+
| item_1 | item_2 | item_3 |
+--------+--------+--------+
| 10 | 20 | 150 |
| 15 | 25 | 100 |
| 30 | 35 | 200 |
| 35 | 40 | 250 |
| 50 | 60 | 300 |
| 5 | 30 | 120 |
+--------+--------+--------+
首先我们需要使用IQR方法检测数据中的离群值:
# 计算IQR(四分位间距)
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
# 确定高/低端离群值的范围
outlier_range = [(Q1 - 1.5 * IQR), (Q3 + 1.5 * IQR)]
# 离群值检测
outlier_rows = df[((df < outlier_range[0]) | (df > outlier_range[1])).any(axis=1)]
# 删除离群值
df.drop(outlier_rows.index, inplace=True)
这样我们就可以删除掉价格异常的商品信息。
2. 客户消费数据
我们有一批客户消费数据,其中有消费金额较高的客户,我们考虑将它们删除或者进行其他修正。数据如下:
+---------+---------+---------+
| client_1| client_2| client_3|
+---------+---------+---------+
| 500 | 100 | 1500 |
| 1500 | 200 | 2000 |
| 3000 | 1000 | 2500 |
| 3500 | 2000 | 3000 |
| 5000 | 6000 | 4000 |
| 50 | 300 | 1200 |
+---------+---------+---------+
对于以上数据,我们采取替换离群值的方法进行修正:
# 计算IQR(四分位间距)
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
# 确定高/低端离群值的范围
outlier_range = [(Q1 - 1.5 * IQR), (Q3 + 1.5 * IQR)]
# 替换离群值为中位数
df[(df < outlier_range[0]) | (df > outlier_range[1])] = df.median()
这样我们就可以修正前三个客户的金额并将其余离群值删除。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python:删除离群值操作(每一行为一类数据) - Python技术站