क्या आप Pandas कोर्स करने में रुचि रखते हैं? हमारा Data Manipulation with pandas कोर्स करने पर विचार करें!
डेटा इम्पोर्ट करना अपने डेटा की खोजबीन शुरू करने के लिए, आपको वास्तव में अपना डेटा लोड करना होगा। आप शायद यह पहले से जानते होंगे, लेकिन Pandas लाइब्रेरी की बदौलत यह एक आसान काम बन जाता है: आप पैकेज को कन्वेंशन के अनुसार pd नाम से इम्पोर्ट करते हैं और read_csv() फ़ंक्शन का उपयोग करते हैं, जिसमें आप वह URL पास करते हैं जहाँ डेटा मिल सकता है और एक header आर्ग्युमेंट भी देते हैं। यह आखिरी आर्ग्युमेंट सुनिश्चित करने के लिए है कि आपका डेटा सही तरह पढ़ा जाए: आपके डेटा की पहली पंक्ति को आपके DataFrame के कॉलम नामों के रूप में इंटरप्रेट नहीं किया जाएगा।
वैकल्पिक रूप से, आप अन्य आर्ग्युमेंट भी दे सकते हैं ताकि आपका डेटा सही तरह पढ़ा जाए: आप sep या delimiter आर्ग्युमेंट से डिलिमिटर तय कर सकते हैं, names से कॉलम नाम तय कर सकते हैं या index_col से वह कॉलम तय कर सकते हैं जिसे नतीजतन बने DataFrame के रो लेबल के रूप में इस्तेमाल किया जाएगा।
पर read_csv() में जोड़ने के लिए ये सभी आर्ग्युमेंट्स का पूरा सेट नहीं है। इस फ़ंक्शन और इसके आर्ग्युमेंट्स के बारे में अधिक पढ़ने के लिए डॉक्यूमेंटेशन देखें।
# Import the `pandas` library as `pd`
import pandas as pd
# Load in the data with `read_csv()`
digits = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra",
header=None)
# Print out `digits`
print(digits)
ध्यान दें कि इस मामले में, आपने read_csv() का उपयोग किया क्योंकि डेटा कॉमा-सेपरेटेड फॉर्मेट में है। यदि आपकी फाइल में कोई दूसरा सेपरेटर है, तो आप अपने डेटा को लोड करने के लिए अन्य फ़ंक्शन भी इस्तेमाल कर सकते हैं, जैसे read_table(), read_excel(), read_fwf() और read_clipboard, जो क्रमशः सामान्य डिलिमिटेड फाइलें, Excel फाइलें, फिक्स्ड-विथ फॉर्मेटेड डेटा और क्लिपबोर्ड पर कॉपी किया गया डेटा पढ़ते हैं।
इसके अलावा, आपको read_sql() भी एक विकल्प के रूप में मिलेगा जिससे किसी SQL क्वेरी या डेटाबेस टेबल को DataFrame में पढ़ा जा सकता है। और भी अधिक इनपुट फ़ंक्शनों के लिए Pandas डॉक्यूमेंटेशन के इस सेक्शन पर विचार करें।
Exploratory Data Analysis (EDA) क्या है? एक तरफ, Exploratory Data Analysis (EDA) का उपयोग सवालों के जवाब देने, बिज़नेस असम्प्शन को परखने, आगे के विश्लेषण के लिए परिकल्पनाएँ बनाने के लिए होता है। दूसरी तरफ, आप इसका उपयोग मॉडलिंग के लिए डेटा तैयार करने में भी कर सकते हैं। इन दोनों में साझा बात यह है कि परिणामों की व्याख्या के लिए या ज़रूरी जवाब पाने के लिए आपके डेटा का अच्छा ज्ञान होना चाहिए।
इन लक्ष्यों तक पहुँचने के कई तरीके हैं: आप डेटा का बुनियादी विवरण ले सकते हैं, उसे विज़ुअलाइज़ कर सकते हैं, उसमें पैटर्न पहचान सकते हैं, डेटा उपयोग की चुनौतियाँ पहचान सकते हैं, आदि।
EDA के बारे में पढ़ते समय आप अक्सर डेटा प्रोफाइलिंग देखेंगे। डेटा प्रोफाइलिंग आपके डेटासेट को वर्णनात्मक आँकड़ों के जरिए समरी करने से सम्बंधित है। आप अपने डेटासेट को बेहतर समझने के लिए विभिन्न मापों का उपयोग करना चाहते हैं। डेटा प्रोफाइलिंग का लक्ष्य अपने डेटा की ठोस समझ बनाना है ताकि आप बाद में अलग-अलग तरीकों से क्वेरी और विज़ुअलाइज़ कर सकें। पर इसका मतलब यह नहीं कि आपको इटरेशन नहीं करना होगा: क्योंकि डेटा प्रोफाइलिंग डेटासेट का समरीकरण करती है, इसे डेटा क्वालिटी को आँकने के लिए अक्सर इस्तेमाल किया जाता है। प्रोफाइलिंग के नतीजों पर निर्भर करते हुए, आप डेटा को सुधारने, हटाने या अलग तरह से हैंडल करने का निर्णय ले सकते हैं।
आप डेटा प्रोफाइलिंग के बारे में अगले पोस्ट में और जानेंगे।
EDA और Data Mining (DM) EDA खुद को डेटा माइनिंग से अलग करता है, भले ही दोनों आपस में काफ़ी जुड़े हों, क्योंकि कई EDA तकनीकें डेटा माइनिंग में अपनाई गई हैं। दोनों के लक्ष्य भी बहुत मिलते-जुलते हैं: EDA इस बात का ध्यान रखता है कि आप डेटा को ऐसे ढंग से एक्सप्लोर करें कि दिलचस्प फीचर और उनके बीच के रिश्ते और स्पष्ट हो जाएँ। EDA में, आप आम तौर पर कई अलग-अलग वेरिएबल्स को विभिन्न तकनीकों से एक्सप्लोर और तुलना करते हैं ताकि व्यवस्थित पैटर्न खोजे जा सकें। दूसरी ओर, डेटा माइनिंग डेटा से पैटर्न निकालने से संबंधित है। ये पैटर्न वेरिएबल्स के बीच रिश्तों की समझ देते हैं जिनका उपयोग बिज़नेस निर्णय बेहतर करने में किया जा सकता है। साथ ही, दोनों ही मामलों में, वेरिएबल्स के बीच संबंधों के बारे में आपकी पूर्व-धारणा या तो नहीं होती या अधूरी होती है।
हालाँकि, सामान्यतः, डेटा माइनिंग को अधिक अनुप्रयोग-उन्मुख कहा जा सकता है, जबकि EDA अंतर्निहित प्रपंचों की मूल प्रकृति से संबंधित होता है। दूसरे शब्दों में, डेटा माइनिंग शामिल वेरिएबल्स के बीच विशिष्ट संबंधों की पहचान पर तुलनात्मक रूप से कम ध्यान देता है। परिणामस्वरूप, डेटा माइनिंग डेटा एक्सप्लोरेशन के लिए “ब्लैक बॉक्स” अप्रोच स्वीकार करता है और केवल EDA में प्रयुक्त तकनीकों का ही नहीं, बल्कि Neural Networks जैसी तकनीकों का भी उपयोग करता है ताकि मान्य भविष्यवाणियाँ बनाईं जा सकें, भले ही वे वेरिएबल्स के बीच संबंधों की विशिष्ट प्रकृति को न बताती हों जिन पर वे भविष्यवाणियाँ आधारित हैं।
डेटा का बुनियादी विवरण जैसा कि आपने ऊपर पढ़ा, EDA का मकसद अपने डेटा को जानना है। इसका सबसे बुनियादी कदम डेटा का एक बुनियादी विवरण लेना है। डेटा का बुनियादी विवरण वाकई बहुत व्यापक शब्द है: आप इसे अपने डेटा पर कुछ जानकारी पाने के एक त्वरित और सरल तरीके के रूप में, आसान-से-समझने वाली जानकारी पाने के रूप में, अपने डेटा का बेसिक फील पाने के रूप में, आदि, समझ सकते हैं।
यह सेक्शन इन व्याख्याओं में भेद नहीं करेगा: यह वास्तव में आपको उन तरीकों से परिचित कराएगा जिनसे आप अपने DataFrame पर जल्दी और आसानी से समझ आने वाली जानकारी इकट्ठा कर सकते हैं।
डेटा का वर्णन उदाहरण के लिए, आप describe() फ़ंक्शन का उपयोग कर सकते हैं जो NaN मानों को छोड़कर विभिन्न समरी सांख्यिकी देता है। इस उदाहरण पर विचार करें जिसमें आप प्रसिद्ध Iris डेटासेट का वर्णन करते हैं। DataCamp Light चंक में डेटा आपके लिए पहले से लोड किया गया है:
आप देखेंगे कि यह फ़ंक्शन काउंट, मीन, स्टैंडर्ड डिविएशन, न्यूनतम और अधिकतम मान और क्वांटाइल्स लौटाता है। ध्यान दें कि बेशक, Python में ऐसे कई पैकेज हैं जो आपको ये आँकड़े दे सकते हैं, जिनमें Pandas खुद भी शामिल है। इस फ़ंक्शन का उपयोग इस जानकारी को पाने के एक तरीकों में से एक है।
यह भी ध्यान दें कि यदि आपने अभी तक नहीं किया है तो आपको जरूर वर्णनात्मक आँकड़ों में और गहराई में जाना चाहिए। आप इन वर्णनात्मक आँकड़ों का उपयोग अपने डेटा की क्वालिटी का आकलन शुरू करने के लिए कर सकते हैं। फिर आप तय कर पाएँगे कि आपको डेटा को सुधारना, छोड़ना या किसी और तरीके से हैंडल करना है। यह आम तौर पर डेटा प्रोफाइलिंग स्टेप होता है। EDA में यह स्टेप डेटा तत्वों और उनकी विसंगतियों को और बेहतर ढंग से समझने और यह देखने के लिए होता है कि डेटा एक तरफ डॉक्यूमेंटेशन से कितना मेल खाता है और दूसरी तरफ बिज़नेस ज़रूरतों को कैसे पूरा करता है।
नोट कि आप अपनी एक्सप्लोरेटरी डेटा एनालिसिस के दौरान डेटा प्रोफाइलिंग स्टेप पर वापस आते रहेंगे, क्योंकि जिन स्टेप्स से आप गुजरेंगे, वे आपके डेटा की क्वालिटी को प्रभावित कर सकते हैं।
DataFrame की पहली और आखिरी पंक्तियाँ अब जब आपको अपने डेटा सेट के बारे में एक सामान्य आइडिया मिल गया है, तो डेटा पर करीब से नज़र डालना भी अच्छा विचार है। Pandas लाइब्रेरी के head() और tail() फ़ंक्शनों की मदद से, आप क्रमशः अपने DataFrame की पहली और आखिरी पंक्तियाँ आसानी से देख सकते हैं।
नीचे दिए DataCamp Light चंक में head() और tail() के साथ handwritten digits डेटा की पहली और आखिरी पाँच पंक्तियाँ देखें। डेटा आपके लिए पहले से लोड किया गया है:
# Inspect the first 5 rows of `digits`
first = digits._____(5)
# Inspect the last 5 rows
last = digits.____(5)
आप देखेंगे कि जब आप इस तरह के डेटा से परिचित नहीं होते, तो head() और tail() का परिणाम बहुत कुछ नहीं कहता।
आपको बस संख्यात्मक मानों वाली पंक्तियाँ और कॉलम दिखाई देंगे। यदि आपने अभी तक नहीं किया है, तो डेटा सेट विवरण पढ़ने पर विचार करें, जो बताएगा कि डेटा कैसे इकट्ठा किया गया था और एट्रिब्यूट्स और पंक्तियों की संख्या भी देगा, जो यह जाँचने में सहायक है कि आपने डेटा सही इम्पोर्ट किया है या नहीं।
इसके अलावा, अपनी शुरुआती खोज पर वापस जाएँ: पंक्तियों में संख्यात्मक मान। पहली नज़र में, आपको कोई समस्या न दिखे, क्योंकि इंटीजर मान सही दिखाई देते हैं और पहली नज़र में कोई झंडा नहीं उठाते।
पर यदि यह सब आपने किसी और डेटा सेट पर किया होता जिसमें, उदाहरण के लिए, डेट-टाइम जानकारी होती, तो इन कोड लाइनों के नतीजे पर एक त्वरित नज़र डालने से ये सवाल उठते: “क्या मेरा डेटा DateTime के रूप में पढ़ा गया है?”, “मैं इसे कैसे जाँचूँ?” और “मैं डेटा टाइप कैसे बदलूँ?”।
ये गहरे सवाल हैं जिन्हें आप आम तौर पर डेटा प्रोफाइलिंग स्टेप में ऐड्रेस करेंगे, जिसका जिक्र अगले पोस्ट में होगा।
डेटा का सैंपल लेना यदि आपके पास बड़ा डेटासेट है, तो आप अपने डेटा का एक सैंपल लेने पर विचार कर सकते हैं ताकि जल्दी से डेटा का फील मिल सके। ऐसा करने का पहला और आसान तरीका Pandas में शामिल sample() फ़ंक्शन का इस्तेमाल करना है, जैसे यहाँ:
# Take a sample of 5
digits.sample(5)
एक अन्य—शायद अधिक जटिल—तरीका यह है कि एक रैंडम इंडेक्स बनाकर अपने DataFrame से रैंडम पंक्तियाँ लें। आप देखेंगे कि नीचे दिया कोड random पैकेज के sample मॉड्यूल का उपयोग करता है, साथ में range() और len() के साथ, जो आपको डेटा सैंपल करने देता है। ध्यान दें कि आप ix का भी उपयोग करते हैं ताकि ठीक-ठीक वे पंक्तियाँ चुनी जाएँ जिन्हें आप अपने सैंपल में शामिल करना चाहते हैं।
यदि आपको समझ नहीं आ रहा कि इस संदर्भ में ix क्यों इस्तेमाल किया, तो DataCamp का अधिक विशिष्ट ट्यूटोरियल मददगार हो सकता है! यह इन सामान्य विषयों को विस्तार से कवर करता है। ऊपर दिए लिंक पर क्लिक करके देखिए!
फ़िलहाल, अपनी Python स्किल्स का अभ्यास करें! नीचे दिए अभ्यास से शुरू करें:
# import `sample` from `random`
from random import ______
# Create a random index
randomIndex = np.array(sample(range(len(______)), 5))
# Get 5 random rows
digitsSample = digits.ix[___________]
# Print the sample
print(____________)
आपके डेटा की चुनौतियाँ अब जब आपने अपने डेटा पर बुनियादी जानकारी इकट्ठा कर ली है, तो यह अच्छा विचार है कि डेटा से जुड़ी संभावित चुनौतियों पर थोड़ा और गहराई से जाएँ। यदि आप पहले ही डेटा प्रोफाइलिंग स्टेप से गुजर चुके हैं, तो आपको missing values का पता होगा, किन मानों के outliers होने की संभावना है, आदि का अंदाज़ा होगा।
यह सेक्शन उन बुनियादी तरीकों का वर्णन करेगा जिनसे आप इन बातों का अंदाज़ा लगा सकें और यदि आपको डेटा में अनियमितताएँ मिलें तो उन्हें कैसे हैंडल करें। फिर से ध्यान दें कि आप इन अनियमितताओं की पहचान डेटा प्रोफाइलिंग स्टेप में और गहराई से करेंगे, और यह सामान्य है कि आप इस स्टेप पर वापस आएँ जब आपने अपने डेटा की कुछ चुनौतियों को हैंडल कर लिया हो।
Missing Values जब आप अपना डेटा एक्सप्लोर कर रहे हों, तो यह जाँचना भी चाहेंगे कि डेटा सेट में कोई missing values हैं या नहीं।
इसे जाँचना महत्त्वपूर्ण है क्योंकि जब आपके कुछ डेटा गायब होता है, तो डेटा सेट की अभिव्यक्तिगत क्षमता घट जाती है, जो कमजोर या पक्षपाती विश्लेषण का कारण बन सकती है। व्यावहारिक रूप से, इसका मतलब है कि जब कुछ फीचर्स के मान गायब होते हैं, तो क्लासिफिकेशन या प्रेडिक्शन के गलत होने की संभावना बढ़ जाती है।
बेशक, आपके डेटा सेट में missing data का कारण डेटा के ग़लत extraction या इम्पोर्ट का परिणाम हो सकता है, या कलेक्शन प्रक्रिया का। जो सिस्टम आपको डेटा देते हैं, वे खराब हो सकते हैं या आपके सर्वे में उत्तरदाताओं ने कुछ सवाल खाली छोड़ दिए हों। यह देखना भी बहुत जरूरी है कि missing data में कोई पैटर्न है या नहीं, और यही वह जगह है जहाँ डेटा प्रोफाइलिंग स्टेप उपयोगी हो सकता है। याद रखें कि आप डेटा प्रोफाइलिंग का उपयोग अपने डेटा क्वालिटी का बेहतर अंदाजा लगाने के लिए कर सकते हैं। Missing data के पैटर्न कैसे खोजे जा सकते हैं, इस पर आप एक फॉलो-अप पोस्ट में और पढ़ सकते हैं।
संक्षेप में, missing data के कारण विविध हो सकते हैं और बड़े स्तर पर डेटा के संदर्भ पर निर्भर करते हैं, लेकिन आप पर भी निर्भर कर सकते हैं। यही कारण है कि आपने पिछले स्टेप्स में डेटा इम्पोर्ट करते समय पहले उसका निरीक्षण किया था!
उन पंक्तियों की पहचान करने के लिए जिनमें missing values हैं, आप isnull() का उपयोग कर सकते हैं। लौटे हुए परिणाम में, आपको प्रत्येक सेल में True या False दिखाई देगा: True इंगित करेगा कि सेल में मौजूद मान missing है, False का अर्थ है कि सेल में ‘सामान्य’ मान है।
# Identifiy missing values
pd.isnull(______)
इस मामले में, आप देखते हैं कि डेटा काफ़ी पूर्ण है: कोई missing values नहीं हैं।
नोट कि आप इसे ऊपर लिंक किए UCI Machine Learning Repository के डेटा सेट विवरण में भी पढ़ सकते थे, जहाँ सूचीबद्ध है कि डेटा में missing values नहीं हैं।
हालाँकि, यह हर डेटा सेट में नहीं होगा। इसलिए यह जानना अच्छा है कि ऐसे हालात में आप क्या कर सकते हैं जहाँ आपको missing data के साथ क्या करना है, इस पर विचार करना पड़े।
आप missing data को हटा सकते हैं: या तो पूरा रिकॉर्ड हटा दें या केवल वे रिकॉर्ड रखें जिनमें रुचि के फीचर्स मौजूद हैं। बेशक, इस प्रक्रिया में सावधानी बरतनी चाहिए, क्योंकि डेटा हटाने से आपका विश्लेषण पक्षपाती भी हो सकता है। इसलिए आपको खुद से यह सवाल पूछना चाहिए कि क्या किसी रिकॉर्ड के लिए missing data की संभावना बाकी सभी रिकॉर्ड्स के समान है। यदि संभावना रिकॉर्ड-दर-रिकॉर्ड नहीं बदलती, तो missing data हटाना वैध विकल्प है। हटाने के अलावा, आप “imputation methods” से missing values वाली सेल्स भर सकते हैं। आँकड़ों में अनुभव है तो आप जानते होंगे कि imputation का मतलब missing data को प्रतिस्थापित मानों से बदलना है। आप mean, mode या median भर सकते हैं। बेशक, यहाँ यह सोचना होगा कि क्या आप किसी वेरिएबल के सभी missing values के लिए mean या median लेना चाहते हैं, या किसी दूसरे वेरिएबल के आधार पर missing values बदलना चाहते हैं। उदाहरण के लिए, यदि आपके डेटा में “male” या “female” जैसे श्रेणीबद्ध वेरिएबल्स हैं, तो missing values बदलने से पहले इन्हें भी ध्यान में रखें, क्योंकि पुरुषों और महिलाओं के प्रेक्षण भिन्न हो सकते हैं। ऐसे में, आप महिला प्रेक्षणों का औसत निकालकर अन्य “female” रिकॉर्ड्स के missing values उसी औसत से भर सकते हैं। मान का अनुमान regression, ANOVA, logistic regression या किसी अन्य मॉडलिंग तकनीक की मदद से लगाएँ। यह अब तक का सबसे जटिल तरीका है। उन रिकॉर्ड्स के मानों से सेल्स भरें जो missing values वाले रिकॉर्ड के सबसे समान हैं। ऐसे मामलों में आप KNN या K-Nearest Neighbors का उपयोग कर सकते हैं। ध्यान दें कि ऊपर बताए हर तरीके के फायदे और सीमाएँ हैं! अंतिम निर्णय लेने से पहले समय, लागत, आपके डेटा की प्रकृति आदि पर विचार करें।
जब आप यह अंतिम निर्णय ले लें कि missing data के साथ क्या करना है, तो आगे पढ़ें कि आप अपने डेटा में जो बदलाव देखना चाहते हैं, उन्हें कैसे लागू करेंगे।
Missing Values भरना यदि आप imputation के जरिए मान भरने का निर्णय लेते हैं, तो आपके पास यह चुनने के विकल्प हैं कि यह कैसे करें!
Pandas के fillna() का उपयोग NumPy के फ़ंक्शनों के साथ करें। निम्न कोड चंक पर विचार करें, जिसमें मान लें कि आपके पास एक सर्वे के नतीजों वाला DataFrame है जो लोगों की वेतन (salary) पूछता है। यह मानते हुए कि आपके दर्शक समाज की एक ही श्रेणी से हैं और प्रश्न का उत्तर देने की संभावना हर व्यक्ति के लिए समान है, आप प्रश्न का उत्तर देने वालों का mean निकाल सकते हैं और उस mean से उन लोगों के मान भर सकते हैं जिन्होंने उत्तर नहीं दिया।
# Import NumPyimport numpy as np# Calculate the meanmean = np. mean ( df. Salary) # Replace missing values with the meandf. = df. Salary. fillna ( mean) संचालित द्वारा बेशक, आपको fillna() में कोई मान पास करना जरूरी नहीं है। आप non-null मानों को आगे या पीछे propagate भी कर सकते हैं, fillna() में method आर्ग्युमेंट जोड़कर। पीछे भरने या आगे भरने के लिए क्रमशः ffill या bfill पास करें।
Missing Values वाले लेबल्स हटाना ऐसे कॉलम या पंक्तियाँ निकालने के लिए जिनमें missing values हों, आप Pandas के dropna() फ़ंक्शन का उपयोग कर सकते हैं:
# Drop rows with missing valuesdf. dropna ( axis= 0 ) # Drop columns with missing values df. dropna ( axis= 1 ) संचालित द्वारा इंटरपोलेशन वैकल्पिक रूप से, आप missing values का इंटरपोलेशन भी चुन सकते हैं: interpolate() फ़ंक्शन missing डेटा पॉइंट्स पर linear interpolation करेगा ताकि वह मान “अनुमान” लगाया जा सके जो सबसे संभवतः भरा जाना चाहिए।
df. interpolate ( ) संचालित द्वारा आप method आर्ग्युमेंट जोड़कर और उन्नत इंटरपोलेशन विधियों, जैसे polynomial या cubic interpolation, तक भी पहुँच सकते हैं, पर ऐसे इंटरपोलेशन के लिए आपके पास SciPy इंस्टॉल होना चाहिए।
बेशक, इंटरपोलेशन की सीमाएँ हैं, खासकर यदि इंटरपोलेशन के लिए NaN मान आखिरी वैध प्रेक्षण से बहुत दूर हैं। ऐसे मामलों में, आप मूल कोड में limit आर्ग्युमेंट जोड़ना चाहेंगे। इसमें एक पॉजिटिव इंटीजर पास करें और यह संख्या तय करेगी कि किसी non-NaN मान के बाद कितने मान भरे जाएँगे। डिफ़ॉल्ट लिमिट डायरेक्शन forward है, लेकिन आप इसे limit_direction जोड़कर बदल सकते हैं।
Outliers Missing values की तरह, आपके डेटा में ऐसे मान भी हो सकते हैं जो आपके बाकी अधिकांश डेटा से काफ़ी अलग हों। इन डेटा पॉइंट्स को “outliers” कहा जाता है। इन्हें ढूँढ़ने के लिए, आप एक बॉक्स प्लॉट के माध्यम से अपने एकल वेरिएबल्स के वितरण की जाँच कर सकते हैं या एक scatter plot बना सकते हैं ताकि ऐसे डेटा पॉइंट्स पहचाने जा सकें जो प्लॉट के “अपेक्षित” क्षेत्र में नहीं आते।
आपके डेटा में outliers के कारण अलग-अलग हो सकते हैं—सिस्टम एरर से लेकर डेटा एंट्री या प्रोसेसिंग के दौरान मानवीय हस्तक्षेप तक—लेकिन यह सोचना जरूरी है कि उनका आपके विश्लेषण पर क्या असर पड़ सकता है: वे standard deviation, mean या median जैसे सांख्यिकीय परीक्षणों के नतीजों को बदल देंगे, सामान्यता को घटा सकते हैं और regression या ANOVA जैसे सांख्यिकीय मॉडलों के नतीजों को प्रभावित कर सकते हैं।
Outliers से निपटने के लिए, आप या तो उन्हें हटा सकते हैं, ट्रांसफॉर्म कर सकते हैं, या इम्प्यूट कर सकते हैं: निर्णय फिर से डेटा के संदर्भ पर निर्भर करेगा। इसलिए अपने डेटा को समझना और outliers के कारण की पहचान करना फिर से महत्त्वपूर्ण है:
यदि outlier मान डेटा एंट्री या प्रोसेसिंग एरर के कारण है, तो आप मान हटाने पर विचार कर सकते हैं। आप प्रेक्षणों को वेट देकर outliers को ट्रांसफॉर्म कर सकते हैं या नैचुरल लॉग का उपयोग कर सकते हैं ताकि outlier मानों से पैदा हुई वैरिएशन कम की जा सके। Missing values की तरह, आप इम्प्यूटेशन विधियों से अपने डेटा के चरम मानों को median, mean या mode से बदल सकते हैं। आप अपने डेटा में outliers से निपटने के लिए ऊपर वाले सेक्शन में वर्णित फ़ंक्शनों का उपयोग कर सकते हैं।
आपके डेटा के फीचर नोट कि यह स्टेप अन्य डेटा साइंस कार्यों के साथ इटरटिव होता है: आप मॉडल बनाएँगे और वैलिडेट करेंगे, लेकिन बाद में आप फीचर्स को एडजस्ट करने और मॉडल को फिर से बनाने का निर्णय ले सकते हैं, आदि।
आपके डेटा में पैटर्न अपने डेटा की खोजबीन में आप अगला कदम उसके अंदर पैटर्न की पहचान करना उठा सकते हैं, जिसमें डेटा एट्रिब्यूट्स के बीच या missing data के बीच सहसंबंध शामिल है। इसमें मददगार चीज़ों में से एक है आपके डेटा का विज़ुअलाइज़ेशन; और यह स्थिर होना जरूरी नहीं: Python की Bokeh या Plotly लाइब्रेरी से इंटरएक्टिव विज़ुअलाइज़ेशन करने से न हिचकें।
Matplotlib के साथ सहसंबंध पहचान अब जब आप संख्याओं को देख चुके हैं और अपने डेटा का परिमाणात्मक तरीके से विश्लेषण कर चुके हैं, तो आपको अपने डेटा को विज़ुअल तरीके से देखना भी उपयोगी लगेगा। अब डेटा को विज़ुअली भी एक्सप्लोर करने का समय है।
यह आसानी और तेजी से करने के लिए आप Python की डेटा विज़ुअलाइज़ेशन लाइब्रेरी Matplotlib का उपयोग कर सकते हैं। आपके और इसके बीच जो एकमात्र चीज़ खड़ी है, विडंबना से, वह है आपका डेटा: जैसा कि आप भलीभाँति जानते हैं, आपके डेटा में 64 कॉलम या फीचर्स हैं। जब आपके पास इतने सारे फीचर्स होते हैं, तो कहा जाता है कि आप उच्च-आयामी (high dimensional) डेटा के साथ काम कर रहे हैं।
डायमेंशनल डेटा क्या है, आप हमारे मशीन लर्निंग ट्यूटोरियल में सीखेंगे, लेकिन फिलहाल यह समझना अच्छा है कि यदि आप अपने डेटा को 2D या 3D प्लॉट में विज़ुअलाइज़ करना चाहते हैं, तो आपके डेटा में केवल दो या तीन डायमेंशन होने चाहिए। इसका मतलब है कि आपको अपने डेटा के डायमेंशंस घटाने होंगे।
इसका अर्थ है कि आपको Principal Component Analysis (PCA) जैसी Dimensionality Reduction तकनीकों का उपयोग करना होगा:
# Import `PCA` from `sklearn.decomposition`
from sklearn.decomposition import ___
# Build the model
pca = PCA(n_components=2)
# Reduce the data, output is ndarray
reduced_data = pca.fit_transform(_______)
# Inspect the shape of `reduced_data`
reduced_data.______
# print out the reduced data
print(_______________)
जब आप रिड्यूस्ड डेटा का निरीक्षण करते हैं, तो दिखता है कि कॉलम या फीचर्स अब केवल दो रह गए हैं। पंक्तियों या प्रेक्षणों की संख्या अभी भी वही है, यानी 3823। और अब जब आपका डेटा सही फॉर्मेट में है, तो प्लॉटिंग शुरू करने का समय है!
सही प्लॉट का चुनाव पहले से ही एक अच्छी शुरुआत है, लेकिन आप क्या चुनेंगे?
इस मामले में, आप डेटा एक्सप्लोर कर रहे हैं, तो शायद आप अपने डेटा के एट्रिब्यूट्स के बीच संभावित सहसंबंध ढूँढ़ना चाहेंगे। एक scatter plot इसे विज़ुअलाइज़ करने का अच्छा तरीका है: यह आपको dimensionality reduction से मिले दो फीचर्स के बीच संबंध पहचानने देता है।
import matplotlib. pyplot as pltplt. scatter ( reduced_data[ : , 0 ] , reduced_data[ : , 1 ] , c= labels, cmap = 'viridis' ) plt. show ( ) संचालित द्वारा
Bokeh के साथ सहसंबंध पहचान दूसरे, आप Bokeh का उपयोग करके एक इंटरएक्टिव प्लॉट बनाने पर भी विचार कर सकते हैं ताकि अपने डेटा के एट्रिब्यूट्स के बीच सहसंबंध खोज सकें। Bokeh लाइब्रेरी एक Python इंटरएक्टिव विज़ुअलाइज़ेशन लाइब्रेरी है जो आधुनिक वेब ब्राउज़र्स को टार्गेट करती है। यह बड़े या स्ट्रीमिंग डेटासेट्स के साथ काम करने के लिए आदर्श है, लेकिन जैसा कि आप अगले उदाहरण में देखेंगे, आप इसे “सामान्य” डेटा के लिए भी उपयोग कर सकते हैं।
कोड बहुत सरल है: आवश्यक मॉड्यूल इम्पोर्ट करें, scatter plot बनाएं, डिफ़ॉल्ट आउटपुट स्टेट को कॉन्फ़िगर करें ताकि show() कॉल करने पर आउटपुट फाइल में सेव हो। अंत में, show() कॉल करें ताकि आपने जो scatter plot बनाया है, उसे देख सकें!
# Import the necessary modulesfrom bokeh. charts import Scatter, output_file, show# Construct the scatter plotp = Scatter ( iris, x= 'Petal_length' , y= 'Petal_width' , color= "Class" , title= "Petal Length vs Petal Width" , xlabel= "Sepal Length" , ylabel= "Sepal Width" ) # Output the file output_file ( 'scatter.html' ) # Show the scatter plotshow ( p) संचालित द्वारा परिणाम आकर्षक है:
ध्यान दें कि यह प्लॉट की एक स्टैटिक, सेव्ड इमेज है, लेकिन आपके नोटबुक या टर्मिनल में बनने वाला प्लॉट इंटरएक्टिव होगा! बेशक, यह Bokeh से इंटरएक्टिव ग्राफ बनाने का एक साधारण उदाहरण है। और प्रेरणा के लिए Bokeh Gallery देखें या DataCamp का Interactive Data Visualization with Bokeh कोर्स करें।
Pandas के साथ सहसंबंध पहचान पिछले सेक्शनों में जो प्लॉट आपने देखे, वे आपके डेटा के एट्रिब्यूट्स के बीच सहसंबंध एक्सप्लोर करने का विज़ुअल तरीका हैं। लेकिन इसका मतलब यह नहीं कि आप इस माप को परिमाणात्मक तरीके से एक्सप्लोर नहीं कर सकते! और जब आप ऐसा करने का निर्णय लें, तो Pandas के corr() फ़ंक्शन का उपयोग करें। पर ध्यान दें कि इस गणना में NaN या null मानों को बाहर रखा जाता है!
# Pearson correlation
iris.corr()
# Kendall Tau correlation
iris.corr('kendall')
# Spearman Rank correlation
iris.corr('spearman')
नोट कि आखिरी दो सहसंबंध मापांक की गणना से पहले डेटा को रैंक करना जरूरी है। आप rank() से यह आसानी से कर सकते हैं: ऊपर के अभ्यास के लिए, iris डेटा को आपके लिए iris.rank() चलाकर रैंक किया गया था।
इसके अलावा, इन सहसंबंधों के साथ कुछ धारणाएँ जुड़ी हैं: Pearson सहसंबंध मानता है कि आपके वेरिएबल्स सामान्य वितरण (normally distributed) वाले हैं, कि प्रत्येक वेरिएबल के बीच सीधी रेखीय (linear) संबंध है और कि डेटा रिग्रेशन लाइन के बारे में सामान्य रूप से वितरित है। दूसरी ओर, Spearman सहसंबंध मानता है कि आपके पास दो क्रमबद्ध (ordinal) वेरिएबल्स हैं या दो वेरिएबल्स किसी तरह संबंधित हैं, पर रैखिक रूप से नहीं।
Kendall Tau सहसंबंध एक गुणांक है जो रैंक किए गए डेटा के दो कॉलमों के बीच सामंजस्य (concordance) की डिग्री को दर्शाता है। आप Spearman सहसंबंध का उपयोग दो वेरिएबल्स के बीच एसोसिएशन की डिग्री मापने के लिए कर सकते हैं। ये दोनों काफ़ी मिलते-जुलते लगते हैं, है ना?
हालाँकि Kendall और Spearman सहसंबंध मापांक समान दिखते हैं, वे अलग हैं: सटीक फर्क उनकी गणना में है। Kendall Tau गुणांक सहमत जोड़ों (concordant pairs) की संख्या में से असहमत जोड़ों (discordant pairs) की संख्या घटाकर और उसे कुल जोड़ों की संख्या से भाग देकर निकाला जाता है। Spearman गुणांक devation squared का योग n गुणा n माइनस 1 से भाग देकर निकाला जाता है।
आम तौर पर Spearman का गुणांक Kendall’s Tau से बड़ा होगा, पर हमेशा नहीं: जब आपके डेटा के प्रेक्षणों के बीच devations बहुत बड़े हों, तो आपको छोटा Spearman गुणांक मिलेगा। Spearman सहसंबंध इसके प्रति बहुत संवेदनशील है और कुछ मामलों में यह उपयोगी हो सकता है!
तो, आपको कौन सा गुणांक कब इस्तेमाल करना चाहिए, क्योंकि दोनों वास्तव में अलग चीज़ परखते हैं; Kendall’s Tau सहमत जोड़ों के अनुपात को असहमत जोड़ों के सापेक्ष दर्शाता है, जबकि Spearman का गुणांक ऐसा नहीं करता। यह भी दलील दी जा सकती है कि Kendall Tau सहसंबंध की व्याख्या अधिक सहज है और गणना में आसान है, यह संबंधित आबादी पैरामीटर का बेहतर आकलन देता है और छोटे सैंपल साइज़ में p-values अधिक सटीक होती हैं।
टिप कॉलम्स के विशिष्ट pairwise सहसंबंधों के नतीजे देखने के लिए print() फ़ंक्शन जोड़ें।
जैसा कि अब तक आप जानते होंगे, Python की डेटा मैनिप्युलेशन लाइब्रेरी Pandas का उपयोग डेटा में बदलाव करने के लिए किया जाता है; जो अभी शुरुआत कर रहे हैं, उन्हें लग सकता है कि यह पैकेज केवल डेटा को प्रीप्रोसेस करते समय ही काम आता है, लेकिन ऐसा नहीं है: Pandas आपके डेटा को एक्सप्लोर करने और प्रीप्रोसेसिंग के बाद उसे सहेजने के लिए भी शानदार है।
इसके अलावा, जिन्होंने DataCamp के Python ट्यूटोरियल फॉलो किए हैं या SciPy, NumPy, Matplotlib और Pandas की बुनियाद से वाकिफ हैं, उनके लिए अब तक सीखी बातों का एक रिकैप करना उपयोगी रहेगा।
आज का ट्यूटोरियल वास्तव में आपको उपरोक्त सभी पैकेजों के साथ अपने डेटा को प्रभावी ढंग से एक्सप्लोर करने के कुछ तरीके बताएगा ताकि आप अपने डेटा का मॉडलिंग शुरू कर सकें: