【问题标题】:Python: handling a large set of data. Scipy or Rpy? And how?Python:处理大量数据。 Scipy 还是 Rpy?如何?
【发布时间】:2011-07-28 03:53:40
【问题描述】:

在我的 python 环境中,已经安装了 Rpy 和 Scipy 包。

我要解决的问题是这样的:

1) 大量财务数据存储在一个文本文件中。无法加载到 Excel 中

2) 我需要对某些字段求和并得到总数。

3) 我需要根据总数显示前 10 行。

哪个包(Scipy 或 Rpy)最适合这项任务?

如果是这样,您能否提供一些可以帮助我实施解决方案的指针(例如文档或在线示例)?

速度是一个问题。理想情况下 scipy 和 Rpy 可以处理大文件,即使文件太大而无法放入内存

【问题讨论】:

  • 您可能会在dabeaz.com/generators-uk找到一些有用的信息
  • 在您的情况下,“巨大的集合”到底是什么意思?

标签: python r numpy scipy memory-mapped-files


【解决方案1】:

Rpy 或 Scipy 都不是必需的,尽管 numpy 可能会使它更容易一些。 这个问题似乎非常适合逐行解析器。 只需打开文件,将一行读入一个字符串,将该行扫描成一个数组(参见 numpy.fromstring),更新您的运行总和并移至下一行。

【讨论】:

    【解决方案2】:

    Python 的文件 I/O 性能并不差,所以你可以直接使用 file 模块。您可以通过在交互式解释器中键入 help (file) 来查看其中可用的功能。创建文件是核心语言功能的一部分,不需要您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 的答案。我不是 100% 确定这适用于 Python 3。

    我会让你弄清楚如何显示前 10 行并找到行总和。这可以通过简单的程序逻辑来完成,如果没有任何特殊的库,这应该不是问题。当然,如果行具有某种复杂的格式,难以解析出值,您可能需要使用某种模块进行解析,例如re(在交互式解释器中键入help(re))。

    【讨论】:

      【解决方案3】:

      正如@gsk3 所说,bigmemory 是一个很好的包,还有包biganalyticsbigtabulate(还有更多,但这些值得一试)。还有ff,虽然不是那么容易使用。

      R 和 Python 的共同点是对 HDF5 的支持(参见 R 中的 ncdf4NetCDF4 包),这使得访问磁盘上的海量数据集变得非常快速和容易。就个人而言,我主要使用bigmemory,尽管那是特定于 R 的。由于 HDF5 在 Python 中可用并且速度非常非常快,因此它可能是您在 Python 中的最佳选择。

      【讨论】:

        【解决方案4】:

        您的数据有多大,是否比您 PC 的内存大?如果它可以加载到内存中,您可以使用 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
        

        【讨论】:

          【解决方案5】:

          我对 Rpy 一无所知。我确实知道 SciPy 用于对真正的大型数据集进行严格的数字运算,因此它应该可以解决您的问题。

          正如 zephyr 所说,您可能不需要任何一个;如果您只需要保留一些运行总和,您可以在 Python 中完成。如果是 CSV 文件或其他常见文件格式,请检查是否有 Python 模块会为您解析,然后编写一个循环,对适当的值求和。

          我不确定如何获得前十行。您可以随时收集它们,还是需要计算总和然后选择行?要收集它们,您可能需要使用字典来跟踪当前的 10 个最佳行,并使用键来存储用于对它们进行排名的指标(以便在另一行取代它时轻松找到并丢弃一行)。如果您需要在计算完成后查找行,请将所有数据放入 numpy.array 中,否则只需第二次遍历文件以提取十行。

          【讨论】:

            【解决方案6】:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-02-24
              • 1970-01-01
              • 2013-12-24
              • 2013-03-10
              • 1970-01-01
              • 2020-07-15
              • 2013-08-28
              • 2013-06-09
              相关资源
              最近更新 更多