前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >按照百分比取出数据的去极值方法

按照百分比取出数据的去极值方法

作者头像
用户1075292
发布2019-09-29 10:57:42
1.2K0
发布2019-09-29 10:57:42
举报
文章被收录于专栏:听雨堂听雨堂

去极值的方法,可以用均值加n倍的方差,来过滤,也可以用中位数加上下范围来过滤。如聚宽就提供了winsorize和winsorize_med等方法。

但我总觉得不合心意,第一,这个过程本来就是需要不断调整参数的,最好能够按照一定步长来取数据,逐条显示取出数据的数量,占比,方差等。此外,参数最好指定数据的百分比,用户只要指定百分比,就能够获得相应的数据。基于此,设计了一个函数。

代码语言:javascript
复制
from pandas import Series, DataFrame
from jqfactor import winsorize_med
def data_dist(data,step=0.1,maxstep=1,outratio=0.9): #以中位数为中心,数据的分布
    print("数据分布,以中位数为中心,默认步长0.1,通过step参数指定,max指定最大step,outratio指定输出百分比(0.9)")
    med=data[0].median()
    d=max(data[0].max()-med,med-data[0].min())  #最大幅度
    f=step    
    out=None
    while(f<maxstep):
        d2=data[(data[0]<med+f*d) & (data[0]>med-f*d)]
        print("%.2f %.2f%% %d var:%.2f"%(f,len(d2)*100.0/len(data),len(d2),d2[0].std()/med))
        if len(d2)*1.0/len(data)>=outratio and out is None:
            out=d2.copy(deep=False)
        f+=step
    return out

这个方法融交互和获取数据于一体,可以一边交互测试,一边设定参数,很python!

取广晟有色1000天的成交量分析,看看效果

代码语言:javascript
复制
arr=get_bars("600259.XSHG", count=1000, unit='1d',fields=['date', 'high','low','volume'],end_dt="2018-12-31")
vol=DataFrame(arr["volume"])
o=data_dist(vol,step=0.01,maxstep=0.5,outratio=0.8)
vol.plot()
o.plot()
print("%d"%(vol.median()))
print("%d"%(vol.mean()))
print("%d"%(o.mean()))

把dataframe传递进去就可以了,默认以中位数为中心,中位数到上下限的最大距离为参考,以指定步长为上下界,取出数据。

image
image

可以看出,按80%取出的数据,比原始数据要更加集中,中心点也更加合理

image
image
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档