डेटा को साफ़ करने के लिए संगठित प्रक्रियाएँ


34

R का उपयोग करके डेटा साइंस के साथ मेरी सीमित डबलिंग से, मुझे एहसास हुआ कि खराब डेटा को साफ करना विश्लेषण के लिए डेटा तैयार करने का एक बहुत महत्वपूर्ण हिस्सा है।

क्या इसे संसाधित करने से पहले डेटा को साफ करने के लिए कोई सर्वोत्तम अभ्यास या प्रक्रियाएं हैं? यदि हां, तो क्या कोई स्वचालित या अर्ध-स्वचालित उपकरण हैं जो इनमें से कुछ सर्वोत्तम प्रथाओं को लागू करते हैं?


1
शायद यह थोड़ा सा स्पष्ट है कि आप डेटा की सफाई के तहत क्या मतलब रखते हैं , मेरी राय के लिए थोड़ा भ्रामक लगता है
मोलबोर्ग

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

जवाबों:


21

आर कुछ शामिल मानक डेटा हेरफेर के लिए काम करता है, जो डेटा सफाई के लिए इस्तेमाल किया जा सकता है अपने में आधार पैकेज ( gsub, transformजैसे, आदि), और साथ ही में विभिन्न तृतीय-पक्ष संकुल, stringr , आकृति बदलें / reshape2 , और plyr / dplyr । इन पैकेजों और उनके कार्यों के उपयोग के उदाहरण और सर्वोत्तम अभ्यास निम्नलिखित पेपर में वर्णित हैं: http://vita.had.co.nz/papers/tidy-data.pdf

इसके अतिरिक्त, R कुछ संकुल विशेष रूप से डेटा की सफाई और परिवर्तन पर केंद्रित है :

आर में डेटा की सफाई के लिए एक व्यापक और सुसंगत दृष्टिकोण , जिसमें एडिट्रूल्स और ड्यूरेक्टोरेट पैकेज के उदाहरण और उपयोग के साथ-साथ आर में डेटा की सफाई के वर्कफ़्लो ( फ्रेमवर्क ) का विवरण निम्नलिखित पेपर में प्रस्तुत किया गया है, जिसे मैं अत्यधिक अनुशंसा करता हूं: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf


2
मैं यह भी dplyrजोड़ूंगा, जो कि कुछ plyrउपकरणों का एक अनुकूलित रीफ़्रैशिंग है , और data.tableजो डेटा में हेरफेर करने के लिए एक पूरी तरह से अलग दृष्टिकोण है। हैडली विकम द्वारा दोनों।
छायाकार

@ssdecontrol: मैं सहमत हूँ - जवाब अपडेट किया गया। हैडली dplyrपैकेज के लेखक हैं , लेकिन data.tableएक के नहीं।
असेम्बली ब्लेक ऑक्स

16

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

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

उदाहरण के लिए, उन लोगों के लिए जो सोशल वेबसाइटों (ट्विटर, फेसबुक, ...) से आने वाले डेटा से निपटते हैं, द डेटा पुनर्प्राप्ति आमतौर पर बहुत विशिष्ट प्रारूप के साथ फाइल प्राप्त करता है - हालांकि हमेशा अच्छी तरह से संरचना नहीं होती है, क्योंकि उनमें लापता फ़ील्ड हो सकते हैं, और इसी तरह । इन मामलों के लिए, एक साधारण awkस्क्रिप्ट डेटा को साफ कर सकती है, जो बाद के प्रसंस्करण के लिए एक वैध इनपुट फ़ाइल का निर्माण करती है । जादू सेट से, एक यह भी कहना है हो सकता है grep, sed, cut, join, paste, sort, और अन्य उपकरणों की एक पूरी भीड़।

यदि सरल स्रोत फ़ाइल में बहुत अधिक मात्रा में ग्रिटियाँ हैं, तो डेटा को साफ करने के लिए तरीकों का एक बंडल तैयार करना भी आवश्यक हो सकता है। ऐसे मामलों में, आमतौर पर स्क्रिप्टिंग भाषाओं (शेल के अलावा अन्य) का उपयोग करना बेहतर होता है, जैसे कि पायथन, रूबी, और पर्ल। यह एपीआई के निर्माण के लिए एक बहुत ही सीधे और पुन: प्रयोज्य तरीके से विशिष्ट डेटा का चयन करने की अनुमति देता है । इस तरह के एपीआई को कभी-कभी उनके लेखकों द्वारा सार्वजनिक किया जाता है, जैसे आईएमडीबीपीवाई , स्टैक एक्सचेंज एपीआई और कई अन्य।

