您现在的位置是:主页 > news > 动态网站建设在线测试/国通快速建站

动态网站建设在线测试/国通快速建站

admin2025/5/21 3:28:45news

简介动态网站建设在线测试,国通快速建站,上海建设工程服务交易网,网站后台在哪里pyspark系列文章是本人根据《PySpark实战指南》学习pyspark中学习笔记,这本书是一本译文,有些地方感觉有点小问题,不过在本人的这些笔记中都是亲自测试跑通后的小例子。仅作参考和学习。 在做数据分析等时候,时长会碰到与样本其余…

动态网站建设在线测试,国通快速建站,上海建设工程服务交易网,网站后台在哪里pyspark系列文章是本人根据《PySpark实战指南》学习pyspark中学习笔记,这本书是一本译文,有些地方感觉有点小问题,不过在本人的这些笔记中都是亲自测试跑通后的小例子。仅作参考和学习。 在做数据分析等时候,时长会碰到与样本其余…

pyspark系列文章是本人根据《PySpark实战指南》学习pyspark中学习笔记,这本书是一本译文,有些地方感觉有点小问题,不过在本人的这些笔记中都是亲自测试跑通后的小例子。仅作参考和学习。

在做数据分析等时候,时长会碰到与样本其余数据的分布有显著偏离的数据,这种数据被称为离群值。在普遍的形式中,如果所有的值大致在Q1-1.5IQR和Q3+1.5IQR范围内(IQR指的是四分位范围,定义为上分位与下分位之差,分别为第75个百分位(Q3)和第25个百分位(Q1)),则可以认为没有离群值。

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("dataDeal").getOrCreate()
df_outliers = spark.createDataFrame([
(1, 143.5, 5.3, 28),
(2, 154.2, 5.5, 45),
(3, 342.3, 5.1, 99),
(4, 144.5, 5.5, 33),
(5, 133.2, 5.4, 54),
(6, 124.1, 5.1, 21),
(7, 129.2, 5.3, 42),
], ['id', 'weight', 'height', 'age'])

 

 

现在我们可以根据之前的定义来标记离群值。首先计算每个特征的上下截断点。使用.approxQuantile()方法,它的第一个参数指定的是列名,第二个参数可以是0或1之间的一个数(其中0.5是指计算的中位数)或者一个列表,第单个参数指定每个度量的一个可接受的误差范围(如果设置为0,就会计算一个度量的精确值,但是这么做代价会很大)

cols = ['weight','height','age']
bounds = {}
for col in cols:
quantiles = df_outliers.approxQuantile(col,[0.25,0.75],0.05)
IQR = quantiles[1] - quantiles[0]
bounds[col] = [
quantiles[0] - 1.5*IQR,
quantiles[1] + 1.5*IQR
]
print bounds

 

{'age': [-11.0, 93.0],
'weight': [91.69999999999999, 191.7],
'height': [4.499999999999999, 6.1000000000000005]}

 

 
 

现在用它来标记离群值:

#标记离群值
outliers = df_outliers.select(*['id']+[(
(df_outliers[c] < bounds[c][0]) |
(df_outliers[c]>bounds[c][1])
).alias(c+'_o') for c in cols
])
outliers.show()

+---+--------+--------+-----+
| id|weight_o|height_o|age_o|
+---+--------+--------+-----+
| 1| false| false|false|
| 2| false| false|false|
| 3| true| false| true|
| 4| false| false|false|
| 5| false| false|false|
| 6| false| false|false|
| 7| false| false|false|
+---+--------+--------+-----+

 
 

由结果可知,在weight中有一个离群值,在age中有一个离群值。现在,我们已经完成了离群值的提取。下面列出了和其他数据分不明显不同的值:

#列出和其他数据分布明显不同的值
df_outliers = df_outliers.join(outliers,on='id')
df_outliers.filter('weight_o').select('id','weight').show()
df_outliers.filter('age_o').select('id','age').show()

+---+------+
| id|weight|
+---+------+
| 3| 342.3|
+---+------+
+---+---+
| id|age|
+---+---+
| 3| 99|
+---+---+

对得到的离群值,需要做怎样的处理就需要根据需求而定了