我正在寻找一种使用Spark检查数据是否向左或向右倾斜的方法。以下示例给出了相同的偏斜度统计信息。
>>> from pyspark.sql import functions as f
>>> val1 = [('2018-01-01',20),('2018-02-01',100),('2018-03-01',50),('2018-04-01',0),('2018-05-01',0),('2018-06-01',0),('2018-07-01',0),('2018-08-01',0),('2018-09-01',0)]
>>> val2 = [('2018-01-01',0),('2018-02-01',0),('2018-03-01',0),('2018-04-01',0),('2018-05-01',0),('2018-06-01',0),('2018-07-01',20),('2018-08-01',100),('2018-09-01',50)]
>>> columns = ['date','value']
>>> val1_df = spark.createDataFrame(val1, columns)
>>> val1_df.agg(f.skewness("value")).show()
+-----------------+
| skewness(value)|
+-----------------+
|1.646145420937772|
+-----------------+
>>> val2_df = spark.createDataFrame(val2, columns)
>>> val2_df.agg(f.skewness("value")).show()
+------------------+
| skewness(value)|
+------------------+
|1.6461454209377715|
+------------------+
是否有任何方法可以根据spark中的“日期”列获得正偏度或负偏度?
答案 0 :(得分:0)
这两个向量具有相同的分布,因此您的偏斜将是相同的
from scipy.stats import skew
val1 = [20,100,50,0,0,0,0,0,0]
skew(val1)
Out[6]: 1.646145420937772
val2 = [0,0,0,0,0,0,50,100,20]
skew(val2)
Out[7]: 1.646145420937772
如果将第二个矢量中的零替换为100,则分布将向左倾斜
val2 = [100,100,100,100,100,100,50,100,20]
skew(val2)
Out[9]: -1.5578824286327273
在pyspark中
from pyspark.sql import functions as f
val1 = [(20,100),(100,100),(50,100),(0,100),(0,100),(0,0),(0,50),(0,100),(0,20)]
cols = ['val1','val2']
df = spark.createDataFrame(val1, cols)
display(df.select(f.skewness(df['val1']),f.skewness(df['val2'])))
skewness(val1) | skewness(val2)
1.6461454209377713 |-0.9860224906700872
答案 1 :(得分:0)
偏斜度是一个统计矩,它是一种定量的方法,可以确定分布是正偏还是负偏以及偏斜多少。这是单变量方法。 有多种偏度和峰度,但其更为复杂 Check this out
您要的是对分布的定性分析。 对于多变量分析,可以使用卡方检验或Royston H检验。 或者,您可以只存储有关日期的值并直观地查看它。
如果要获得分析结果,可以按日期对值进行存储,按降序对值进行排序,然后找出前3个或4个存储值中前3个或4个日期。您可以通过定义QTR查找表并将其进行比较来找出日期属于哪个季度。这将使您了解是在年底还是在年初。 如果最重要的日期到处都是,那么分布很可能与日期无关。
答案 2 :(得分:0)
计算平均值和中位数。
当均值大于中位数时,存在正或右偏分布; 当均值,中位数和众数相同时,存在正态分布(钟形曲线); 当均值低于中位数时,则为负或左偏分布。