46

我做了很多统计工作,并使用 Python 作为我的主要语言。虽然我使用的一些数据集可能占用 20GB 的内存,这使得使用 numpy、scipy 和 PyIMSL 中的内存函数对它们进行操作几乎是不可能的。统计分析语言 SAS 在这里有一个很大的优势,它可以对来自硬盘的数据进行操作,而不是严格的内存处理。但是,我想避免在 SAS 中编写大量代码(出于各种原因),因此我试图确定我对 Python 有哪些选择(除了购买更多的硬件和内存)。

我应该澄清,像 map-reduce 这样的方法对我的大部分工作没有帮助,因为我需要对完整的数据集进行操作(例如计算分位数或拟合逻辑回归模型)。

最近我开始使用h5py并认为它是我发现的最好的选择,它允许 Python 像 SAS 一样运行并操作来自磁盘的数据(通过 hdf5 文件),同时仍然能够利用 numpy/scipy/matplotlib 等。我想知道是否有人有在类似环境中使用 Python 和 h5py 的经验以及他们发现了什么。有没有人能够在迄今为止由 SAS 主导的“大数据”设置中使用 Python?

编辑:购买更多硬件/内存肯定会有所帮助,但从 IT 的角度来看,当 Python(或 R 或​​ MATLAB 等)需要将数据保存在内存中时,我很难将 Python 卖给需要分析大量数据集的组织. SAS 在这方面继续拥有强大的卖点,因为虽然基于磁盘的分析可能较慢,但您可以自信地处理庞大的数据集。因此,我希望 Stackoverflow-ers 可以帮助我弄清楚如何降低使用 Python 作为主要大数据分析语言的感知风险。

4

2 回答 2

49

我们使用 Python 结合 h5py、numpy/scipy 和 boost::python 进行数据分析。我们典型的数据集大小高达几百 GB。

HDF5优点:

  • 可以使用 h5view 应用程序、h5py/ipython 和 h5* 命令行工具方便地检查数据
  • API 可用于不同的平台和语言
  • 使用组构造数据
  • 使用属性注释数据
  • 无忧内置数据压缩
  • 单个数据集上的 io 速度很快

HDF5 的缺陷:

  • 如果 h5 文件包含太多数据集/组(> 1000),性能会下降,因为遍历它们非常慢。另一方面,io 对于一些大数据集来说很快。
  • 高级数据查询(类似 SQL)实施起来很笨拙而且速度很慢(在这种情况下考虑 SQLite)
  • HDF5 在所有情况下都不是线程安全的:必须确保使用正确的选项编译库
  • 更改 h5 数据集(调整大小、删除等)会增大文件大小(在最好的情况下)或不可能(在最坏的情况下)(必须复制整个 h5 文件以再次展平它)
于 2011-02-02T12:59:43.470 回答
5

我不使用 Python 进行统计,并且倾向于处理相对较小的数据集,但可能值得花点时间查看R 中的高性能计算的 CRAN 任务视图,尤其是“大内存和内存不足”数据”部分。

三个原因:

  • 您可以挖掘任何这些软件包的源代码,以获得通常对您有帮助的想法
  • 您可能会发现包名称在搜索 Python 等效项时很有用;很多 R 用户也是 Python 用户
  • 在某些情况下,使用上述链接的包之一链接到 R 进行特定分析,然后将结果绘制回 Python 可能会很方便

我再次强调,这完全超出了我的范围,而且您当然可能已经知道所有这些。但也许这对您或解决相同问题的人有用。

于 2011-02-02T20:04:01.850 回答