代码之家  ›  专栏  ›  技术社区  ›  RSW

Python-检查序列中的最后一个值是否相对高于其余值

  •  0
  • RSW  · 技术社区  · 11 月前

    对于百分比数据列表,我需要检查最后一个值是否( 90.2 )是 不知何故更高 有点“异常” 比其他数据。显然,它是按这个顺序排列的。

    delivery_pct = [59.45, 55.2, 54.16, 66.57, 68.62, 64.19, 60.57, 44.12, 71.52, 90.2]

    但对于以下序列,最后一个值并非如此:

    delivery_pct = [ 63.6, 62.64, 60.36, 72.8, 70.86, 40.51, 52.06, 61.47, 51.55, 74.03 ]

    如何检查最后一个值是否异常高于其余值?

    关于数据 : 数据点的范围在0-100%之间。但由于这是过去10天股票交割的百分比,因此通常会根据股票的性质(交易量大与交易频率低)进行区间限制,除非股票发生了好事,并且预计当天会有更高的交割量。

    1 回复  |  直到 11 月前
        1
  •  0
  •   ti7    11 月前

    你可以通过切片来分离值,但你需要知道什么是“异常”的方法

    例如,将其与简单平均值进行比较

    def test(data):
        # opportunity to verify length
        earlier = data[:-1]
        last = data[-1]
        avg = sum(earlier) / len(earlier)  # exchange as needed
        return last > avg
    

    注意:我怀疑这个简单的比较是否足够,因为它在你的例子中失败了

    这个 builtin statistics library 有各种有用的方法

    NIST“div898”教科书也是学习这一领域的绝佳资源 https://www.itl.nist.gov/div898/handbook/

    或者,如果这是一个家庭作业问题,你可能会学习和/或明确给出一种处理数据的方法

        2
  •  0
  •   SIGHUP    11 月前

    一旦你确定了一个阈值(与平均值的偏差),你就可以这样做:

    import statistics
    
    t = 2 # this is the crucial value
    
    pct = [59.45, 55.2, 54.16, 66.57, 68.62, 64.19, 60.57, 44.12, 71.52, 90.2]
    
    mean = statistics.mean(pct)
    tsd = statistics.pstdev(pct) * t
    
    lo = mean - tsd
    hi = mean + tsd
    
    print(*[x for x in pct if x < lo or x > hi], sep="\n")
    

    输出:

    90.2
    

    阈值(有效地)决定了什么是“异常”