按股票的首字母进行范围分区,数据分布不均匀怎么办?

现在需要对股票的报价数据按日期和股票代码两个维度做数据分区。如果简单的按股票的首字母进行范围分区,极易造成数据分布不均,因为极少量的股票代码以U, V, X,Y,Z等字母开头。请问应该如何解决这个问题?

请先 登录 后评论

1 个回答

Jax Wu

为了方便根据数据的分布进行分区,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 symbol
buckets = 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])
请先 登录 后评论