मैंने कई महीनों तक पांडा सीखने के दौरान इस प्रश्न के उत्तर को जानने की कोशिश की है। मैं अपने दिन-प्रतिदिन के काम के लिए एसएएस का उपयोग करता हूं और यह आउट-ऑफ-कोर समर्थन के लिए बहुत अच्छा है। हालांकि, एसएएस कई अन्य कारणों से सॉफ्टवेयर के एक टुकड़े के रूप में भयानक है।
एक दिन मुझे आशा है कि मैं अपने उपयोग को अजगर और पांडा के साथ बदल दूंगा, लेकिन मुझे वर्तमान में बड़े डेटासेट के लिए आउट-ऑफ-कोर वर्कफ़्लो की कमी है। मैं "बड़े डेटा" के बारे में बात नहीं कर रहा हूं जिसके लिए एक वितरित नेटवर्क की आवश्यकता होती है, बल्कि मेमोरी में फिट होने के लिए बहुत बड़ी फाइलें हैं लेकिन हार्ड-ड्राइव पर फिट होने के लिए पर्याप्त छोटा है।
मेरा पहला विचार HDFStore
डिस्क पर बड़े डेटासेट को पकड़ना और विश्लेषण के लिए डेटाफ्रेम में मेरी ज़रूरत के टुकड़ों को खींचना है। दूसरों ने वैकल्पिक उपयोग करने के लिए एक आसान के रूप में MongoDB का उल्लेख किया है। मेरा सवाल यह है:
निम्नलिखित को पूरा करने के लिए कुछ सर्वोत्तम अभ्यास वर्कफ़्लो क्या हैं:
- एक स्थायी, ऑन-डिस्क डेटाबेस संरचना में फ्लैट फ़ाइलों को लोड करना
- उस डेटाबेस को छोड़कर एक पांडा डेटा संरचना में फीड करने के लिए डेटा को पुनः प्राप्त करना
- पांडा में टुकड़ों में हेरफेर करने के बाद डेटाबेस को अपडेट करना
वास्तविक दुनिया के उदाहरणों की बहुत सराहना की जाएगी, खासकर किसी से भी जो "बड़े डेटा" पर पांडा का उपयोग करता है।
संपादित करें - इस बात का एक उदाहरण कि मैं कैसे काम करना चाहूंगा:
- Iteratively एक बड़े फ्लैट-फ़ाइल को आयात करें और इसे एक स्थायी, डिस्क-डिस्क संरचना में संग्रहीत करें। ये फाइलें आम तौर पर मेमोरी में फिट होने के लिए बहुत बड़ी हैं।
- पंडों का उपयोग करने के लिए, मैं इस डेटा के सबसेट (आमतौर पर एक समय में केवल कुछ कॉलम) को पढ़ना चाहूंगा जो स्मृति में फिट हो सकता है।
- मैं चयनित कॉलमों पर विभिन्न ऑपरेशन करके नए कॉलम बनाऊंगा।
- फिर मुझे डेटाबेस संरचना में इन नए कॉलमों को जोड़ना होगा।
मैं इन चरणों को करने का सबसे अच्छा तरीका खोजने की कोशिश कर रहा हूं। पांडा और पाइब्लेट्स के बारे में लिंक पढ़ने से ऐसा लगता है कि एक नए कॉलम को जोड़ना एक समस्या हो सकती है।
संपादित करें - विशेष रूप से जेफ के सवालों का जवाब:
- मैं उपभोक्ता ऋण जोखिम मॉडल का निर्माण कर रहा हूं। डेटा के प्रकार में फोन, एसएसएन और पते की विशेषताएं शामिल हैं; सम्पत्ति की कीमत; अपमानजनक जानकारी जैसे आपराधिक रिकॉर्ड, दिवालिया, आदि ... मैं जो डेटासेट हर दिन उपयोग करता हूं, उनमें मिश्रित डेटा प्रकारों के औसत पर लगभग 1,000 से 2,000 फ़ील्ड हैं: संख्यात्मक और चरित्र डेटा दोनों के निरंतर, नाममात्र और क्रमिक चर। मैं शायद ही कभी पंक्तियों को जोड़ता हूं, लेकिन मैं कई ऑपरेशन करता हूं जो नए कॉलम बनाते हैं।
- विशिष्ट कार्यों में नए, मिश्रित कॉलम में सशर्त तर्क का उपयोग करते हुए कई स्तंभों का संयोजन शामिल है। उदाहरण के लिए,
if var1 > 2 then newvar = 'A' elif var2 = 4 then newvar = 'B'
। इन परिचालनों का परिणाम मेरे डेटासेट के हर रिकॉर्ड के लिए एक नया कॉलम है। - अंत में, मैं इन नए कॉलम को ऑन-डिस्क डेटा संरचना में जोड़ना चाहूंगा। मैं चरण 2 को दोहराऊंगा, मॉडल के लिए दिलचस्प, सहज संबंधों को खोजने की कोशिश कर रहे क्रॉस्टैब्स और वर्णनात्मक आंकड़ों के साथ डेटा की खोज करना।
- एक सामान्य प्रोजेक्ट फ़ाइल प्रायः 1GB की होती है। फ़ाइलों को इस तरह से व्यवस्थित किया जाता है जहां एक पंक्ति में उपभोक्ता डेटा का रिकॉर्ड होता है। प्रत्येक पंक्ति में प्रत्येक रिकॉर्ड के लिए समान कॉलम होते हैं। हमेशा ऐसा ही रहेगा।
- यह बहुत दुर्लभ है कि मैं एक नया कॉलम बनाते समय पंक्तियों द्वारा कम कर दूंगा। हालाँकि, रिपोर्ट बनाते समय या वर्णनात्मक आँकड़े उत्पन्न करते समय मेरे लिए पंक्तियों पर कम करना बहुत आम है। उदाहरण के लिए, मैं व्यापार की एक विशिष्ट पंक्ति के लिए एक सरल आवृत्ति बनाना चाह सकता हूं, खुदरा क्रेडिट कार्ड कहता हूं। ऐसा करने के लिए, मैं केवल उन्हीं अभिलेखों का चयन करूँगा जहाँ पर मैं रिपोर्ट करना चाहता हूँ, जो भी कॉलम के अलावा व्यापार की रेखा = खुदरा। हालांकि, नए कॉलम बनाते समय, मैं डेटा की सभी पंक्तियों को खींच लूंगा और केवल उन कॉलमों की आवश्यकता होगी जो मुझे संचालन के लिए चाहिए।
- मॉडलिंग प्रक्रिया के लिए आवश्यक है कि मैं हर कॉलम का विश्लेषण करूँ, कुछ परिणाम चर के साथ दिलचस्प रिश्तों की तलाश करूँ और उन संबंधों का वर्णन करने वाले नए यौगिक कॉलम बनाऊँ। मेरे द्वारा खोजे गए कॉलम आमतौर पर छोटे सेटों में किए जाते हैं। उदाहरण के लिए, मैं संपत्ति के मूल्यों से निपटने के लिए 20 कॉलमों के एक सेट पर ध्यान केंद्रित करूंगा और यह देखूंगा कि वे एक ऋण पर डिफ़ॉल्ट से कैसे संबंधित हैं। एक बार जब उन लोगों की खोज की जाती है और नए कॉलम बनाए जाते हैं, तो मैं दूसरे कॉलम के समूह में जाता हूं, कॉलेज की शिक्षा और प्रक्रिया को दोहराता हूं। मैं जो कर रहा हूं वह उम्मीदवार चर बना रहा है जो मेरे डेटा और कुछ परिणामों के बीच संबंध की व्याख्या करता है। इस प्रक्रिया के अंत में, मैं कुछ सीखने की तकनीकों को लागू करता हूं जो उन यौगिक स्तंभों से एक समीकरण बनाते हैं।
यह दुर्लभ है कि मैं कभी डेटासेट में पंक्तियों को जोड़ूंगा। मैं लगभग हमेशा नए कॉलम (आंकड़े / मशीन सीखने की स्थिति में चर या सुविधाएँ) बनाता रहूंगा।