You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在DolphinDB中批量计算数千只股票的两两相关性

如何在DolphinDB中批量计算数千只股票的两两相关性

我来帮你搞定这个问题!DolphinDB针对金融场景的批量数据计算做了大量优化,处理数千只股票的两两相关性完全不在话下,而且性能比Python要高出不少——毕竟它的核心计算逻辑都是C++实现的,还支持分布式横向扩展。我会对照你给出的Python代码,一步步实现等价逻辑,同时针对大规模数据场景给出优化方案。

第一步:模拟等价测试数据

先按照你Python代码的逻辑,在DolphinDB里生成相同规则的测试数据(设置相同随机种子,保证结果可比):

// 设置随机种子,和Python的np.random.seed(0)对应
setRandomSeed(0)
// 生成100天的日期序列,和pd.date_range匹配
dates = dateRange(2021.01.01, 2021.01.01 + 99, 1d)
// 股票列表
tickers = ["AAPL", "MSFT", "GOOGL", "AMZN", "META"]
// 生成随机日收益率数据,和Python的np.random.randn(100,5)/100逻辑一致
nDays = size(dates)
nStocks = size(tickers)
returns = randn(nDays * nStocks) / 100
// 构造金融数据常用的长表结构(日期、股票代码、收益率)
rawTable = table(dates as date, take(tickers, nDays) as ticker, returns as return)

第二步:计算两两相关性矩阵

DolphinDB提供了专门的corrMatrix函数来计算矩阵的两两相关性,效率极高。我们可以先把长表转成和Python中类似的宽表(日期为行、股票为列),再调用函数计算:

// 将长表转置为宽表(和你的Python DataFrame结构一致)
wideTable = pivot(rawTable, date, ticker, return)
// 计算相关性矩阵,指定要计算的股票列
correlationMatrix = corrMatrix(wideTable[`AAPL`MSFT`GOOGL`AMZN`META])
// 查看结果
show correlationMatrix

针对数千只股票的大规模优化方案

如果你的股票数量真的达到数千只,甚至上万只,直接在单节点内存处理可能会有压力,这时候可以利用DolphinDB的分布式特性:

  1. 分布式存储:先把数据存储到分布式数据库中,按日期或股票分区:
    // 创建按日期分区的分布式数据库
    db = database("dfs://stockReturnDB", VALUE, dates)
    // 创建分布式表并写入数据
    distTable = db.createTable(rawTable, `stockReturns)
    distTable.append!(rawTable)
    
  2. 分布式计算:直接从分布式表加载数据并计算,DolphinDB会自动分配计算任务到各个节点:
    // 从分布式表加载全量数据转宽表(内存足够时)
    wideDistTable = pivot(loadTable("dfs://stockReturnDB", "stockReturns"), date, ticker, return)
    // 分布式环境下计算相关性矩阵,自动并行加速
    distCorrMatrix = corrMatrix(wideDistTable)
    

关键注意点

  • DolphinDB的corrMatrix函数默认使用皮尔逊相关系数,和Python的df.corr()默认逻辑完全一致;
  • 如果内存不足以容纳全量宽表,可以考虑分批次计算或者使用DolphinDB的矩阵分块计算能力;
  • 对于超大规模数据,DolphinDB还支持通过mapReduce自定义相关性计算逻辑,进一步优化资源占用。

内容来源于stack exchange

火山引擎 最新活动