标签: hdf5

使用熊猫的"大数据"工作流程

在学习大熊猫的过程中,我试图解决这个问题的答案已有好几个月了.我使用SAS进行日常工作,这非常适合它的核心支持.然而,由于其他许多原因,SAS作为一款软件非常糟糕.

有一天,我希望用python和pandas替换我对SAS的使用,但我目前缺乏大型数据集的核心工作流程.我不是在谈论需要分布式网络的"大数据",而是说文件太大而无法容纳在内存中,但又足够小以适应硬盘驱动器.

我的第一个想法是用于HDFStore在磁盘上保存大型数据集,并仅将我需要的部分拉入数据帧进行分析.其他人提到MongoDB是一种更容易使用的替代品.我的问题是:

有哪些最佳实践工作流程可用于完成以下任务:

  1. 将平面文件加载到永久的磁盘数据库结构中
  2. 查询该数据库以检索数据以提供给pandas数据结构
  3. 在操作pandas中的片段后更新数据库

真实世界的例子将非常受欢迎,尤其是那些在"大数据"上使用熊猫的人.

编辑 - 我希望如何工作的示例:

  1. 迭代导入大型平面文件并将其存储在永久的磁盘数据库结构中.这些文件通常太大而无法放入内存中.
  2. 为了使用Pandas,我想读取这些数据的子集(通常一次只有几列),它们可以适合内存.
  3. 我将通过对所选列执行各种操作来创建新列.
  4. 然后我必须将这些新列附加到数据库结构中.

我正在尝试找到执行这些步骤的最佳实践方法.阅读关于pandas和pytables的链接似乎附加一个新列可能是个问题.

编辑 - 特别回应杰夫的问题:

  1. 我正在构建消费者信用风险模型.数据种类包括电话,SSN和地址特征; 财产价值; 犯罪记录,破产等贬损信息......我每天使用的数据集平均有近1,000到2,000个字段的混合数据类型:数字和字符数据的连续,名义和序数变量.我很少附加行,但我会执行许多创建新列的操作.
  2. 典型操作涉及使用条件逻辑将多个列组合到新的复合列中.例如,if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'.这些操作的结果是我的数据集中每条记录的新列.
  3. 最后,我想将这些新列附加到磁盘上的数据结构中.我将重复第2步,使用交叉表和描述性统计数据探索数据,试图找到有趣,直观的模型关系.
  4. 典型的项目文件通常约为1GB.文件被组织成一种行,其中一行包括消费者数据的记录.每行对每条记录都有相同的列数.情况总是如此.
  5. 在创建新列时,我很少会按行进行子集化.但是,在创建报告或生成描述性统计信息时,对行进行子集化非常常见.例如,我可能想为特定的业务线创建一个简单的频率,比如零售信用卡.要做到这一点,除了我要报告的列之外,我只会选择那些业务线=零售的记录.但是,在创建新列时,我会提取所有数据行,只提取操作所需的列.
  6. 建模过程要求我分析每一列,寻找与某些结果变量的有趣关系,并创建描述这些关系的新化合物列.我探索的列通常以小集合完成.例如,我将专注于一组20个列,只处理属性值并观察它们与贷款违约的关系.一旦探索了这些并创建了新的列,我就转到另一组列,比如大学教育,然后重复这个过程.我正在做的是创建候选变量来解释我的数据和某些结果之间的关系.在这个过程的最后,我应用了一些学习技术,从这些复合列中创建一个方程式.

我很少会在数据集中添加行.我几乎总是会创建新的列(统计/机器学习用语中的变量或特征).

python hdf5 large-data mongodb pandas

913
推荐指数
14
解决办法
27万
查看次数

使用HDF5进行大型阵列存储(而不是平面二进制文件)是否存在分析速度或内存使用优势?

我正在处理大型3D阵列,我经常需要以各种方式进行切片以进行各种数据分析.典型的"立方体"可以是~100GB(将来可能会变大)

似乎python中大型数据集的典型推荐文件格式是使用HDF5(h5py或pytables).我的问题是:使用HDF5存储和分析这些立方体而不是将它们存储在简单的平面二进制文件中是否有任何速度或内存使用效益?HDF5是否更适合表格数据,而不像我正在使用的大型数组?我看到HDF5可以提供很好的压缩,但我对处理速度和处理内存溢出更感兴趣.

我经常只想分析立方体的一个大的子集.pytables和h5py的一个缺点是,当我拿一个数组时,我总是得到一个numpy数组,用尽内存.但是,如果我切片平面二进制文件的numpy memmap,我可以得到一个视图,它将数据保存在磁盘上.因此,似乎我可以更轻松地分析我的数据的特定部分而不会超出我的记忆.

