【问题标题】:Measure negative/positive skewness of a dataframe测量数据帧的负/正偏度
【发布时间】:2019-04-05 08:02:10
【问题描述】:

我正在寻找一种方法来检查数据是否使用 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中的“日期”列获得正偏度或负偏度?

【问题讨论】:

    标签: python apache-spark pyspark data-science


    【解决方案1】:

    这两个向量具有相同的分布,因此您的偏斜将是相同的

    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
    

    【讨论】:

    • 我想根据日期列获取偏度。很抱歉所做的更改。
    • 根据日期列是什么意思?
    • 我的意思是,将“日期”视为 x 轴。然后我想定义一个特征,无论值是否偏向年底。谢谢
    • 将日期转换为纪元,然后得到偏度,假设只有一年。如果是多年,那么您需要先按年分组,然后再得到组内的偏度
    【解决方案2】:

    偏度是一个统计时刻,它是一种定量方法,用于确定分布是正偏还是负偏以及偏斜的程度。这是一种单变量方法。 存在多变量偏度和峰度,但更复杂 Check this out

    您要求的是对分布的定性分析。 对于多变量分析,您可以使用卡方检验或 Royston 的 H 检验。 或者您可以只存储与日期相关的值并直观地查看它。

    如果您想要一个分析结果,您可以按日期对值进行存储,按值降序排序,并找出哪些 3 或 4 个日期具有前 3 或 4 个存储值。您可以通过定义 QTR 查找表并与之进行比较来找出日期属于哪个季度。这会让你知道是到年底还是年初。 如果排名靠前的日期到处都是,那么分布很可能与日期无关。

    【讨论】:

      【解决方案3】:

      计算平均值和中位数。

      当均值大于中位数时,存在正或右偏分布; 当均值、中位数和众数相同时,存在正态分布(钟形曲线); 当均值低于中位数时,存在负或左偏分布。

      【讨论】:

        猜你喜欢
        • 2021-07-18
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多