V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sdushn
V2EX  ›  Python

是否有合适的 Python 库实现一组采样数据的尖峰检测呢

  •  
  •   sdushn · 2021-03-11 14:22:52 +08:00 · 2671 次点击
    这是一个创建于 1360 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一组采样数据,横轴时间,绘制出来一张图,希望能标识出图中的尖峰,对“尖峰”没有量化定义,目前是两种,一是某一个时间点的激增,二是某一段时间的激增;从图上看就是突然某一个点比前后都高很多,或者是平滑处理后的包络图,某会有类似二次函数的突起。
    这两种 尖峰能否使用现有的库,通过分析数据进行标注呢,确定出现尖峰的时间段即可

    第 1 条附言  ·  2021-03-12 10:53:57 +08:00
    感谢各位大佬们的建议,目前采用了 peakutils,有相关需求的旁友们可以看看
    https://bitbucket.org/lucashnegri/peakutils/src/master/
    15 条回复    2021-03-14 20:40:58 +08:00
    liprais
        1
    liprais  
       2021-03-11 14:23:58 +08:00
    异常值检测呗
    lixuda
        2
    lixuda  
       2021-03-11 14:36:03 +08:00
    sklearn 库看看,有个异常检查。
    Wincer
        3
    Wincer  
       2021-03-11 14:50:14 +08:00
    mark 一下,楼主有方案了麻烦告知一下,我最近也有类似的需求。目前尝试了 PCA,但是效果不是很理想。
    guyskk0x0
        4
    guyskk0x0  
       2021-03-11 14:59:39 +08:00 via Android
    Facebook Prophet
    learningman
        5
    learningman  
       2021-03-11 15:14:29 +08:00
    你先用数学把“尖峰”定义好,然后翻译成代码就行了
    no1xsyzy
        6
    no1xsyzy  
       2021-03-11 15:20:07 +08:00
    话说传统上异常值检测有:在回归时,添加某一个值会使得 r 值突然降低。
    imn1
        7
    imn1  
       2021-03-11 15:24:56 +08:00
    第一个想到应用场合是证券的放量
    我目前的做法是设定斜率临界点,前后两点拉直线的斜率,但不太满意
    此帖我会回看
    sdushn
        8
    sdushn  
    OP
       2021-03-11 15:42:27 +08:00
    @learningman emm,其实就是这个尖峰的数学定义没有讨论出很好的定义
    superrichman
        9
    superrichman  
       2021-03-11 15:50:40 +08:00 via iPhone
    我是通过计算 z-score 来找 outlier,有一定局限性
    看看有其它好方法没
    Macv1994
        10
    Macv1994  
       2021-03-11 16:23:47 +08:00 via Android
    在上一家公司做过,我记得 numpy 还是 scipy 中有一个函数可以直接做尖峰检测
    hasasiki
        11
    hasasiki  
       2021-03-11 16:31:30 +08:00
    现有库不太清楚,不过可以试试直接找到所有峰值,然后再按自己需求筛选,找峰值的算法就很多了
    Vectors
        12
    Vectors  
       2021-03-11 17:21:24 +08:00
    yesterdaysun
        13
    yesterdaysun  
       2021-03-12 10:31:17 +08:00
    之前用过 peakutils
    sdushn
        14
    sdushn  
    OP
       2021-03-12 10:52:48 +08:00
    @yesterdaysun 好用的,我目前也是采用了这个方案
    necomancer
        15
    necomancer  
       2021-03-14 20:40:58 +08:00
    https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html

    一般这些算法都是基于小波变换,看看原理很简单的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2469 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:18 · PVG 10:18 · LAX 18:18 · JFK 21:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.