パターン分析のためのデータ可視化(言語非依存、ただしRを推奨)


11

それらのパターンを理解するために、ディスクイメージからバイトをプロットします。このパターンがディスクテストプログラムによって作成されたと確信しているため、これは主に学術的なタスクですが、とにかくリバースエンジニアリングを行いたいと思います。

私は、パターンが256文字の周期で整列していることをすでに知っています。

この情報を視覚化する2つの方法を想像できます。各ピクセルの色が文字のASCIIコードである時間(3次元)で表示される16x16プレーン、または各ピリオド(2次元)の256ピクセルラインです。

これは、xxd(32x16)を通して見たパターン(複数表示される場合があります)のスナップショットです。

分析するパターン

いずれにせよ、私はこの情報を視覚化する方法を見つけようとしています。これはおそらく信号解析にとって難しいことではありませんが、オープンソースソフトウェアを使用する方法を見つけることができないようです。

私はMatlabやMathematicaを避けたいのですが、最近Rで学習しているので、Rでの回答を希望しますが、それでも、どのような言語でも大歓迎です。


更新、2014年7月25日:以下のEmreの回答が与えられた場合、これはパターンの最初の30MBが256ではなく512に配置された場合のパターンです(この配置はより良く見えます)。

グラフィカルパターン

これ以上のアイデアは大歓迎です!


データの例/抜粋(おそらく数MBのみ)が興味深いかもしれません。
Marco13 2014

データの定期的な性質に興味がある場合は、データのDFTを確認するとわかります。
mrmcgreg 14

@mrmcgreg:DFTのしくみを再学習する必要があります。信号とシステムのクラスにもっと注意を払うべきだった:)
Valmiky Arquissandas '26 / 07/26

回答:


5

私は視覚分析を使用します。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バイトの周期的なパターンは、縦線として現れます。ヘッダーとテールを除いて、かなりうるさく見えます。


これは私が探しているものと非常によく似ています。ファイナルの勉強中ですので、もう一度考える時間は取れませんが、できるだけ早くお知らせします。「256バイトの周期的なパターンは垂直線として現れたでしょう。」-まさに私が考えていたもの。また、256バイトすべてを同じ行に配置した画像を表示することもできます。これは、テキストでは既に明らかです。
それから

Debian Linuxではこれを実行できないようです。パッケージpython-scitoolsとをインストールしましたipython。エラーメッセージはValueError: invalid literal for int() with base 10: '#'です。とにかくそれを動作させることができるかどうかを確認します...
Valmiky Arquissandas '25 / 07/25

私は、直接内部のコードを実行することにより、(成功ipython、および変更map(int, line)map(ord, line)、そして新しい絵で質問を更新しました。
Valmiky Arquissandas

1年かかったが、この回答を受け入れることにした。そのビットストリームが何であるかはまだわかりませんが、おそらくわかりません。しかし、それは素晴らしいパターンを持っています!
Valmiky Arquissandas 2015

1

信号解析についてはほとんど何も知りませんが、Rを使用すると2次元の視覚化を簡単に行うことができます。特にreshape2ggplot2パッケージとパッケージが必要になります。データが広い(たとえば[n X 256]サイズ)と仮定すると、まず、パッケージの関数を使用して、データをロングフォーマットに変換する必要があります。次に、のジオメトリを使用します。ここに要旨の素敵なレシピがあります。melt()reshape2geom_tileggplot2


2
4 GBを超えるデータです。私はそれをstdinまたは同様のものから読んでプロットする必要があります。すべてをRAMにロードすることは悪い考えです。私はあなたが数日で言ったことを見ていきます-そしてうまくいけば、起こり得る他のアイデア-そして私はそれがどのように進んだかをあなたに知らせます、ありがとう!
Valmiky Arquissandas 2014

それをロードしてデータフレームのように扱わないでください。データフレームではなく、バイトのストリームです。
Spacedman、2014

1

raster生のバイナリデータを読み取ってNxMグリッドとして表示できる、このパッケージを見てみます。ファイル全体を読み込まなくても、大きなバイナリグリッドのサブセットを抽出することもできます(Rラスタオブジェクト自体は、データ自体ではなく、データのプロキシにすぎません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.