तो, सवाल का जवाब देना: क्या कोई सर्वोत्तम प्रथाएं हैं? यह आमतौर पर आपके कार्य पर निर्भर करता है। यदि आप हमेशा एक ही डेटा प्रारूप के साथ व्यवहार करेंगे, तो आमतौर पर इसे आयोजित करने के लिए एक संगठित स्क्रिप्ट लिखना सबसे अच्छा है; जबकि, अगर आपको कुछ डेटासेट पर एक सरल और तेज़ सफाई की आवश्यकता है, तो संक्षिप्त स्क्रिप्ट के लिए POSIX टूल पर गणना करें जो कि संपूर्ण काम करेगा पायथन स्क्रिप्ट की तुलना बहुत तेज़ी से करेगा, या इसी तरह। चूंकि क्लीन अप डेटासेट और आपके उद्देश्यों दोनों पर निर्भर करता है, इसलिए यह सब कुछ पहले से ही करना मुश्किल है। फिर भी, एपीआई के बहुत सारे हैं जो आपको समस्या से आधे रास्ते में डालते हैं।


एचएम - डेटा प्राप्त करें, फॉर्मेट डेटा (awk sed grep सामान), पहले चरण के रूप में शोर निकालें, फिर गहराई पर जाएं। ऐसा करना मुश्किल नहीं है , अगर आपके
थर्मस का

@MolbOrg हां, मेरा यही मतलब है। मैं बुलाया preprocessing कठिन पटकथा पक्ष , और preprocessing नरम है कि आम तौर पर कम करने डाटा माइनिंग एल्गोरिदम के उपयोग के आकार समस्या (डेटाबेस को साफ) के। मैंने यह भी कहा कि दूसरा भाग, कठिन प्रीप्रोसेसिंग, वास्तव में किसी अन्य प्रक्रिया से पहले आता है । यदि इस तरह के शब्दों के साथ यह बहुत स्पष्ट नहीं है, तो मैं उत्तर को बेहतर बनाने के लिए किसी अन्य सुझाव पर खुशी से विचार करूंगा।
रूबेंस

1
आह हाँ, पर्याप्त ध्यान नहीं दिया, कच्चे डेटा preprocessing । परीक्षण किया गया - हाँ perl oneliner 300MB में 3.5kk स्ट्रिंग्स के लिए 3times धीमा है तो grep) है, perl के लिए यह 1.1 सेकंड लिया गया, grep 0.31 सेकंड के लिए। मैंने उस लेख को देखा जहां बिंदु regexp धीमा है, बहुत धीमा है तो यह व्यवहार में हो सकता है, (मुझे संदेह है कि grep के लिए भी है) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@MolbOrg अच्छा संदर्भ! AFAIK, grepडिफ़ॉल्ट रूप से POSIX बेसिक रेगेक्स का उपयोग करता है, और जब चलता है grep -E, और तब PCRE के रूप में चलाने के लिए विस्तारित POSIX रेगेक्स की अनुमति देता है grep -P
रूबेंस

1
यह बहुत अच्छी पोस्ट है। डेटा हेरफेर के लिए आर उत्कृष्ट है, लेकिन स्ट्रिंग हेरफेर के लिए इसकी क्रिया सिंटैक्स के कारण डेटा की सफाई के साथ बहुत बोझिल हो सकता है और डेटा संरचनाओं के लिए सूचियों और मैट्रिक्स के लिए काफी कठोर पालन हो सकता है।
छायाकार

11

एक कारण यह है कि डेटा की सफाई शायद ही कभी पूरी तरह से स्वचालित होती है, यह निर्धारित करने के लिए बहुत अधिक निर्णय की आवश्यकता होती है कि "क्लीन" का अर्थ है कि आपकी विशेष समस्या, तरीके और लक्ष्य क्या हैं।

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

इसके अलावा, कुछ डेटा विश्लेषण विधियाँ बेहतर काम करती हैं जब गलत या गुम डेटा को छोड़ दिया जाता है (या एन / ए) के बजाय प्रतिरूपण या डिफ़ॉल्ट मान दिया जाता है। यह सच है जब अनिश्चितता और अज्ञानता का स्पष्ट प्रतिनिधित्व होता है, जैसे डेम्पस्टर-शफर विश्वास कार्य।

अंत में, सफाई प्रक्रिया के लिए विशिष्ट निदान और मैट्रिक्स होना उपयोगी है। गुम या गलत मानों को बेतरतीब ढंग से वितरित किया जाता है या क्या वे किसी भी तरह से केंद्रित हैं जो विश्लेषण के परिणाम को प्रभावित कर सकते हैं। यह देखने के लिए वैकल्पिक सफाई रणनीतियों या एल्गोरिदम के प्रभावों का परीक्षण करना उपयोगी है कि क्या वे अंतिम परिणामों को प्रभावित करते हैं।

