以有效的方式存储和分析实验数据(SQL,PYTHON)

时间:2016-03-14 16:11:14

标签: python mysql sql database pandas

我目前在我所在大学的神经科学研究实验室担任本科实习生,我是专职的“编码/数学家”。我知道这种描述很难受,但我认为这就是我的感受。

我有许多任务,包括更新遗留代码,这使我退后一步,尝试概念化最佳方法。我正在寻找有关在此处构建流程的最佳方法的建议。

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

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

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

1 个答案:

答案 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

SQL

  

适合:

     

- 您的数据是结构化的(您有'架构')

     

- 关系(行和列的表)

     

- 中等大小,&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

NOSQL

有关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

希望它有所帮助。