我正在开发一个处理文件夹添加元数据的开源项目 。 提供的(Python)API允许您浏览和访问元数据,就像它只是另一个文件夹。 因为它只是另一个文件夹。 \folder\.meta\folder\somedata.json 然后我遇到了HDF5及其衍生Alembic 。 阅读Python和HDF5这本书中的HDF5 ,与使用文件夹中的文件相比,我一直在寻找使用它的好处,但是我所遇到的大部分内容都讲述了分层文件格式在添加数据方面的优点通过它的API: >>> import h5py >>> f = h5py.File("weather.hdf5") >>> f["/15/temperature"] = 21 或者是根据请求只读取其中某些部分的能力(例如随机访问),以及单个HDF5文件的并行执行(例如,用于多处理) 你可以挂载HDF5文件, https://github.com/zjttoefs/hdfuse5 它甚至拥有一个强大而简单的基本概念的组和数据集 ,从wiki中读取: 数据集,这是一个同types的multidimensional array 组,这是可以容纳数据集和其他组的容器结构 将数据集replace为文件和文件夹 组 ,整个function集听起来像是文件夹中的文件已经完全能够做到。 对于我所遇到的每一个好处,都没有一个是HDF5专有的。 所以我的问题是,如果我要给你一个HDF5文件和一个带有相同内容的文件夹,在这种情况下HDF5会更适合吗? 编辑: 对HDF5的可移植性有了一些反应。 这听起来很可爱,但是我仍然没有给出一个例子,一个HDF5会将文件夹放在一个文件夹中的场景。 为什么有人会考虑在任何计算机上读取文件夹时使用HDF5,通过networking支持“并行I / O”的任何文件系统,都可以在没有HDF5解释器的情况下被人读取。 我甚至会说,带有文件的文件夹比任何HDF5都要便携得多。 编辑2: Thucydides411刚刚举了一个可移植性问题的例子。 https://stackoverflow.com/a/28512028/478949 我认为我从这个线索中得到的答案是,当你需要文件和文件夹的组织结构时,HDF5非常适合,就像在上面的示例场景中,有很多(百万)小(〜1字节)数据结构; 像个人号码或string。 它通过提供一个“小文件系统”来弥补文件系统缺乏的优势。 在计算机graphics学中,我们用它来存储几何模型和有关各个顶点的任意数据,这似乎与它在科学界的使用非常吻合。
我有一个hdf5格式的文件。 我知道它应该是一个matrix,但我想在R读取这个matrix,以便我可以研究它。 我看到有一个h5r软件包可以帮助解决这个问题,但是我没有看到任何简单的阅读/理解教程。 在线提供这样的教程吗? 具体来说,你如何读这个包的hdf5对象,以及如何实际提取matrix? UPDATE 我发现一个包装不是CRAN的一部分但是是BioConductoR的一部分的rhdf5。 界面相对比较容易理解文档,示例代码非常清晰。 我可以使用它没有问题。 我的问题似乎是input文件。 我想读取的matrix实际上是作为python pickle存储在hdf5文件中的。 所以每次我试图打开它并通过R访问它,我有一个segmentation fault 。 我弄清楚如何从python保存matrix作为tsv文件,现在解决了这个问题。
我有关于HDF5性能和并发性的以下问题: HDF5是否支持并发写入访问? 除了并发性考虑之外,HDF5在I / O性能 ( 压缩率是否会影响性能)方面的性能如何? 由于我用Python使用HDF5,它的性能如何与Sqlite相比? 参考文献: http://www.sqlite.org/faq.html#q5 lockingNFS文件系统上的sqlite文件可能吗? http://pandas.pydata.org/
我做了很多统计工作,并使用Python作为我的主要语言。 我使用的一些数据集可能需要20GB的内存,这使得在numpy,scipy和PyIMSL中使用内存中的函数几乎不可能。 统计分析语言SAS在这方面具有很大的优势,它可以对硬盘数据进行操作,而不是严格按照内存处理。 但是,我想避免在SAS中编写大量代码(出于各种原因),因此我正试图确定我有哪些Python选项(除了购买更多的硬件和内存)。 我应该澄清,像map-reduce这样的方法在我的大部分工作中都没有帮助,因为我需要对整套数据进行操作(例如计算分位数或拟合逻辑回归模型)。 最近我开始玩h5py,并认为这是我发现允许Python像SAS一样操作并通过磁盘(通过hdf5文件)操作数据的最佳select,同时仍然可以利用numpy / scipy / matplotlib等。想听听有没有人在类似的环境中使用Python和h5py,以及他们发现了什么。 有没有人能够在迄今为止由SAS主导的“大数据”设置中使用Python? 编辑:购买更多的硬件/内存当然可以提供帮助,但从IT的angular度来看,我很难将Python卖给需要分析庞大数据集的组织,当Python(或R或MATLAB等)需要将数据保存在内存。 SAS在这里仍然有很强的卖点,因为虽然基于磁盘的分析可能会比较慢,但您可以自信地处理大量的数据集。 所以,我希望Stackoverflower能够帮助我找出如何减less使用Python作为主要的大数据分析语言的感知风险。
我正在处理大型的3D数组,我经常需要用各种方法来进行各种数据分析。 一个典型的“立方体”可以是〜100GB(未来可能会变大) 似乎python中大数据集的典型推荐文件格式是使用HDF5(h5py或pytables)。 我的问题是:是否有任何速度或内存使用的好处,使用HDF5存储和分析这些立方体存储在简单的平面二进制文件? HDF5更适合表格数据,而不是像我正在使用的大型数组? 我看到HDF5可以提供很好的压缩,但是我更关心处理速度和处理内存溢出问题。 我经常只想分析立方体的一个大的子集。 pytables和h5py的一个缺点是,当我分割一个数组的时候,总是会返回一个数组,使用内存。 但是,如果我分割一个平坦的二进制文件的numpy memmap,我可以得到一个视图,它保持在磁盘上的数据。 所以,我似乎可以更容易地分析我的数据的特定部门,而不会超出我的记忆。 我已经探索了pytables和h5py,至今没有看到我的目的的好处。
在NetCDF和HDF5中,谁有足够的经验来提供一些关于他们的优缺点作为存储科学数据的方式? 我已经使用了HDF5,并希望通过Java读取/写入,但是接口基本上是C库的一个包装,这让我感到困惑,所以NetCDF似乎很有趣,但是我几乎一无所知。 编辑:我的应用程序是“唯一”的数据logging,以便我得到一个自描述格式的文件。 对于我来说重要的function是能够添加任意的元数据,具有快速写入访问字节数组,并具有单写/多读者并发性(强烈偏好,但不是必须有.NetCDF文档说,他们有SWMR,但不不说他们是否支持确保两位作者不能同时打开同一个文件的任何机制,并带来灾难性后果)。 我喜欢HDF5的层次结构(特别是我喜欢有向无环图层次结构,比“常规”文件系统层次结构更灵活),现在正在阅读NetCDF文档…如果它只允许每个数据集文件然后它可能不会为我工作。 🙁 更新 – 看起来像NetCDF-Java从netCDF-4文件读取,但只能从不支持分层组的netCDF-3文件写入。 织补。 更新2009年7月14日 :我开始对Java中的HDF5感到非常不安。 可用的库不是很好,它有一些与Java的抽象层(复合数据types)有关的主要障碍。 C的一个很好的文件格式,但看起来像我只是输了。 > 🙁
我有火车和标签数据data.mat。 (我有200个具有6000个特征的训练数据,标签是保存在data.mat中的(-1,+1))。 我正在尝试在hdf5中转换我的数据并使用以下命令运行Caffe: load data.mat hdf5write('my_data.h5', '/new_train_x', single( reshape(new_train_x,[200, 6000, 1, 1]) ) ); hdf5write('my_data.h5', '/label_train', single( reshape(label_train,[200, 1, 1, 1]) ), 'WriteMode', 'append' ); 而我的layer.prototxt(只是数据层)是: layer { type: "HDF5Data" name: "data" top: "new_train_x" # note: same name as in HDF5 top: "label_train" # hdf5_data_param { source: "/path/to/list/file.txt" batch_size: 20 } include { phase: TRAIN […]
在学习pandas的同时,我试图在这个问题上解答好几个月。 我使用SAS进行日常工作,这对我们来说是非常棒的支持。 然而,由于其他原因,SAS作为一款软件是非常糟糕的。 有一天,我希望用python和pandas来替代我的SAS,但是我目前缺乏大型数据集的核心外工作stream程。 我不是在谈论需要分布式networking的“大数据”,而是文件太大而不适合内存,但又足够小以适应硬盘驱动器。 我的第一个想法是使用HDFStore在磁盘上保存大型数据集,并只将需要的部分HDFStore到数据HDFStore进行分析。 其他人则提到MongoDB是一个更易于使用的替代scheme。 我的问题是这样的: 什么是一些最佳实践工作stream程来完成以下工作: 将平面文件加载到永久性的磁盘数据库结构中 查询该数据库以检索要送入pandas数据结构的数据 在pandas中操作片断之后更新数据库 真实世界的例子会受到大家的赞赏,尤其是那些使用“大数据”的pandas的人。 编辑 – 我如何工作的例子: 迭代地导入一个大的平面文件并将其存储在一个永久性的磁盘数据库结构中。 这些文件通常太大而不适合内存。 为了使用pandas,我想读取这些数据的子集(通常只有几列),可以适应内存。 我会通过对所选列进行各种操作来创build新列。 然后我必须将这些新列添加到数据库结构中。 我正在试图find执行这些步骤的最佳实践方式。 阅读有关pandas和pytables的链接似乎是追加一个新的列可能是一个问题。 编辑 – 特别回应杰夫的问题: 我正在build立消费者信用风险模型。 数据种类包括电话,SSN和地址特征; 财产价值; 像犯罪logging,破产等贬义的信息…我每天使用的数据集平均有近1000到2000个混合数据types的字段:数字和字符数据的连续variables,名义variables和有序variables。 我很less追加行,但是我执行许多操作来创build新的列。 典型的操作涉及将使用条件逻辑的多个列组合成新的复合列。 例如, if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B' 。 这些操作的结果是我的数据集中每个logging的新列。 最后,我想将这些新列添加到磁盘数据结构中。 我会重复第2步,用交叉表和描述性统计数据来探索数据,试图find有趣的,直观的关系模型。 一个典型的项目文件通常是大约1GB。 文件被组织成一行,其中包含消费者数据的logging。 […]