पैटर्न विश्लेषण के लिए डेटा विज़ुअलाइज़ेशन (भाषा-स्वतंत्र, लेकिन आर पसंदीदा)


11

मैं उनमें एक पैटर्न को समझने के लिए डिस्क छवि से बाइट्स प्लॉट करना चाहता हूं। यह मुख्य रूप से एक अकादमिक कार्य है, क्योंकि मुझे लगभग यकीन है कि यह पैटर्न डिस्क परीक्षण कार्यक्रम द्वारा बनाया गया था, लेकिन मैं इसे वैसे भी रिवर्स-इंजीनियर करना चाहूंगा।

मुझे पहले से ही पता है कि पैटर्न संरेखित है, जिसमें 256 वर्णों की आवधिकता है।

मैं इस जानकारी को देखने के दो तरीकों की कल्पना कर सकता हूं: या तो एक 16x16 विमान समय (3 आयामों) के माध्यम से देखा जाता है, जहां प्रत्येक पिक्सेल का रंग चरित्र के लिए एएससीआईआई कोड है, या प्रत्येक अवधि (2 आयाम) के लिए 256 पिक्सेल रेखा है।

यह पैटर्न का एक स्नैपशॉट है (आप एक से अधिक देख सकते हैं), xxd(32x16) के माध्यम से देखा जा सकता है :

विश्लेषण करने के लिए पैटर्न

किसी भी तरह से, मैं इस जानकारी की कल्पना करने का एक तरीका खोजने की कोशिश कर रहा हूं। यह संभवत: सिग्नल विश्लेषण में किसी के लिए भी मुश्किल नहीं है, लेकिन मैं ओपन-सोर्स सॉफ़्टवेयर का उपयोग करके कोई रास्ता नहीं खोज सकता।

मैं मतलाब या गणितज्ञ से बचना चाहूंगा और मैं आर में उत्तर देना चाहूंगा, क्योंकि मैं इसे हाल ही में सीख रहा हूं, लेकिन फिर भी, किसी भी भाषा का स्वागत है।


अपडेट, २०१४-० this-२५: नीचे दिए गए एमरे का उत्तर, यह वही है जो पैटर्न जैसा दिखता है, पैटर्न के पहले ३० एमबी को देखते हुए, २५६ के बजाय ५१५ पर संरेखित किया गया (यह संरेखण बेहतर दिखता है):

चित्रमय पैटर्न

किसी भी आगे के विचारों का स्वागत है!


डेटा का एक उदाहरण / उद्धरण (शायद केवल कुछ एमबी) दिलचस्प हो सकता है।
मार्को 13

यदि आप डेटा की आवधिक प्रकृति में रुचि रखते हैं, तो डेटा के डीएफटी पर एक नज़र डाल सकते हैं।
mrmcroup

@mrmcgreg: मुझे फिर से सीखना होगा कि DFT कैसे काम करता है। मुझे सिग्नल और सिस्टम क्लासेस पर अधिक ध्यान देना चाहिए :)
वाल्मीकि अर्कविंडस

जवाबों:


5

मैं एक दृश्य विश्लेषण का उपयोग करूंगा। चूँकि आप जानते हैं कि प्रत्येक 256 बाइट्स में एक पुनरावृत्ति होती है, हालाँकि बहुत से गहरे द्वारा 256 पिक्सेल चौड़ी एक छवि बनाते हैं, और चमक का उपयोग करके डेटा को एनकोड करते हैं। में (i) अजगर ऐसा लगेगा:

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 जैसा दिखता है:

एक पीडीएफ फाइल की कल्पना की

एक 256 बाइट आवधिक पैटर्न ऊर्ध्वाधर लाइनों के रूप में प्रकट होता। शीर्ष लेख और पूंछ को छोड़कर यह बहुत शोर दिखता है।


यह काफी वैसा दिखता है जैसा मैं देख रहा हूं। मैं अब फाइनल के लिए अध्ययन कर रहा हूं और इस बारे में दोबारा सोचने के लिए समय नहीं दे पा रहा हूं, लेकिन जैसे ही मैं आपको बताऊंगा। "एक 256 बाइट आवधिक पैटर्न ऊर्ध्वाधर रेखाओं के रूप में प्रकट हुआ होगा।" - बिल्कुल मैं क्या सोच रहा था। मैं एक छवि भी दिखा सकता हूं जहां मैंने एक ही पंक्ति में सभी 256 बाइट्स डाल दिए हैं, और यह पहले से ही पाठ में स्पष्ट है। मैं इस बारे में काफी उत्सुक हूं कि इससे क्या होगा :)
वाल्मीकि अर्कविंडस

मैं डेबियन लिनक्स पर इसे चलाने के लिए प्रतीत नहीं कर सकता। मैं संकुल स्थापित python-scitoolsऔर ipython। त्रुटि संदेश है ValueError: invalid literal for int() with base 10: '#'। मैं देखूंगा कि क्या मैं इसे किसी भी तरह से काम कर सकता हूं ...
वाल्मीकि अरकिंडदास

मैं कोड सीधे अंदर चलाकर (सफल रहा ipython, और बदलते map(int, line)करने के लिए map(ord, line), और नए चित्र के साथ सवाल अपडेट किया गया।
Valmiky Arquissandas

मुझे एक साल लगा, लेकिन मैंने इस जवाब को स्वीकार करने का फैसला किया। मुझे अभी भी नहीं पता कि वह बिटस्ट्रीम क्या है, लेकिन मुझे शायद पता नहीं चलेगा। यह एक अच्छा पैटर्न है, हालांकि!
वाल्मीकि अर्किसंदास २०'१५ को १०:१२

1

मुझे संकेत विश्लेषण के बारे में लगभग कुछ भी नहीं पता है, लेकिन 2-आयामी विज़ुअलाइज़ेशन आसानी से आर का उपयोग करके किया जा सकता है। विशेष रूप से आपको आवश्यकता होगी reshape2और ggplot2पैकेज। यह मानते हुए कि आपका डेटा विस्तृत है (जैसे [n X 256] आकार), पहले आपको पैकेज से फ़ंक्शन का उपयोग करके इसे लंबे प्रारूप में बदलना होगा । फिर से ज्यामिति का उपयोग करें । यहाँ जिस्ट के साथ एक अच्छा नुस्खा हैmelt()reshape2geom_tileggplot2


2
यह 4 जीबी से अधिक डेटा है। मुझे इसे स्टिनड या कुछ इसी तरह से पढ़कर प्लॉट करना चाहिए। सब कुछ रैम पर लोड करना एक बुरा विचार है। एक दो दिनों में आपने जो कहा है, उस पर एक नज़र डालूंगा - और उम्मीद है, कोई भी अन्य विचार जो उत्पन्न हो सकता है - और मैं आपको बताऊंगा कि यह कैसे हुआ, धन्यवाद!
वाल्मीकि अर्किंडदास

इसे लोड न करें और इसे डेटाफ्रेम की तरह मानें, इसका डेटाफ्रेम नहीं, इसकी बाइट्स की एक धारा।
१२:०४ पर स्पेसमैन

1

मैं इसके लिए rasterपैकेज को देखूंगा, जो कच्चे बाइनरी डेटा में पढ़ सकता है और इसे एनएक्सएम ग्रिड के रूप में प्रस्तुत कर सकता है। यह पूरी फ़ाइल में पढ़ने के बिना बड़े बाइनरी ग्रिड के सबसेट को भी हटा सकता है (आर रेखापुंज वस्तु ही डेटा के लिए केवल एक प्रॉक्सी है, डेटा ही नहीं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.