Python:如何处理大量数据?Scipy还是Rpy?该怎么做?

7
在我的Python环境中,已经安装了Rpy和Scipy包。
我想要解决的问题是:
1)一个大型的财务数据集存储在文本文件中。无法加载到Excel中。
2)我需要对某些字段求和并得到总计。
3)我需要根据总计显示前10行。
哪个包(Scipy还是Rpy)最适合这个任务?
如果是这样,你能提供一些指针(例如文档或在线示例),帮助我实现解决方案吗?
速度是一个问题。理想情况下,Scipy和Rpy可以处理大型文件,即使这些文件非常大,也无法放入内存中。

您可能会在http://www.dabeaz.com/generators-uk/找到一些有用的信息。 - Miki Tebeka
1
在你的情况下,“huge set”确切指什么? - radek
6个回答

5

不需要使用Rpy或Scipy,但使用numpy可能会使问题更容易解决。这个问题似乎非常适合逐行解析器。只需打开文件,读取一行字符串,将该行扫描到一个数组中(参见numpy.fromstring),更新您的运行总和并移动到下一行。


3

Python的文件I/O性能良好,因此您可以直接使用file模块。您可以在交互式解释器中键入help(file)来查看可用的函数。创建文件是核心语言功能的一部分,不需要您导入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))。

2
如@gsk3所指出的,bigmemory是一个非常好的包,连同 biganalyticsbigtabulate 这些包一起使用(还有更多包,但这些值得一试)。 在 R 和 Python 中都支持 HDF5(请参见 R 中的 ncdf4NetCDF4 包),这使得访问磁盘上的大型数据集非常快速和容易。就我个人而言,我主要使用 bigmemory,但那是特定于 R 的。由于 HDF5 在 Python 中可用且非常快,因此在 Python 中它可能是您最好的选择。

2

你的数据有多大?是否超过了电脑的内存?如果可以加载到内存中,你可以使用numpy.loadtxt()将文本数据加载到numpy数组中。例如:

import numpy as np
with file("data.csv", "rb") as f:
   title = f.readline()  # if your data have a title line.
   data = np.loadtxt(f, delimiter=",") # if your data splitted by ","
   print np.sum(data, axis=0)  # sum along 0 axis to get the sum of every column


1

我对Rpy一无所知。但我知道SciPy用于处理真正大型数据集的严肃数值计算,因此它应该适用于您的问题。

正如zephyr所指出的那样,您可能不需要任何一个库;如果您只需要保留一些运行总和,您可能可以在Python中完成。如果它是CSV文件或其他常见文件格式,请检查并查看是否有Python模块可以为您解析它,然后编写一个循环来汇总相应的值。

我不确定如何获取前十行。您能否在进行操作时即时收集它们,还是需要计算总和,然后选择行?如果要收集它们,您可能需要使用字典来跟踪当前的10个最佳行,并使用键来存储您用于排名的度量标准(以便轻松找到并删除另一行,如果另一行取代它)。如果需要在计算完成后找到行,则将所有数据读入numpy.array,或者只需通过文件进行第二次遍历以提取十行即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接