高效存储和分析实验数据(SQL、PYTHON)

Sol*_*vis 2 python mysql sql database pandas

我目前在我的大学的神经科学研究实验室担任本科生实习生,在那里我是专门的“编码员/数学专家”。我知道这个描述很尴尬,但我认为这就是我的看法。

我有很多任务,包括更新遗留代码,这让我退后一步,尝试概念化执行此操作的最佳方法。我正在寻求有关构建流程的最佳方式的建议。

目前收集的数据有两种形式。一种是来自基于 3D 的捕获设备,该设备收集不同标记上的数据,尤其是它们的 xyz 位置,它可以将这些数据导出为 CSV 格式。然而,还有一个用 C 编写的奇怪的旧 API,我可以用它来手动获取数据。还有一个眼动仪以专有的二进制格式存储数据,并提供 MEX 文件以在 Matlab 中提取相关信息,但是编译后的 MEX 文件似乎完全是黑盒的。

我正在考虑尝试将所有数据存储在关系数据库中,并使用 python 插件来获取某些数据帧中所需的数据和结构以进行分析。我们谈论的是用于 3D 动作捕捉的 64floating 的大约 100,000 * 10。

是否值得研究 SQL 和 NOSQL 架构,还是应该将所有内容存储在结构化目录中的 HDF5 或 JSON 中?

Mik*_*ike 5

我问自己同样的问题,我会尝试恢复我所发现的东西。

\n\n

鉴于这与您的数据集类似:

\n\n
<class \'pandas.core.frame.DataFrame\'>\nInt64Index: 100000 entries, 0 to 99999\nData columns (total 10 columns):\n0    100000 non-null float64\n1    100000 non-null float64\n2    100000 non-null float64\n3    100000 non-null float64\n4    100000 non-null float64\n5    100000 non-null float64\n6    100000 non-null float64\n7    100000 non-null float64\n8    100000 non-null float64\n9    100000 non-null float64\ndtypes: float64(10)\nmemory usage: 8.4 MB\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的“基本”数据集将需要 \xe2\x89\x88 10 MB

\n\n

普遍的看法

\n\n
\n

因此,HDF5 是一种罕见的产品,它在两个领域表现出色:根据严格的标准化惯例归档和共享数据,以及用于本地数据分析的临时、高度灵活和迭代的使用。

\n
\n\n

https://hdfgroup.org/wp/2015/03/hdf5-as-a-zero-configuration-ad-hoc-scientific-database-for-python/

\n\n

一般来说,与字符串相比,HDF5 使用 int 效果更好,看来这就是你的情况。也许它的主要限制是并发性:

\n\n
\n

更值得关注的是邮件列表上最近发布的帖子,讨论\n 在具有数千个使用并行 I/O 的处理器的高性能计算应用程序中使用 netCDF 和 HDF5,其中警告\n 并行 I/O 期间存在文件损坏的危险如果客户端在特定时间死亡。HDF Group 已意识到此问题并正在解决它。

\n
\n\n

https://earthdata.nasa.gov/standards/hdf5

\n\n

关注进口效率

\n\n

示例1:

\n\n
\n

结果显示,从 HDF5 导入数据的时间最短,仅为 CSV 导入时间的约 50%,从 SQLITE 导入时间的约 25%。\n ://statcompute.wordpress。 com/标签/hdf5/

\n
\n\n

示例2:

\n\n
In [18]: %timeit test_sql_read()\n1 loops, best of 3: 766 ms per loop\n\nIn [19]: %timeit test_hdf_fixed_read()\n10 loops, best of 3: 19.1 ms per loop\n\nIn [20]: %timeit test_hdf_table_read()\n10 loops, best of 3: 39 ms per loop\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

SQL

\n\n
\n

适合:

\n\n

\xe2\x80\x93 您的数据是结构化的(您有一个 \xe2\x80\x98Schema\xe2\x80\x99)

\n\n

\xe2\x80\x93 关系(行和列的表格)

\n\n

\xe2\x80\x93 中型,<=几 GB总共

\n\n

\xe2\x80\x93 事务操作(确保数据库一致)

\n
\n\n

https://www.nersc.gov/assets/Uploads/09-Databases-Wahid2.pdf

\n\n

在之前的 SO 讨论中:

\n\n
\n

SQLite 具有支持使用 SQL 进行数据库查询的功能。HDF5 具有支持大型科学数据集的功能。\n 评估 HDF5:HDF5 为数据建模提供哪些限制/功能?

\n
\n\n

但是 Pandas(HDF5 到 PyTables)具有丰富的“查询”能力,最近它们包括了类似 SQL 的查询。

\n\n
In [171]: df.query(\'(a < b) & (b < c)\')\nOut[171]: \n          a         b         c\n3  0.011763  0.022921  0.244186\n8  0.116822  0.364564  0.454607\n
Run Code Online (Sandbox Code Playgroud)\n\n

http://pandas.pydata.org/pandas-docs/stable/indexing.html#the-query-method-experimental

\n\n

NOSQL

\n\n

关于 HDF5 与 NOSQL 的一些见解

\n\n
\n
    \n
  • HDF5 不是数据库。MongoDB 具有 ACID 属性,HDF5 没有(可能很重要)。
  • \n
  • HDF5(除非您使用 MPI 版本)不支持并发写入访问(可以进行读取访问)。
  • \n
\n
\n\n

存储和查询气象数据大数据集的更好方法是什么

\n\n

结论

\n\n
\n

事实上,对于某些应用程序来说,数据库管理系统是不合理的:

\n\n
    \n
  • 如果所有数据集都很小,
  • \n
  • 如果数据存储和访问要求不会改变(不需要灵活性)。
  • \n
\n
\n\n

http://www.barrodale.com/docs/Why%20don\t%20scientists%20use%20databases.pdf

\n\n

希望能帮助到你。

\n