Python:处理大量数据,使用Scipy还是Rpy?如何操作?
在我的Python环境中,已经安装了Rpy和Scipy这两个包。
我想解决的问题是这样的:
1) 有一大堆金融数据存储在一个文本文件里,无法直接加载到Excel中。
2) 我需要对某些字段进行求和,得到总数。
3) 我需要根据总数显示前10行数据。
请问这两个包(Scipy或Rpy)哪个更适合这个任务呢?
如果可以的话,能给我一些建议吗?比如文档或者在线示例,这样我可以更好地实现解决方案。
速度也是一个问题。理想情况下,Scipy和Rpy能够处理这些大文件,即使文件大到无法完全放入内存中。
6 个回答
Python的文件输入输出性能其实不错,所以你可以直接使用file
模块。想知道里面有哪些可用的功能,可以在交互式解释器里输入help(file)
来查看。创建文件是Python的基本功能之一,不需要你去import file
。
比如说:
f = open ("C:\BigScaryFinancialData.txt", "r");
for line in f.readlines():
#line is a string type
#do whatever you want to do on a per-line basis here, for example:
print len(line)
需要说明的是:这段内容是针对Python 2的,我不太确定在Python 3中是否适用。
至于如何显示前10行和计算每行的总和,就留给你自己去搞定吧。这可以通过简单的程序逻辑实现,不需要任何特别的库。当然,如果行的数据格式比较复杂,导致你难以提取出值,那你可能需要用到某种解析模块,比如re
(在交互式解释器里输入help(re)
可以了解更多)。
其实用不上Rpy或Scipy,不过用numpy可能会让事情简单一些。这个问题很适合用逐行解析的方法来解决。你只需要打开文件,把每一行读成一个字符串,然后把这一行的内容扫描成一个数组(可以参考numpy.fromstring),更新你的累加和,然后再处理下一行就行了。
正如@gsk3提到的,bigmemory
是一个很棒的工具,适合处理大数据,还有biganalytics
和bigtabulate
这几个包(还有其他的,但这几个值得一试)。另外还有ff
,不过那个用起来没那么简单。
R和Python都有支持HDF5的功能(在R中可以看看ncdf4
或NetCDF4
这两个包),这让我们可以快速且方便地访问存储在硬盘上的大数据集。就我个人而言,我主要使用bigmemory
,不过那是专门为R设计的。由于HDF5在Python中也可以使用,而且速度非常快,所以在Python中使用它可能是你最好的选择。