Quant 如何运算百万行的数据?

标签: quant 运算 百万行 | 发表时间:2013-02-03 01:11 | 作者:袁浩瀚
出处:http://www.zhihu.com/rss
其实这是一个数据库部署和算法优化的问题,只是您的提问方式把它封装成了一个看似Quant的问题。类似的困境在很多其它领域也有。我这里把你的问题梳理一下,然后变成一个纯计算机问题,并提出我自己的解决方案。同时我相信在我梳理后,知乎上更多的数据处理大牛可以来拓展思路。

我自己曾经接触过的最大的一个数据是1986年1月1号到2011年12月31号的美国三大市场(NYSE,NASDAQ及AMEX)中所有股票的每日收盘数据,总共有48,796,680条记录,裸数据大小在2.5GB左右。数据从Wharton Research Data Stream (WRDS)获得,最开始的格式是CSV。

我当时的研究要对每个月的所有股票进行因子分析(Factor Analysis)来验证几个假设,最开始我打算使用R来做,因为一般小规模数据R做起来很方便,R你不熟悉没有关系,你可以理解为运算速度和编程思想类似Matlab的一个统计专用语言。很快我发现把这些数据全部读取进来就要花费巨量的时间,更不要说一个月一个月的运算了。当时手头有别的事情,因此我暂缓了这个研究。

后来有一天跟原来在Lehman Brother做Quant的一个朋友聊天,说到这个挑战,他建议我用MySQL来部署,然后通过数据库查询来加速特定月、特定公司的数据抓取。我当时豁然开朗,之前我使用数据库很多,但是由于大部分时间研究工作不用这么大数据,所以完全没有往这方面考虑。另一个原因是写数据库级别的研究代码要比纯R+CSV或者Matlab+CSV/Mat麻烦很多,我心理上回避这种思路。

之后老板催得急,我就开始具体化了,最后我使用Python+NumPy+SciPy+SQLite的架构,然后对SQLite进行了大量的索引、缓存等优化,最后使得整个code可以在10个小时内跑完。但是代价就是,我需要自己写程序计算线性回归的R Square、t-Stat等在Matlab、R中非常容易实现的任务。最终Python代码有2000行左右。

这个研究结束后,我又思考了很久这个问题,我觉得有两个补充的思路:
第一、分解数据:需要根据具体情况分析,比如我的研究,其实可以把大CSV原始数据拆解成每年每个月的(以yyyyMM.csv的格式储存),那子文件的数据量就可以降一到两个数量级,这样就可以用Matlab来处理,同时也间接完成了索引的工作。

第二、如果数据实在是非常巨型(100GB+),我建议采用非关系型数据库(MonoDB等)来处理。如果你有兴趣,可以看伯克利今年开的一门公开课:Big Data,来进一步学习:
UC Berkeley Course Lectures: Analyzing Big Data With Twitter

另外,说到专门的处理大型数据的软件,如果你要自己编程的操作性强,我觉得Q语言是一个,Morgan Stanley内部都是用Q来处理大型数据的研究问题,速度非常快。但是我觉得国内用的人应该很少,你要查中文资料应该也不方便,仅供参考。

— 完 —
本文作者: 袁浩瀚

知乎是一个真实网络问答社区,在这里可以寻找答案、分享知识,发现一个更大的世界。
下载知乎 iPhone 客户端: http://zhi.hu/ios
此问题还有 2 个回答,查看全部。
延伸阅读:
Web 数据挖掘如何入门?
什么叫做「无偏见数据挖掘」?

相关 [quant 运算 百万行] 推荐:

Quant 如何运算百万行的数据?

- - 知乎每日精选
其实这是一个数据库部署和算法优化的问题,只是您的提问方式把它封装成了一个看似Quant的问题. 我这里把你的问题梳理一下,然后变成一个纯计算机问题,并提出我自己的解决方案. 同时我相信在我梳理后,知乎上更多的数据处理大牛可以来拓展思路. 我自己曾经接触过的最大的一个数据是1986年1月1号到2011年12月31号的美国三大市场(NYSE,NASDAQ及AMEX)中所有股票的每日收盘数据,总共有48,796,680条记录,裸数据大小在2.5GB左右.

Quant 对 python 的需求高吗?对于 Quant 来说除了 C++ 还有其他比较流行的编程语言吗?