इन चिंताओं को देखते हुए, मुझे किसी भी विधि या प्रक्रिया पर बहुत संदेह है जो सतही, घुड़सवार या पूर्ण-स्वचालित फैशन में डेटा सफाई का इलाज करती है। उन विवरणों में कई शैतान छिपे हुए हैं और यह उन्हें गंभीर ध्यान देने के लिए भुगतान करता है।


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

हाँ! डेटा त्रुटियां अक्सर प्रक्रिया की समस्याओं के संकेत हैं। यह जानते हुए कि इस प्रक्रिया में त्रुटियों को कहां प्रस्तुत किया गया था और तंत्र भी, सफाई प्रक्रिया में बहुत मदद करेगा। लेकिन बेहतर अभी भी प्रक्रिया की समस्याओं को ठीक करना है ताकि वे स्वच्छ (या क्लीनर) डेटा का उत्पादन करें।
श्रीमेरिटोलॉजी जूल 15'14

5

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

इस तरह की त्रुटियां अत्यधिक डोमेन पर निर्भर होती हैं - इसलिए उन्हें खोजने के लिए, आपके पास डोमेन ज्ञान होना चाहिए, ऐसा कुछ जिस पर मनुष्य उत्कृष्टता प्राप्त करते हैं, स्वचालित प्रक्रियाएं इतनी अधिक नहीं हैं।

जहाँ आप कर सकते हैं और स्वचालित होना चाहिए दोहराया परियोजनाओं है। उदाहरण के लिए एक रिपोर्ट जिसका मासिक उत्पादन किया जाना है। यदि आप त्रुटियां करते हैं, तो आपको कुछ स्वचालित प्रक्रिया रखनी चाहिए जो बाद के महीनों में इस प्रकार की त्रुटियों को आपके समय से मुक्त कर सकें।


5

मुझे लगता है कि वास्तविक शोध करने से पहले "सफाई" डेटा के लिए कोई सार्वभौमिक तकनीक नहीं है। दूसरी ओर, मैं जितना संभव हो उतना प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान करने का लक्ष्य बना रहा हूं । प्रतिलिपि प्रस्तुत करने योग्य अनुसंधान करके, यदि आपने बग के साथ या खराब मापदंडों / मान्यताओं के साथ सफाई तकनीकों का उपयोग किया है तो यह दूसरों द्वारा स्पॉट किया जा सकता है।

अच्छा आर पैकेज निट है जो प्रजनन योग्य अनुसंधान में बहुत मदद करता है।

बेशक, सभी शोधों को पूरी तरह से पुन: पेश नहीं किया जा सकता है (उदाहरण के लिए ट्विटर डेटा लाइव), लेकिन कम से कम आप आसानी से सफाई, स्वरूपण और प्रीप्रोसेसिंग दस्तावेज़ों का दस्तावेजीकरण कर सकते हैं।

आप कौरसेरा में रिप्रोड्यूसियल रिसर्च कोर्स के लिए तैयार मेरे मूल्यांकन की जांच कर सकते हैं ।


3

OpenRefine (पूर्व में Google Refine) एक महान उपकरण है, जहाँ आप अंतःक्रियात्मक रूप से डेटा क्लीनअप और ट्रांसफ़ॉर्मेशन कर सकते हैं। आपके अंतिम आउटपुट को विभिन्न प्रकार के मानक प्रारूपों (json, csv) या किसी भी कस्टम प्रारूप (जैसे: विकि) में निर्यात किया जा सकता है।

सटीक डुप्लिकेट को OpenRefine में "खाली डाउन" सुविधा का उपयोग करके सॉर्ट किया जा सकता है। इसके अलावा इसमें अनुमानित स्ट्रिंग (फजी) क्लस्टरिंग सुविधा है जहां आप समान दिखने वाले डुप्लिकेट जैसे कि कंपनी के नाम या पते समूह कर सकते हैं। यह फीचर अकेले इसे कमाल का बनाता है।


1
यह एक शानदार, अंडर-रिपोर्टेड टूल है।
धन्यवाद_दिनेश

2

कौरसेरा में इसको समर्पित एक पूरा पाठ्यक्रम है। आप उन तकनीकों पर जाना चाहते हैं जो वे बताती हैं और महत्वपूर्ण हिस्सा यह जानना है कि कब क्या उपयोग करना है।

https://www.coursera.org/learn/data-cleaning

यह हमेशा बेहतर होता है कि इसे स्वचालित रूप से करने के बजाय स्वचालित रूप से करें क्योंकि प्रत्येक डेटासेट की अपनी समस्याएं और समस्याएं हैं और सभी डेटासेट पर सभी चरण लागू नहीं होते हैं।

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