我根据股票代码的初始值,使用范围分区策略对数据进行分区,导致分区结果不均匀。如何解决不均衡的问题?
我需要根据两个维度对股票的出价数据进行分区:日期和股票代码。如果我只根据股票代码的Initial进行范围划分,因为很少有股票以"U,V,X,Y,Z"开头,数据分布可能不均匀。如何解决这个问题?
数据分布不需要完美分布。。。你这样做的传播是什么。。。你是否有可以被认为过于集中的"热点"?或者只有几个分区是空的?
为了便于根据数据分布进行分区,DolphinDB提供了函数cutPoints(X,N,[freq](。这里X是一个数组,N表示需要生成多少组,freq是X的等长数组,其中每个元素对应于X中元素的频率。函数返回一个包含(N+1(个元素的数组,表示N组,这样X中的数据就均匀地分布在这N组中。在下面的示例中,您需要根据日期和股票报价这两个维度对股票报价数据进行分区。如果你简单地用股票的第一个字母来划分范围,很容易导致数据分布不均匀,因为极少数的股票刻度以U、V、X、Y、Z和其他字母开头。在这里,我们使用cutPoints函数根据2007.08.01当天的数据将股票分为128个分区,每个分区包含当天相同数量的记录:
t = ploadText(WORK_DIR+"/TAQ20070801.csv")
t=select count(*) as ct from t where date=2007.08.01 group by sym
bolbuckets = cutPoints(t.symbol, 128, t.ct)
dateDomain = database("", VALUE, 2017.07.01..2018.06.30)
symDomain = database("", RANGE, buckets)
stockDB = database("dfs://stockDBTest", COMPO, [dateDomain, symDomain])