हर सफल डेटा साइंस परियोजना की नींव साफ़, सुसंगत डेटा है। फिर भी तेज़-गति विश्लेषण प्रक्रिया में, अनुभवी पायथन उपयोगकर्ता भी कभी-कभी रोकथाम योग्य डेटा प्री-प्रोसेसिंग गलतियों में फँस जाते हैं। चाहे आप डेटा को एक मशीन लर्निंग मॉडल के लिए आकार दे रहे हों या उसे विज़ुअलाइज़ेशन के लिए तैयार कर रहे हों, यह जानना कि किन गलतियों पर ध्यान देना है, आपको अनगिनत घंटों की निराशा से बचा सकता है और परिणामों को और भी मजबूत बना सकता है।
आइए पायथन में पाँच सबसे सामान्य (और कई बार जानलेवा) डेटा क्लीनिंग गलतियाँ—व्यावहारिक सुझावों और स्पष्ट उदाहरणों के साथ—समझते हैं ताकि आप अपने वर्क फ़्लोज़ को मजबूत और कुशल बनाए रख सकें।
किसी भी वास्तविक-विश्व डेटा-सैट में आप जिन पहले मुद्दों का सामना करेंगे उनमें से एक मिसिंग डेटा होता है। पायथन में, खासकर पांडास जैसे उपकरणों के साथ, NaN को प्रतिस्थापित करना या हटाना आसान है: df.dropna() या df.fillna(0) इसे एक लाइन में कर देता है। लेकिन आसान होना सही होना नहीं है।
स्वचालित रूप से मिसिंग वैल्यूज़ वाले रो को हटाने से आपका डेटासेट भारी रूप से छोटा पड़ सकता है या—जहाँ मिसिंगनेस सहसंबद्ध हो—पूर्वाग्रह पैदा कर सकता है। माध्य मान से मान भरना या शून्य मान भरना वितरणों को विकृत कर सकता है, खासकर गैर-संख्या कॉलमों में या उनमें जिनमें आउट्लायर्स हों।
नीचे दिया गया उदाहरण देखें:
# Too hasty with missing value treatment
import pandas as pd
df = pd.read_csv('survey.csv')
df = df.dropna() # Danger: goodbye valuable data!
अगर 30% पंक्तियाँ सिर्फ एक वैकल्पिक फ़ील्ड—जैसे आयु—गायब हो, तो आप अपने डेटा का 30% खो देंगे। अगर गायब आयु खास जनसांख्यिकीय समूह में अधिक हैं, तो परिणाम ऐसा डेटा-सैट बनेगा जो आबादी का सही प्रतिनिधित्व नहीं कर पाता।
df.isnull().sum() या df.info() का उपयोग करें।sklearn.impute.SimpleImputer या डोमेन-विशिष्ट लॉजिक पर विचार करें।
कई स्रोतों से एकत्र किया गया डेटा शायद ही एक प्रारूप में साफ-सुथरे तरीके से फिट हो पाता हो। तिथियाँ, श्रेणियाँ, और स्ट्रिंग एन्कोडिंग विशेषकर सूक्ष्म, खोजने में कठिन त्रुटियों के प्रति प्रवण होते हैं।
dtype: object), जिससे गणनात्मक संचालन असमर्थ हो जाते हैं।क्लासिक Python समस्या:
# Date times imported as strings, causing issues
import pandas as pd
df = pd.read_csv('sales.csv')
df['created_at'].min() # Only finds the minimum string, not chronological min
df.dtypes शीघ्रता से उन कॉलमों को उजागर करता है जो संख्यात्मक होने चाहिए पर नहीं हैं।pd.to_datetime(), pd.to_numeric(), और वर्गीकरण परिवर्तन का उपयोग करें।.str.lower().str.strip() का उपयोग करें; समानार्थी शब्दों या टाइपिंग त्रुटियों को एक सुसंगत मान से बदलिए।encoding पैरामीटर निर्दिष्ट करें (encoding='utf-8' या encoding='cp1252')।df['created_at'] = pd.to_datetime(df['created_at'], errors='coerce')
df = df.dropna(subset=['created_at']) # Remove rows where dates couldn't parse
यहाँ थोड़ा सा ध्यान बाद के समय में विचित्र विश्लेषणों को डिबग करने में घंटों बचा सकता है।
आउटलायर्स डेटा क्लीनिंग के वाइल्डकार्ड होते हैं—कभी-कभी वे डेटा एंट्री त्रुटियों का संकेत होते हैं; अन्य बार, वे वही घटनाएं होती हैं जिनका अध्ययन वास्तव में उपयुक्त होता है!
किसी निर्धारित दायरे के बाहर वैल्यूज़ को संदर्भ के बिना हटाकर ऑटोमेटेड स्क्रिप्ट डेटा से दोनों त्रुटियाँ और महत्वपूर्ण संकेतों को भी हटाते हैं।
# संदर्भ के बिना >200 कुछ भी न डालें
bp_outliers = df[df['blood_pressure'] > 200]
print(bp_outliers) #Investigate: are these errors or medically relevant cases?
df.describe() और बॉक्स प्लॉट्स या हिस्टोग्राम जैसी दृश्य-आकृतियाँ प्रयोग करें ताकि आउट्लायर्स दिख जाएँ।जब आउटलायर्स वैध निकलते हैं, तो वे डेटा द्वारा संचालित आपके बिजनेस इनसाइट्स को नया आकार दे सकते हैं।
डुप्लिकेट डेटा व्यापक है—डेटा एंट्री त्रुटियाँ, वेब स्क्रैपिंग, या सिस्टम ग्लिचेज सब उन्हें जन्म देते हैं। जबकि पायथन आपको तुरंत df.drop_duplicates() कर देता है, असली खतरा यह है कि डुप्लिकेट कहाँ से आये हैं, या उन्हें सबसे बेहतर तरीके से कैसे सुलझाएं।
एक रिटेल डेटाबेस में एक ही ग्राहक ऑर्डर के लिए एक से अधिक पंक्तियाँ हो सकती हैं क्योंकि सिस्टम बार-बार सबमिशन करता है। केवल एक पंक्ति बरकरार रखते हुए अन्य सभी पंक्तियाँ हटाना तभी काम करेगा जब हर कॉलम मिलते हों; अन्यथा, जानकारी खो सकती है。
# समस्या-पूर्ण: केवल 'order_id' के आधार पर सभी डुप्लिकेट हटाना
df = df.drop_duplicates(subset=['order_id']) # Could lose different addresses or notes attached to split-row orders
अगर पंक्तियों में 'delivery_notes' जैसे कॉलम भिन्न होते हैं, तो blindly dropping duplicates या तो डेटा खो देता है या टकराती जानकारी को सुलझाने में असफल हो जाता है。
df.duplicated(subset=key_cols, keep=False) से सत्य डुप्लिकेट्स को चिन्हित करें。is_duplicate के रूप में चिह्नित करना हटाने से बेहतर होता है।यहाँ डुप्लीकेशन के संभावित उपयोगी फील्ड्स को डेड_DUPLICATE से पहले समेकित करने का तरीका है:
def collapse_order_notes(notes):
return '; '.join(sorted(set(x for x in notes if pd.notnull(x))))
rollup = df.groupby('order_id').agg({
'customer_id': 'first',
'total_amount': 'sum',
'delivery_notes': collapse_order_notes
}).reset_index()
यह महत्वपूर्ण सहायक डेटा की सुरक्षा करता है।
कई शक्तिशाली एल्गोरिदम संख्यात्मक इनपुट की आवश्यकता होते हैं, सीधे स्ट्रिंग लेबल या श्रेणियाँ नहीं। वर्गीकृत कॉलमों का एन्कोडिंग एक जरूरी कदम है, लेकिन जल्दीबाजी करने या गलत तरीक़े चुनने से मॉडल प्रदर्शन गिर सकता है और बग्स आ सकते हैं。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# Label encoding ignores category meaning
le = LabelEncoder()
df['city_code'] = le.fit_transform(df['city']) # Problem: Model interprets numbers mathematically
pd.get_dummies(df, drop_first=True, dummy_na=False) का उपयोग करें, या बड़े कार्डिनैलिटी फीचर्स के लिए हैशिंग या टार्गेट एन्कोडिंग पर विचार करें。city_counts = df['city'].value_counts()
# Only encode cities appearing at least 10 times
common_cities = city_counts[city_counts > 10].index
df['city'] = df['city'].apply(lambda x: x if x in common_cities else 'Other')
df = pd.get_dummies(df, columns=['city'], drop_first=True)
यह फ़ीचर आकार को व्यावहारिक बनाये रखता है और मॉडल को मजबूत बनाता है。
डेटा क्लीनिंग Python में सूक्ष्म विवरण के साथ-साथ गति का भी सम्मान मांगती है। यांत्रिक या संदर्भ-रहित क्लीनिंग से बचकर, आप अपने डेटा साइंस और एनालिटिक्स कार्य को औसत से कहीं ऊपर उठा देते हैं। मिसिंग वैल्यूज़ का इरादे के साथ पुनरावलोकन करें, फ़ॉर्मैट्स में स्थिरता लाएं, आउटलायर्स को सिर्फ शोर नहीं बल्कि संकेत समझें, डुप्लिकेट्स की सावधानी से जाँच करें, और वर्गीकरण एन्कोडिंग के बारे में रणनीतिक सोचें。
डेटा विज्ञान के निरंतर विकसित हो रहे क्षेत्र में, वह व्यक्ति बनना जिसका डेटा सचमुच अंतर्दृष्टि के लिए तैयार है — यह एक वास्तविक सुपरपावर है।