按照百分比取出資料的去極值方法

2022-04-03 19:54:53 字數 1518 閱讀 9303

去極值的方法,可以用均值加n倍的方差,來過濾,也可以用中位數加上下範圍來過濾。如聚寬就提供了winsorize和winsorize_med等方法。

但我總覺得不合心意,第一,這個過程本來就是需要不斷調整引數的,最好能夠按照一定步長來取資料,逐條顯示取出資料的數量,佔比,方差等。此外,引數最好指定資料的百分比,使用者只要指定百分比,就能夠獲得相應的資料。基於此,設計了乙個函式。

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(fdata[(data[0]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天的成交量分析,看看效果

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傳遞進去就可以了,預設以中位數為中心,中位數到上下限的最大距離為參考,以指定步長為上下界,取出資料。

可以看出,按80%取出的資料,比原始資料要更加集中,中心點也更加合理

百分比布局的使用

今天有時間搗鼓了一下這個東西,和大家分享一下。官方提供的包裡,關於百分比布局有兩個,如下 就是percentframelayout和percentrelativelayout,我們今天就來說說這兩個百分比布局的使用吧。本文demo使用android studio來完成,所以直接在gradle檔案中新...

Android百分比布局的使用

不經意見發現android支援百分比布局了,使用android percent support這個庫就可以做到了。內心是竊喜的,這樣好多布局就變得簡單多了。這個庫提供了 percentrelativelayout percentframelayout,通過名字就可以看出,這是繼承自framelayo...

百分比布局中的居中

百分比布局 垂直 水平居中的幾種方法 1.以em rem設定寬度和高度 父級設定 width 5rem height 5rem text align center 子集設定 line height 5rem 2.利用trunsform 父級設定 width 5rem height 5rem posi...