我已经探讨了pytables和h5py,到目前为止还没有看到我的目的的好处.

python numpy hdf5 pytables h5py

82
推荐指数
1
解决办法
2万
查看次数

关于NetCDF与HDF5存储科学数据的意见?

有没有足够的经验w/NetCDF和HDF5给出一些关于它们的优缺点作为存储科学数据的方式?

我已经使用过HDF5并希望通过Java进行读/写,但是接口本质上是C库的包装器,我发现这让人感到困惑,所以NetCDF看起来很吸引人,但我几乎一无所知.

编辑:我的应用程序"仅"用于数据记录,因此我得到一个具有自描述格式的文件.对我来说,重要的功能是能够添加任意元数据,具有快速写入访问权限以附加到字节数组,以及具有单写入器/多读取器并发(强烈首选但不是必须的.​​NetCDF文档说他们有SWMR但是没有不能说它们是否支持任何机制来确保两个作者不能同时打开同一个文件并带来灾难性后果.我喜欢HDF5的层次结构(特别是我喜欢有向无环图层次结构,比"常规"文件系统类层次结构更灵活),现在正在阅读NetCDF文档...如果它只允许一个数据集文件然后它可能不适合我.:(

更新 - 看起来像NetCDF-Java从netCDF-4文件读取,但只从不支持分层组的netCDF-3文件写入.织补.

更新2009年7月14日:我开始对Java中的HDF5感到非常不满.可用的库不是很好,它有一些主要的绊脚石,与Java的抽象层(复合数据类型)有关.C的一个很好的文件格式,但看起来我只是输了.> :(

hdf5 netcdf

67
推荐指数
6
解决办法
2万
查看次数

HDF5 - 并发,压缩和I/O性能

我有关于HDF5性能和并发性的以下问题:

  1. HDF5是否支持并发写访问?
  2. 除了并发性考虑外,HDF5在I/O性能方面的表现如何(压缩率是否会影响性能)?
  3. 由于我在Python中使用HDF5,它的性能与Sqlite相比如何?

参考文献:

python sqlite hdf5 pandas

64
推荐指数
1
解决办法
3万
查看次数

如何在Python中读取HDF5文件

我试图从Python中读取hdf5文件中的数据.我可以使用读取hdf5文件h5py,但我无法弄清楚如何访问文件中的数据.

我的代码

import h5py    
import numpy as np    
f1 = h5py.File(file_name,'r+')    
Run Code Online (Sandbox Code Playgroud)

这有效,文件被读取.但是如何访问文件对象中的数据f1呢?

python hdf5

57
推荐指数
6
解决办法
16万
查看次数

将数组或DataFrame与其他信息一起保存在文件中

统计软件Stata允许将短文本片段保存在数据集中.这可以使用notes和/或完成characteristics.

这对我来说是一个很有价值的功能,因为它允许我保存各种信息,从提醒和待办事项列表到有关我如何生成数据的信息,甚至是特定变量的估算方法.

我现在正试图在Python 3.6中提出类似的功能.到目前为止,我已经在线查看了一些帖子,但这些帖子并没有完全解决我想做的事情.

一些参考文章包括:

对于小型NumPy数组,我得出结论,函数numpy.savez()和a 的组合dictionary可以在单个文件中充分存储所有相关信息.

例如:

a = np.array([[2,4],[6,8],[10,12]])
d = {"first": 1, "second": "two", "third": 3}

np.savez(whatever_name.npz, a=a, d=d)
data = np.load(whatever_name.npz)

arr = data['a']
dic = data['d'].tolist()
Run Code Online (Sandbox Code Playgroud)

但问题仍然存在:

是否有更好的方法可以将其他信息包含在包含NumPy数组或(大)的文件中Pandas DataFrame

我在听到有关特定特别感兴趣的优点缺点,你可能有例子的任何建议.依赖性越少越好.

python numpy hdf5 stata pandas

56
推荐指数
3
解决办法
9919
查看次数

HDF5与文件夹有何不同?

我正在开发一个处理向文件夹添加元数据的开源项目.提供的(Python)API允许您浏览和访问元数据,就像它只是另一个文件夹一样.因为它只是另一个文件夹.

\folder\.meta\folder\somedata.json
Run Code Online (Sandbox Code Playgroud)

然后我遇到了HDF5及其派生的Alembic.

阅读Python和HDF5一书中的HDF5我在寻找使用它的好处与使用文件夹中的文件相比,但我遇到的大部分内容都谈到了分层文件格式在添加数据方面的简单性的好处通过其API:

>>> import h5py
>>> f = h5py.File("weather.hdf5")
>>> f["/15/temperature"] = 21
Run Code Online (Sandbox Code Playgroud)

或者它能够根据请求(例如随机访问)只读取它的某些部分,以及并行执行单个HDF5文件(例如,用于多处理)

您可以挂载HDF5文件,https://github.com/zjttoefs/hdfuse5

它甚至拥有强大而简单的群组数据集的基础概念,来自wiki的内容如下:

  • 数据集,是同类型的多维数组
  • 组,可以容纳数据集和其他组的容器结构

数据集替换为文件文件夹,整个功能集听起来像文件夹中的文件已经完全能够做到.

对于我遇到的每一个好处,没有一个突出显示HDF5专属.

所以我的问题是,如果我要给你一个HDF5文件和一个文件夹,两个内容相同,哪种情况下HDF5更适合?

编辑:

得到了一些关于HDF5可移植性的回应.

这听起来很可爱,但我还没有给出一个例子,一个场景,其中一个HDF5可以用文件输出一个文件夹.当文件夹在任何计算机上可读时,为什么有人会考虑使用HDF5,任何文件系统,通过网络,支持"并行I/O",没有HDF5解释器的人可读.

我甚至可以说,带文件的文件夹比任何HDF5都便携得多.

编辑2:

Thucydides411刚刚举了一个可移植性问题的例子. /sf/answers/1995841991/

我认为我从这个帖子的答案中拿走的是HDF5非常适合当你需要文件和文件夹的组织结构时,就像上面的示例场景一样,有很多(数百万)小(~1个字节)数据结构; 喜欢个别数字或字符串.它通过提供一个"子文件系统"来支持文件系统所缺少的东西,这种文件系统有利于小型和多型,而不是少量和大型.

在计算机图形学中,我们使用它来存储几何模型和关于各个顶点的任意数据,这些数据似乎与它在科学界的使用非常吻合.

python persistence metadata hdf5

50
推荐指数
3
解决办法
1万
查看次数

如何处理R中的hdf5文件?

我有一个hdf5格式的文件.我知道它应该是一个矩阵,但我想阅读那个矩阵,R以便我可以研究它.我看到有一个h5r软件包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程.这样的教程是否可在线获取.具体来说,如何hdf5使用此包读取对象,以及如何实际提取矩阵?

UPDATE

我发现了一个rhdf5不属于CRAN但属于BioConductoR的软件包.界面相对容易理解文档和示例代码非常清楚.我可以毫无问题地使用它.我的问题似乎是输入文件.我想要读取的矩阵实际上存储在hdf5文件中python pickle.因此,每当我尝试打开它并通过R我获得它来访问它segmentation fault.我确实弄清楚如何将矩阵从内部保存pythontsv文件,现在问题得以解决.

r hdf5

48
推荐指数
4
解决办法
4万
查看次数

ImportError HDFStore需要PyTables没有名为tables的模块

import pandas as pd
dfs = pd.HDFStore('xxxxx.h5')
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

"ImportError: HDFStore requires PyTables, "No module named tables" problem importing"

我试图安装PyTables,需要Cython.我安装了Cython 0.21,但它抛出了一个错误,说明Cython应该大于0.13

这是我得到的日志:

".. ERROR:: You need Cython 0.13 or greater to compile PyTables!

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /private/tmp/pip_build_root/tables
Storing debug log for failure in /Users/nikhilsahai/Library/Logs/pip.log
Nikhils-MacBook-Pro:~ nikhilsahai$ sudo pip install cython
Requirement already satisfied (use --upgrade to upgrade): cython in /Library/Python/2.7/site-packages/Cython-0.21-py2.7-macosx-10.9-intel.egg
Cleaning up..."
Run Code Online (Sandbox Code Playgroud)

请指导我如何解决这个问题.

python hdf5 pandas

48
推荐指数
4
解决办法
4万
查看次数

使用h5py在Python中对大数据进行分析工作的经验?

我做了很多统计工作,并使用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可以帮助我弄清楚如何降低使用Python作为主流大数据分析语言的感知风险.

python sas hdf5 scipy h5py

46
推荐指数
2
解决办法
8308
查看次数

标签 统计

hdf5 ×10

python ×8

pandas ×4

h5py ×2

numpy ×2

large-data ×1

metadata ×1

mongodb ×1

netcdf ×1

persistence ×1

pytables ×1

r ×1

sas ×1

scipy ×1

sqlite ×1

stata ×1