我目前在我所在大学的神经科学研究实验室担任本科实习生,我是专职的“编码/数学家”。我知道这种描述很难受,但我认为这就是我的感受。
我有许多任务,包括更新遗留代码,这使我退后一步,尝试概念化最佳方法。我正在寻找有关在此处构建流程的最佳方法的建议。
目前收集的数据来自两种形式。一种是基于3d的捕获设备,它收集不同标记的数据,最值得注意的是它们的xyz位置,它可以以CSV格式导出这些数据。但是,还有一个用C编写的奇怪的旧API,我可以用来手动获取数据。 还有一个眼动仪,它以专有的二进制格式存储其数据,并提供MEX文件以在Matlab中提取相关信息,但是编译的MEX文件似乎是完全黑盒子。
我正在考虑将所有数据存储在关系数据库中,并使用python插件获取所需的数据框并在某些数据框架中进行分析。我们谈论的是用于3D动作捕捉的大约100,000 * 10的64floating。
查看SQL和NOSQL架构是否值得,还是应该将所有内容都存储在结构化目录中的HDF5或JSON中?
答案 0 :(得分:3)
我问自己同样的问题,我会尝试恢复我找到的东西。
鉴于这与您的数据集类似:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100000 entries, 0 to 99999
Data columns (total 10 columns):
0 100000 non-null float64
1 100000 non-null float64
2 100000 non-null float64
3 100000 non-null float64
4 100000 non-null float64
5 100000 non-null float64
6 100000 non-null float64
7 100000 non-null float64
8 100000 non-null float64
9 100000 non-null float64
dtypes: float64(10)
memory usage: 8.4 MB
您的“基本”数据集需要≈10MB
因此,HDF5是一种在两个领域表现出色的稀有产品:归档和 根据严格的标准化惯例共享数据,以及 ad-hoc,高度灵活和迭代使用本地数据分析。
https://hdfgroup.org/wp/2015/03/hdf5-as-a-zero-configuration-ad-hoc-scientific-database-for-python/
一般来说,与字符串相比,HDF5在int方面效果更好,似乎是你的情况。也许它的主要限制是并发性:
最令人担忧的是最近在邮件列表上发布的帖子 netCDF和HDF5在高性能计算应用中的应用 成千上万的处理器使用并行I / O,它警告危险 如果客户端在a处死亡,则在并行I / O期间发生文件损坏 特定的时间。 HDF集团意识到了这个问题 解决它。
https://earthdata.nasa.gov/standards/hdf5
示例1:
如结果所示,从HDF5导入数据的时间是 最短,仅占CSV导入时间的约50%,导入时间约为25% 来自SQLITE。 https://statcompute.wordpress.com/tag/hdf5/
示例2:
In [18]: %timeit test_sql_read()
1 loops, best of 3: 766 ms per loop
In [19]: %timeit test_hdf_fixed_read()
10 loops, best of 3: 19.1 ms per loop
In [20]: %timeit test_hdf_table_read()
10 loops, best of 3: 39 ms per loop
HDF5 - concurrency, compression & I/O performance
适合:
- 您的数据是结构化的(您有'架构')
- 关系(行和列的表)
- 中等大小,&lt; = 几GB
- 交易操作(确保数据库一致)
https://www.nersc.gov/assets/Uploads/09-Databases-Wahid2.pdf
在之前的SO讨论中:
SQLite具有使用SQL支持数据库查询的功能。 HDF5有 支持大型科学数据集的功能。 Evaluating HDF5: What limitations/features does HDF5 provide for modelling data?
但是Pandas(HDF5到PyTables)具有丰富的“查询”能力,最近它们包含类似SQL的查询。
In [171]: df.query('(a < b) & (b < c)')
Out[171]:
a b c
3 0.011763 0.022921 0.244186
8 0.116822 0.364564 0.454607
http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-query-method-experimental
有关HDF5与NOSQL的一些见解
- HDF5不是数据库。 MongoDB具有ACID属性,HDF5没有(可能很重要)。
- HDF5(除非您使用的是MPI版本)不支持并发写访问(可以进行读访问)。
What is a better approach of storing and querying a big dataset of meteorological data
实际上,对于某些应用程序而言,数据库管理系统并非如此 理由:
- 如果所有数据集都很小,
- 如果数据存储和访问要求不会改变(不需要灵活性)。
http://www.barrodale.com/docs/Why%20don't%20scientists%20use%20databases.pdf
希望它有所帮助。