- - 知乎每日精选
很抱歉这个问题我三天前有看到,当时欲答又止,因为我发现我可以两行答完这个问题: 1、高. 2、还有:Python, Java, Matlab, R, Q和某些公司内部自有语言(如高盛的自有语言). 但是我不希望敷衍了事,如果回答就展开了说,说说我心中最重要的五类语言. 这不仅仅是对于一个Quant必须的,而是一个丰满的程序员所必备的.

四则混合运算,java实现

- - ITeye博客
package com.interview.prepare; /* * 四则运算,没有括号,数字均小于零,其中中间运算过程取整. * 首先将运算时转换为逆波兰式(后缀式) * 然后通过一个栈辅助运算. 当信息为数字时入栈,当信息为符号时~(~代表+-* / * 一种),出栈并 * 做运算top2~top1 * 测试用例 3+8*2/9-2 结果输出2 * */ import java.util.ArrayList; import java.util.List; import java.util.Stack; public class Compute {.

使用BigDecimal进行精确运算

- - CSDN博客推荐文章
          首先我们先来看如下代码示例:.           运行结果如下.          你认为你看错了,但结果却是是这样的. 原因在于我们的计算机是二进制的. 浮点数没有办法是用二进制进行精确表示. 我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差.

注意PHP对字符串的递增运算

- Sam - 风雪之隅
作者: laruence(http://www.laruence.com). 本文地址: http://www.laruence.com/2010/07/30/1682.html. 其实很简单, PHP的手册中也有说明, 只不过恐怕很多人不会一章一节的把手册仔细阅读一遍:. For example, in Perl ‘Z’+1 turns into ‘AA’, while in C ‘Z’+1 turns into ‘[‘ ( ord(‘Z’) == 90, ord(‘[‘) == 91 ).

研究称GPU运算让复杂密码毫无作用

- 约翰 - cnBeta.COM
Vijay Devakumar的密码研究结果发现,有了现代图形卡,复杂的密码变的没有意义,例如用IGHASHGPU工具可以轻松用Radeon HD 5770打破NTLM加密的密码从而突破Windows网络,9字的复杂密码可以从43年缩减到48天,随机5位数密码可以在24秒内轻松打破.

Google 搜索“site:”运算符高级使用技巧

- - 谷奥——探寻谷歌的奥秘
稍微高级点的Google粉丝一定都知道“site:”这个搜索运算符,它可以让你限制Google只搜索固定域里的内容,比如搜索“ site:guao.hk 作恶”即可得到所有谷奥网站里包含“作恶”二字的内容. 实际上关于“site:”搜索运算符还有好多不为人知的小技巧,今天就跟大家分享一下. 搜索“maps.*.com”可得到所有以maps.xxx.com作为域的网站内容,不过可惜的是Google不会给你全部匹配的结果,只有一部分.

SQL Server调优系列基础篇(并行运算总结)

- - 极客521 | 极客521
上三篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符、联合运算符的优化技巧. 本篇我们分析SQL Server的并行运算,作为多核计算机盛行的今天,SQL Server也会适时调整自己的查询计划,来适应硬件资源的扩展,充分利用硬件资源,最大限度的提高性能. 闲言少叙,直接进入本篇的正题.

SQL Server调优系列基础篇(常用运算符总结)

- - 极客521 | 极客521
上一篇我们介绍了如何查看查询计划,本篇将介绍在我们查看的查询计划时的分析技巧,以及几种我们常用的运算符优化技巧,同样侧重基础知识的掌握. 通过本篇可以了解我们平常所写的T-SQL语句,在SQL Server数据库系统中是如何分解执行的,数据结果如何通过各个运算符组织形成的. 基于SQL Server2008R2版本,利用微软的一个更简洁的案例库(Northwind)进行解析.

基于glusterfs和gearman的离线任务运算分布式化方案介绍

- - 搜索研发部官方博客
web站点服务中,我们除了存在面向用户的服务功能外,往往也存在大量的后台离线的相关计算任务,如对前端的异步操作数据队列进行定期处理,对数据库中的数据进行汇总挖掘,监控,转储,对中间数据的进一步运算处理等等……一个web服务站点的背后,往往存在大量对应的后端处理任务的功能模块,用于支撑正常的业务功能系统.