用于模式分析的数据可视化(与语言无关,但首选 R)

数据挖掘 r 可视化
2021-10-06 05:50:44

我想从磁盘映像中绘制字节以了解其中的模式。这主要是一项学术任务,因为我几乎可以肯定这种模式是由磁盘测试程序创建的,但我还是想对其进行逆向工程。

我已经知道模式是对齐的,周期为 256 个字符。

我可以设想两种可视化此信息的方式:通过时间查看的 16x16 平面(3 维),其中每个像素的颜色是字符的 ASCII 代码,或者每个周期的 256 像素线(2 维)。

xxd这是通过(32x16)看到的模式快照(您可以看到多个):

要分析的模式

无论哪种方式,我都试图找到一种可视化这些信息的方法。这对任何人来说可能都不难进行信号分析,但我似乎找不到使用开源软件的方法。

我想避免使用 Matlab 或 Mathematica,我更喜欢 R 中的答案,因为我最近一直在学习它,但尽管如此,任何语言都是受欢迎的。


更新,2014-07-25:鉴于 Emre 在下面的回答,这就是模式的样子,给定模式的前 30MB,对齐在 512 而不是 256(这种对齐看起来更好):

图形模式

欢迎任何进一步的想法!

3个回答

我会使用视觉分析。由于您知道每 256 个字节有一个重复,因此创建一个 256 像素宽乘以多深的图像,并使用亮度对数据进行编码。在 (i)python 中,它看起来像这样:

import os, numpy, matplotlib.pyplot as plt

%matplotlib inline

def read_in_chunks(infile, chunk_size=256):
    while True:
        chunk = infile.read(chunk_size)
        if chunk:
            yield chunk
        else:
            # The chunk was empty, which means we're at the end
            # of the file
            return

fname = 'enter something here'
srcfile = open(fname, 'rb')
height = 1 + os.path.getsize(fname)/256
data = numpy.zeros((height, 256), dtype=numpy.uint8)    

for i, line in enumerate(read_in_chunks(srcfile)):
    vals = list(map(int, line))
    data[i,:len(vals)] = vals

plt.imshow(data, aspect=1e-2);

这是 PDF 的样子:

可视化的 PDF 文件

一个 256 字节的周期性模式将表现为垂直线。除了头部和尾部,它看起来很吵。

我对信号分析几乎一无所知,但使用 R 可以轻松完成二维可视化。特别是你需要reshape2ggplot2包。假设您的数据很(例如 [n X 256] 大小),首先您需要使用 package.json 中的函数将其转换为格式然后使用. 这是一个很好食谱gistmelt()reshape2geom_tileggplot2

我会看一下这个raster包,它可以读取原始二进制数据并将其呈现为 NxM 网格。它甚至可以提取大型二进制网格的子集,而无需读取整个文件(R 栅格对象本身只是数据的代理,而不是数据本身)。