大数据的时频分析 - 减少数据大小:平均最合适的方法?

信息处理 频域 时频 频谱图 时域
2022-02-01 19:34:06

解释:

我想分析一个实验的数据,该实验使用传感器研究机械组件的性能,该实验已生成2000 个 CSV文件。每个文件包含513 Rows x 1220411 Cols,它们是频谱图格式(列是时间,行是频率):

| Time (s)| 0.0000 |0.000164|... 
|:--------|--------|:-------|:-------
| 1.52kHz |  2747  |  350   |...
| 3.05kHz |  2996  |  420   |...
| 4.57kHz |  4078  |  300   |...
|   ...   |  ...   |  ...   |...

我使用 persp3D() 绘制了前 100 行的 3D 图表:

persp3D(x,y,z, theta=45, phi=5, xlab="Frequency (kHz)", ylab="Time (s)", axes=TRUE, expand=0.5, shade=0.2)

在此处输入图像描述 我想从每个文件中提取 1-4 列(所有频率的 1 个时间样本)以获取总共 2000-8000 列的数据表(对于具有所有频率的 2000 个文件)并绘制它以获得实验的 3D 图。

问题:最好的数据缩减方法

  • 我想知道确保这 1-4 列代表每个文件中的总数据集的最佳方法是什么?
  • 在这种情况下,平均只是一个好方法吗?有哪些替代方案?
1个回答

因此,首先,在我看来,CSV 似乎是最不适合这种数据量的格式。它需要被解析,占用内存,浪费精度,并且不是线性可寻址的(即,要到达 99999. 元素,您需要解析前面的 99998 元素)。

所以我建议保留这些文件的结构,但将它们转换为二进制文件,例如。numpy 数组、HDF5 等等,但要保持二进制、无解析。转换一次并将该数据保留为您加载的数据 - 它会极大地减少您的文件加载时间,并且您的软件(无论您使用什么)可能甚至不需要一次将所有文件加载到内存中,因为当数据格式每个元素都有一个固定的位宽(例如,总是 4 字节整数和 8 字节浮点数),软件只需将文件的一部分加载到您需要的内存中就可以了。事实上,操作系统会为您做这些(“映射文件”)。

将您的文本文件格式减少为例如单精度浮点数或 32 位整数的数组,您的总数据大小将仅为 8GB - 并且在每个现代工作站的 RAM 中都适合多次,所以我认为这不是真的“大数据”不再!(只是为了消除处理这么多数字的恐惧)

我之前对此大肆宣扬过,人们回答说“CSV 文件是人类可读的”。我敢这么说的人去阅读一个 100k 列、500 行的 CSV 文件,并证明他们对数据的印象是可以代表整个集合的。


我想知道确保这 1-4 列代表每个文件中的总数据集的最佳方法是什么?

与工程中的往常一样,如果没有定义好的衡量标准,就没有“最好的如果您想突出不同频率之间的差异,请选择具有最高样本方差的列。如果您想表示整个测量“公平”,请不要选择单个列,而是平均所有列。如果不是你,就不可能回答这个问题——你想展示一些东西。你所拥有的是数据——意义是你人为赋予的东西(而且,是的,你必须意识到数据缩减方法的选择是你有偏见的决定,你绝对应该传达这一点)。

在这种情况下,平均只是一个好方法吗?

这是我想看看我是否还能看到有趣的东西的第一件事。这纯属巧合——我还不如随便挑一个!

有哪些替代方案?

再一次说不出来——根据某个指标选择一列,计算方差,第三个统计矩,假设某个功能形状会很方便,并将该形状适合您的数据集……天空是极限,你想找到什么out 是你唯一的指导方针。