2009-06-19 11 views
6

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

अभी, मेरे पास तालिका में प्रत्येक पंक्ति के लिए टुपल्स के सेट से एक प्रगति है, एक हिस्टोग्राम में, ब्याज के tuples की उपस्थिति की आवृत्तियों की गिनती, एक serializer करने के लिए - कुछ हद तक बेकार - compiles प्रदर्शन के लिए टेबल कोशिकाओं के एक सेट में आउटपुट। हालांकि, मैं तालिका में या हिस्टोग्राम में जितनी बार चाहूं उतनी बार वापस जाना चाहता हूं क्योंकि वहां पर्याप्त जानकारी नहीं है।

तो, कोई विचार?

संपादित करें: यहां कुछ डेटा का एक उदाहरण दिया गया है, और मैं से इसे बनाने में सक्षम होना चाहता हूं। ध्यान दें कि "।" कुछ 'गायब' डेटा को इंगित करता है, जो केवल सशर्त रूप से गिना जाता है।

1 . 1 
1 0 3 
1 0 3 
1 2 3 
2 . 1 
2 0 . 
2 2 2 
2 2 4 
2 2 . 

अगर मैं कॉलम 0 और इसके बाद के संस्करण 2 के बीच संबंध पर देख रहे थे, इस तालिका है मैं होगा:

. 1 2 3 4 
1 0 1 0 3 0 
2 2 1 1 0 1 

इसके अलावा, मैं अनुपात की गणना करने में सक्षम होना चाहते हैं आवृत्ति/कुल, आवृत्ति/subtotal, & सी।

+0

यह मेरे लिए बहुत स्पष्ट तुम क्या करने की कोशिश कर रहे हैं क्या नहीं है। क्या आप या तो कुछ डेटा के साथ आवश्यकताओं का वर्णन कर सकते हैं या उदाहरण दे सकते हैं और उन परिवर्तनों को दिखा सकते हैं जिन्हें आप करना चाहते हैं? –

+0

इस उदाहरण में आप कॉलम प्रमुख क्रम में इसे लिखना बेहतर होगा। – jonnii

+0

जॉनी, मैं एक सांख्यिकीविद् ज्यादा नहीं हूं; क्या आप इसका स्पष्टीकरण दे सकते हैं कि इसका मतलब क्या है? –

उत्तर

1

आप डेटा संरचना के रूप में sqlite डेटाबेस में इन-मेमोरी का उपयोग कर सकते हैं, और वांछित संचालन को SQL क्वेरी के रूप में परिभाषित कर सकते हैं।

import sqlite3 

c = sqlite3.Connection(':memory:') 
c.execute('CREATE TABLE data (a, b, c)') 

c.executemany('INSERT INTO data VALUES (?, ?, ?)', [ 
    (1, None, 1), 
    (1, 0, 3), 
    (1, 0, 3), 
    (1, 2, 3), 
    (2, None, 1), 
    (2, 0, None), 
    (2, 2, 2), 
    (2, 2, 4), 
    (2, 2, None), 
]) 

# queries 
# ... 
-1

HTML टेबल्स का उपयोग करके इसे स्टोर क्यों न करें? यह सबसे अच्छा नहीं हो सकता है, लेकिन आप इसे आसानी से ब्राउज़र में देख सकते हैं।

संपादित करें:

मैं सिर्फ सवाल फिर से पढ़ सकते हैं और आप डेटा मॉडल, नहीं एक भंडारण मॉडल के लिए पूछ रहे हैं। उस प्रश्न का उत्तर देने के लिए ...

यह सब इस बात पर निर्भर करता है कि आप डेटा पर रिपोर्टिंग कैसे करेंगे। उदाहरण के लिए यदि आप बहुत सारे पिवोटिंग या एग्रीगेशन करने जा रहे हैं तो इसे कॉलम प्रमुख ऑर्डर में स्टोर करने के लिए और अधिक समझ हो सकती है, इस प्रकार आप उदाहरण के लिए गणना करने के लिए सिर्फ एक कॉलम जोड़ सकते हैं।

यदि आप समझाते हैं कि आप किस प्रकार की जानकारी निकालने का प्रयास कर रहे हैं तो यह बहुत मदद करेगा।

+0

मुझे यकीन नहीं है कि वास्तव में किस प्रकार का डेटा है; अभ्यास एक समय में एक कदम से बाहर निकल रहे हैं (चरण 1: टैब से अलग फ़ाइल पढ़ें और कॉलम 1/2 में पिन गिनें (पिवोट टेबल?/मुझे विकिपीडिया से घूमती है ...) मान लीजिए कि मैं करना चाहता हूं यहां सबकुछ: http://en.wikipedia.org/wiki/Cross_tabulation#Statistics_related_to_cross_tabulations –

+1

कॉलम में गिनती जोड़े द्वारा आपका क्या मतलब है? – jonnii

0

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

1

एस डब्ल्यू a good basic recipe for this on activestate.com पोस्ट किया गया है।

सार ऐसा लगता है ...

  1. xsort = [] और ysort = [] को अपने अक्षों के सरणी के रूप में परिभाषित करें। अपने डेटा, या किसी अन्य तरीके से पुनरावृत्ति करके उन्हें पॉप्युलेट करें।
  2. अपने डेटा के माध्यम से पुनरावृत्ति करके और आरएस [yvalue] [xvalue] को बढ़ाकर, अपने सारणीबद्ध डेटा के डिक्ट्स के एक नियम के रूप में आरएस = {} को परिभाषित करें। यदि आवश्यक हो तो लापता कुंजी बनाएं।

तो उदाहरण के लिए पंक्ति y के लिए कुल लागत यह होगी sum([rs[y][x] for x in xsort])

संबंधित मुद्दे