패턴 분석을위한 데이터 시각화 (언어 독립적이지만 R 선호)


11

패턴을 이해하기 위해 디스크 이미지에서 바이트를 플로팅하려고합니다. 디스크 테스트 프로그램에 의해이 패턴이 생성 된 것이 거의 확실하기 때문에 이것은 주로 학술적인 작업이지만 어쨌든 리버스 엔지니어링하고 싶습니다.

256 자 주기로 패턴이 정렬되어 있음을 이미 알고 있습니다.

이 정보를 시각화하는 두 가지 방법, 즉 각 픽셀의 색상이 문자의 ASCII 코드 인 16x16 평면 (3 차원) 또는 각 기간의 256 픽셀 선 (2 차원)입니다.

이것은 xxd(32x16)을 통해 본 패턴의 스냅 샷입니다 (하나 이상을 볼 수 있음).

분석 할 패턴

어느 쪽이든, 나는이 정보를 시각화하는 방법을 찾으려고 노력하고 있습니다. 이것은 아마도 신호 분석에 어려움이 없지만 오픈 소스 소프트웨어를 사용하는 방법을 찾지 못하는 것 같습니다.

Matlab 또는 Mathematica를 피하고 싶습니다. 최근에 배우고 있기 때문에 R에서 답을 원합니다. 그러나 그럼에도 불구하고 모든 언어를 환영합니다.


2014-07-25 업데이트 : 아래 Emre의 대답이 주어지면 패턴의 첫 30MB가 256이 아닌 512로 정렬되어 패턴이 어떻게 생겼는지입니다 (이 정렬이 더 좋아 보입니다).

그래픽 패턴

더 이상의 아이디어는 환영합니다!


데이터의 예 / 발췌 (몇몇 MB에 불과)가 흥미로울 수 있습니다.
Marco13

데이터의주기적인 특성에 관심이 있다면 데이터의 DFT를 살펴 보는 것이 드러날 수 있습니다.
mrmcgreg

@ mrmcgreg : DFT 작동 방식을 다시 배워야합니다. 나는 신호 및 시스템 클래스에 더 많은 관심을 기울여야했다 :)
Valmiky Arquissandas

답변:


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 바이트를 모두 같은 줄에 넣은 이미지를 표시 할 수 있으며 텍스트에서 이미 분명합니다. 나는 무엇이 나올지 궁금합니다. :)
Valmiky Arquissandas

데비안 리눅스에서는 이것을 실행할 수 없습니다. 나는 패키지를 설치 python-scitools하고 ipython. 오류 메시지는 ValueError: invalid literal for int() with base 10: '#'입니다. 어쨌든 작동시킬 수 있는지 볼 수 있습니다 ...
Valmiky Arquissandas

내가 직접 내부의 코드를 실행하여 (성공 ipython하고, 변화 map(int, line)map(ord, line), 새로운 그림과 질문을 업데이트했습니다.
Valmiky Arquissandas에게

1 년이 걸렸지 만이 답변을 수락하기로 결정했습니다. 나는 여전히 그 비트 스트림이 무엇인지 알지 못하지만 아마 알지 못할 것입니다. 그래도 멋진 패턴이 있습니다!
Valmiky Arquissandas

1

신호 분석에 대해서는 거의 아무것도 모르지만 R을 사용하여 2 차원 시각화를 쉽게 수행 할 수 있습니다. 특히 필요 reshape2하고 ggplot2패키지 할 것 입니다. 데이터를 가정입니다 넓은 먼저로 변환해야합니다 (예 : [N X 256] 크기) 오래 사용하여 형식 melt()에서 기능을 reshape2패키지로 제공된다. 그런 다음의 geom_tile지오메트리를 사용하십시오 ggplot2. 여기 에 요점을 가진 좋은 요리법 이 있습니다.


2
4GB가 넘는 데이터입니다. 나는 stdin이나 비슷한 것을 읽음으로써 그것을 그려야합니다. 모든 것을 RAM에로드하는 것은 좋지 않습니다. 나는 며칠 동안 당신이 한 말을 살펴보고, 다른 아이디어가 생길 수 있기를 바랍니다. 그리고 어떻게되었는지 알려 드리겠습니다. 감사합니다!
Valmiky Arquissandas

그것을로드하지 않고 데이터 프레임이 아닌 데이터 프레임처럼 취급합니다.
Spacedman

1

raster원시 바이너리 데이터를 읽고 NxM 그리드로 표시 할 수 있는 패키지를 살펴 보겠습니다 . 전체 파일을 읽을 필요없이 큰 이진 그리드의 하위 집합을 추출 할 수도 있습니다 (R 래스터 객체 자체는 데이터 자체가 아니라 데이터에 대한 프록시 일뿐입니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.