|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
डेटा के साथ काम करना: डेटा तैयारी
![]() |
---|
डेटा तैयारी - @nitya द्वारा स्केच नोट |
प्री-लेक्चर क्विज़
डेटा के स्रोत के आधार पर, कच्चे डेटा में कुछ असंगतियां हो सकती हैं जो विश्लेषण और मॉडलिंग में चुनौतियां पैदा करेंगी। दूसरे शब्दों में, इस डेटा को "गंदा" माना जा सकता है और इसे साफ करने की आवश्यकता होगी। यह पाठ डेटा को साफ करने और बदलने की तकनीकों पर केंद्रित है ताकि गायब, गलत या अधूरे डेटा की चुनौतियों का सामना किया जा सके। इस पाठ में शामिल विषयों का उपयोग पायथन और पांडा लाइब्रेरी के साथ किया जाएगा और इसे नोटबुक में प्रदर्शित किया जाएगा जो इस डायरेक्टरी में है।
डेटा को साफ करने का महत्व
-
उपयोग और पुन: उपयोग में आसानी: जब डेटा सही तरीके से व्यवस्थित और सामान्यीकृत होता है, तो इसे खोजना, उपयोग करना और दूसरों के साथ साझा करना आसान हो जाता है।
-
संगति: डेटा साइंस में अक्सर एक से अधिक डेटा सेट के साथ काम करना पड़ता है, जहां विभिन्न स्रोतों से डेटा सेट को एक साथ जोड़ा जाना होता है। यह सुनिश्चित करना कि प्रत्येक व्यक्तिगत डेटा सेट में सामान्य मानकीकरण है, यह सुनिश्चित करेगा कि जब वे सभी एक डेटा सेट में विलय किए जाते हैं, तो डेटा अभी भी उपयोगी है।
-
मॉडल की सटीकता: साफ किया गया डेटा उन मॉडलों की सटीकता में सुधार करता है जो उस पर निर्भर करते हैं।
सामान्य सफाई के लक्ष्य और रणनीतियां
-
डेटासेट का अन्वेषण: डेटा अन्वेषण, जिसे बाद के पाठ में कवर किया गया है, आपको यह पता लगाने में मदद कर सकता है कि कौन सा डेटा साफ करने की आवश्यकता है। डेटासेट के भीतर मूल्यों को दृश्य रूप से देखना यह अपेक्षा सेट कर सकता है कि बाकी डेटा कैसा दिखेगा, या उन समस्याओं का अंदाजा दे सकता है जिन्हें हल किया जा सकता है। अन्वेषण में बुनियादी क्वेरी, विज़ुअलाइज़ेशन और सैंपलिंग शामिल हो सकते हैं।
-
फॉर्मेटिंग: स्रोत के आधार पर, डेटा को प्रस्तुत करने के तरीके में असंगतियां हो सकती हैं। यह डेटा को खोजने और प्रस्तुत करने में समस्याएं पैदा कर सकता है, जहां यह डेटासेट में देखा जाता है लेकिन विज़ुअलाइज़ेशन या क्वेरी परिणामों में सही ढंग से प्रस्तुत नहीं किया जाता है। सामान्य फॉर्मेटिंग समस्याओं में व्हाइटस्पेस, तिथियों और डेटा प्रकारों को हल करना शामिल है। फॉर्मेटिंग समस्याओं को हल करना आमतौर पर उन लोगों पर निर्भर करता है जो डेटा का उपयोग कर रहे हैं। उदाहरण के लिए, तिथियों और संख्याओं को प्रस्तुत करने के मानक देश के अनुसार भिन्न हो सकते हैं।
-
डुप्लीकेशन: डेटा जिसमें एक से अधिक बार उपस्थिति होती है, गलत परिणाम उत्पन्न कर सकता है और आमतौर पर इसे हटा दिया जाना चाहिए। यह तब आम हो सकता है जब दो या अधिक डेटा सेट को एक साथ जोड़ा जाता है। हालांकि, ऐसे उदाहरण भी हो सकते हैं जहां जुड़े डेटा सेट में डुप्लीकेशन अतिरिक्त जानकारी प्रदान कर सकता है और इसे संरक्षित करने की आवश्यकता हो सकती है।
-
गायब डेटा: गायब डेटा गलतियों के साथ-साथ कमजोर या पक्षपाती परिणाम पैदा कर सकता है। कभी-कभी इन्हें डेटा को "रीलोड" करके, गायब मूल्यों को पायथन जैसे कोड और गणना से भरकर, या बस उस मूल्य और संबंधित डेटा को हटाकर हल किया जा सकता है। डेटा के गायब होने के कई कारण हो सकते हैं और इन गायब मूल्यों को हल करने के लिए उठाए गए कदम इस बात पर निर्भर कर सकते हैं कि वे पहले स्थान पर कैसे और क्यों गायब हुए।
डेटा फ्रेम जानकारी का अन्वेषण
सीखने का लक्ष्य: इस उपखंड के अंत तक, आपको पांडा डेटा फ्रेम में संग्रहीत डेटा के बारे में सामान्य जानकारी प्राप्त करने में सहज होना चाहिए।
एक बार जब आप अपना डेटा पांडा में लोड कर लेते हैं, तो यह अधिक संभावना है कि यह एक डेटा फ्रेम में होगा (पिछले पाठ का संदर्भ लें विस्तृत अवलोकन के लिए)। हालांकि, यदि आपके डेटा फ्रेम में 60,000 पंक्तियां और 400 कॉलम हैं, तो आप यह समझने की शुरुआत कैसे करेंगे कि आप किसके साथ काम कर रहे हैं? सौभाग्य से, पांडा डेटा फ्रेम के बारे में समग्र जानकारी को जल्दी से देखने के लिए कुछ सुविधाजनक उपकरण प्रदान करता है, साथ ही पहले और अंतिम कुछ पंक्तियों को भी।
इस कार्यक्षमता का अन्वेषण करने के लिए, हम पायथन स्की-किट-लर्न लाइब्रेरी आयात करेंगे और एक प्रसिद्ध डेटासेट का उपयोग करेंगे: आईरिस डेटा सेट।
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | |
---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.2 |
3 | 4.6 | 3.1 | 1.5 | 0.2 |
4 | 5.0 | 3.6 | 1.4 | 0.2 |
- DataFrame.info: शुरुआत करने के लिए,
info()
विधि का उपयोगDataFrame
में मौजूद सामग्री का सारांश प्रिंट करने के लिए किया जाता है। आइए देखें कि इस डेटासेट में हमारे पास क्या है:
iris_df.info()
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
इससे, हम जानते हैं कि आईरिस डेटासेट में चार कॉलम में 150 प्रविष्टियां हैं और कोई भी प्रविष्टि शून्य नहीं है। सभी डेटा 64-बिट फ्लोटिंग-पॉइंट नंबर के रूप में संग्रहीत हैं।
- DataFrame.head(): अगला,
DataFrame
की वास्तविक सामग्री की जांच करने के लिए, हमhead()
विधि का उपयोग करते हैं। आइए देखें कि हमारेiris_df
की पहली कुछ पंक्तियां कैसी दिखती हैं:
iris_df.head()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
- DataFrame.tail(): इसके विपरीत,
DataFrame
की अंतिम कुछ पंक्तियों की जांच करने के लिए, हमtail()
विधि का उपयोग करते हैं:
iris_df.tail()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
निष्कर्ष: केवल डेटा फ्रेम में जानकारी के मेटाडेटा को देखकर या पहले और अंतिम कुछ मूल्यों को देखकर, आप तुरंत उस डेटा के आकार, संरचना और सामग्री का अंदाजा लगा सकते हैं जिसके साथ आप काम कर रहे हैं।
गायब डेटा से निपटना
सीखने का लक्ष्य: इस उपखंड के अंत तक, आपको डेटा फ्रेम से शून्य मानों को बदलने या हटाने का तरीका पता होना चाहिए।
अधिकांश समय, जिन डेटासेट्स का आप उपयोग करना चाहते हैं (या उपयोग करना पड़ता है) उनमें गायब मान होते हैं। गायब डेटा को संभालने का तरीका सूक्ष्म समझौतों के साथ आता है जो आपके अंतिम विश्लेषण और वास्तविक दुनिया के परिणामों को प्रभावित कर सकता है।
पांडा गायब मानों को दो तरीकों से संभालता है। पहला आपने पहले के अनुभागों में देखा है: NaN
, या नॉट ए नंबर। यह वास्तव में आईईईई फ्लोटिंग-पॉइंट स्पेसिफिकेशन का एक विशेष मान है और इसका उपयोग केवल गायब फ्लोटिंग-पॉइंट मानों को इंगित करने के लिए किया जाता है।
फ्लोट्स के अलावा गायब मानों के लिए, पांडा पायथन None
ऑब्जेक्ट का उपयोग करता है। जबकि यह भ्रमित करने वाला लग सकता है कि आप दो अलग-अलग प्रकार के मानों का सामना करेंगे जो मूल रूप से एक ही बात कहते हैं, इस डिज़ाइन विकल्प के लिए ठोस प्रोग्रामेटिक कारण हैं और, व्यवहार में, इस मार्ग पर जाने से पांडा अधिकांश मामलों के लिए एक अच्छा समझौता प्रदान करता है। इसके बावजूद, None
और NaN
दोनों में प्रतिबंध हैं जिनके बारे में आपको यह ध्यान रखना होगा कि उनका उपयोग कैसे किया जा सकता है।
NaN
और None
के बारे में अधिक जानकारी के लिए नोटबुक देखें!
- शून्य मानों का पता लगाना:
pandas
में,isnull()
औरnotnull()
विधियां शून्य डेटा का पता लगाने के लिए आपकी प्राथमिक विधियां हैं। दोनों आपके डेटा पर बूलियन मास्क लौटाते हैं। हमNaN
मानों के लिएnumpy
का उपयोग करेंगे:
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
0 False
1 True
2 False
3 True
dtype: bool
आउटपुट को ध्यान से देखें। क्या इसमें से कुछ आपको आश्चर्यचकित करता है? जबकि 0
एक अंकगणितीय शून्य है, यह फिर भी एक पूरी संख्या है और पांडा इसे ऐसा ही मानता है। ''
थोड़ा अधिक सूक्ष्म है। जबकि हमने इसे खंड 1 में एक खाली स्ट्रिंग मान का प्रतिनिधित्व करने के लिए उपयोग किया, यह फिर भी एक स्ट्रिंग ऑब्जेक्ट है और पांडा के दृष्टिकोण से शून्य का प्रतिनिधित्व नहीं है।
अब, आइए इसे पलटें और इन विधियों का उपयोग उस तरीके से करें जैसे आप व्यावहारिक रूप से उनका उपयोग करेंगे। आप बूलियन मास्क का सीधे एक Series
या DataFrame
इंडेक्स के रूप में उपयोग कर सकते हैं, जो गायब (या मौजूद) मानों के साथ काम करने की कोशिश करते समय उपयोगी हो सकता है।
निष्कर्ष:
isnull()
औरnotnull()
दोनों विधियांDataFrame
में उपयोग किए जाने पर समान परिणाम उत्पन्न करती हैं: वे परिणाम और उन परिणामों के इंडेक्स दिखाती हैं, जो आपके डेटा के साथ काम करते समय आपके लिए बहुत मददगार होंगे।
- शून्य मानों को हटाना: गायब मानों की पहचान करने से परे, पांडा
Series
औरDataFrame
से शून्य मानों को हटाने का एक सुविधाजनक साधन प्रदान करता है। (विशेष रूप से बड़े डेटा सेट पर, विश्लेषण से गायब [NA] मानों को हटाना अन्य तरीकों से निपटने की तुलना में अधिक सलाहनीय होता है।) इसे क्रियान्वित रूप में देखने के लिए, आइएexample1
पर लौटें:
example1 = example1.dropna()
example1
0 0
2
dtype: object
ध्यान दें कि यह आपके example3[example3.notnull()]
के आउटपुट जैसा दिखना चाहिए। यहां अंतर यह है कि, केवल मास्क किए गए मानों पर इंडेक्सिंग करने के बजाय, dropna
ने Series
example1
से उन गायब मानों को हटा दिया है।
क्योंकि DataFrame
में दो आयाम होते हैं, वे डेटा को हटाने के लिए अधिक विकल्प प्रदान करते हैं।
example2 = pd.DataFrame([[1, np.nan, 7],
[2, 5, 8],
[np.nan, 6, 9]])
example2
0 | 1 | 2 | |
---|---|---|---|
0 | 1.0 | NaN | 7 |
1 | 2.0 | 5.0 | 8 |
2 | NaN | 6.0 | 9 |
(क्या आपने देखा कि पांडा ने NaN
को समायोजित करने के लिए दो कॉलम को फ्लोट्स में अपकास्ट किया?)
आप DataFrame
से एकल मान नहीं हटा सकते, इसलिए आपको पूरी पंक्तियों या कॉलम को हटाना होगा। आप जो कर रहे हैं उसके आधार पर, आप एक या दूसरे को हटाना चाह सकते हैं, और इसलिए पांडा आपको दोनों के लिए विकल्प देता है। क्योंकि डेटा साइंस में, कॉलम आमतौर पर वेरिएबल्स का प्रतिनिधित्व करते हैं और पंक्तियां अवलोकनों का प्रतिनिधित्व करती हैं, आप डेटा की पंक्तियों को हटाने की अधिक संभावना रखते हैं; dropna()
के लिए डिफ़ॉल्ट सेटिंग यह है कि उन सभी पंक्तियों को हटा दें जिनमें कोई भी शून्य मान हो:
example2.dropna()
0 1 2
1 2.0 5.0 8
यदि आवश्यक हो, तो आप कॉलम से NA मान हटा सकते हैं। ऐसा करने के लिए axis=1
का उपयोग करें:
example2.dropna(axis='columns')
2
0 7
1 8
2 9
ध्यान दें कि यह बहुत सारे डेटा को हटा सकता है जिसे आप रखना चाह सकते हैं, विशेष रूप से छोटे डेटा सेट में। क्या होगा यदि आप केवल उन पंक्तियों या कॉलम को हटाना चाहते हैं जिनमें कई या यहां तक कि सभी शून्य मान हैं? आप dropna
में how
और thresh
पैरामीटर के साथ उन सेटिंग्स को निर्दिष्ट करते हैं।
डिफ़ॉल्ट रूप से, how='any'
(यदि आप स्वयं जांचना चाहते हैं या देखना चाहते हैं कि इस विधि में अन्य पैरामीटर क्या हैं, तो कोड सेल में example4.dropna?
चलाएं)। आप वैकल्पिक रूप से how='all'
निर्दिष्ट कर सकते हैं ताकि केवल उन पंक्तियों या कॉलम को हटाया जा सके जिनमें सभी शून्य मान हों। आइए इस क्रिया को देखने के लिए हमारे उदाहरण DataFrame
का विस्तार करें।
example2[3] = np.nan
example2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | NaN | 7 | NaN |
1 | 2.0 | 5.0 | 8 | NaN |
2 | NaN | 6.0 | 9 | NaN |
thresh
पैरामीटर आपको अधिक सटीक नियंत्रण देता है: आप उन पंक्तियों या कॉलम की संख्या सेट करते हैं जिनमें गैर-शून्य मान होने चाहिए ताकि उन्हें रखा जा सके:
example2.dropna(axis='rows', thresh=3)
0 1 2 3
1 2.0 5.0 8 NaN
यहां, पहली और अंतिम पंक्तियां हटा दी गई हैं, क्योंकि उनमें केवल दो गैर-शून्य मान हैं।
- शून्य मानों को भरना: आपके डेटासेट के आधार पर, कभी-कभी शून्य मानों को वैध मानों से भरना अधिक समझ में आता है बजाय उन्हें हटाने के। आप इसे इन-प्लेस करने के लिए
isnull
का उपयोग कर सकते हैं, लेकिन यह श्रमसाध्य हो सकता है, विशेष रूप से यदि आपके पास भरने के लिए बहुत सारे मान हैं। क्योंकि यह डेटा साइंस में एक सामान्य कार्य है, पांडाfillna
प्रदान करता है, जो आपके द्वारा चुने गए मानों के साथ गायब मानों को बदलकरSeries
याDataFrame
की एक प्रति लौटाता है। आइए देखें कि यह व्यवहार में कैसे काम करता है।
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
आप सभी शून्य प्रविष्टियों को एक ही मान, जैसे 0
से भर सकते हैं:
example3.fillna(0)
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
आप शून्य मानों को आगे-भर सकते हैं, यानी पिछले वैध मान का उपयोग करके शून्य को भर सकते हैं:
example3.fillna(method='ffill')
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
आप पीछे-भर भी कर सकते हैं, यानी अगले वैध मान को पीछे की ओर फैलाकर शून्य को भर सकते हैं:
example3.fillna(method='bfill')
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
जैसा कि आप अनुमान लगा सकते हैं, यह DataFrame
के साथ भी उसी तरह काम करता है, लेकिन आप शून्य मानों को भरने के लिए एक axis
भी निर्दिष्ट कर सकते हैं। पहले उपयोग किए गए example2
को फिर से लें:
example2.fillna(method='ffill', axis=1)
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
ध्यान दें कि जब पिछले मान उपलब्ध नहीं होता है, तो आगे-भरने के लिए, शून्य मान बना रहता है।
मुख्य बात: आपके डेटा सेट में गायब मानों से निपटने के कई तरीके हैं। आप जो विशेष रणनीति अपनाते हैं (उन्हें हटाना, बदलना, या उन्हें कैसे बदलना है) वह उस डेटा की विशिष्टताओं पर निर्भर होनी चाहिए। जितना अधिक आप डेटा सेट के साथ काम करेंगे और उन्हें समझेंगे, उतना ही बेहतर आप गायब मानों को संभालने में सक्षम होंगे।
डुप्लिकेट डेटा हटाना
लक्ष्य: इस उपखंड के अंत तक, आप DataFrames से डुप्लिकेट मानों की पहचान करने और उन्हें हटाने में सहज हो जाएंगे।
गायब डेटा के अलावा, वास्तविक दुनिया के डेटा सेट में अक्सर डुप्लिकेट डेटा भी मिलता है। सौभाग्य से, pandas
डुप्लिकेट प्रविष्टियों का पता लगाने और उन्हें हटाने का एक आसान तरीका प्रदान करता है।
- डुप्लिकेट की पहचान करना:
duplicated
: आपpandas
मेंduplicated
विधि का उपयोग करके आसानी से डुप्लिकेट मानों को पहचान सकते हैं, जो एक Boolean मास्क लौटाती है जो यह इंगित करती है किDataFrame
में कोई प्रविष्टि पहले की प्रविष्टि का डुप्लिकेट है। इसे क्रियान्वित करने के लिए एक उदाहरणDataFrame
बनाते हैं।
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
letters | numbers | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
2 | A | 1 |
3 | B | 3 |
4 | B | 3 |
example4.duplicated()
0 False
1 False
2 True
3 False
4 True
dtype: bool
- डुप्लिकेट हटाना:
drop_duplicates
: यह केवल उन डेटा की एक कॉपी लौटाता है जिनके सभीduplicated
मानFalse
हैं:
example4.drop_duplicates()
letters numbers
0 A 1
1 B 2
3 B 3
duplicated
और drop_duplicates
दोनों डिफ़ॉल्ट रूप से सभी कॉलम पर विचार करते हैं, लेकिन आप निर्दिष्ट कर सकते हैं कि वे आपके DataFrame
में केवल कॉलमों के एक उपसमूह की जांच करें:
example4.drop_duplicates(['letters'])
letters numbers
0 A 1
1 B 2
मुख्य बात: डुप्लिकेट डेटा हटाना लगभग हर डेटा-साइंस प्रोजेक्ट का एक आवश्यक हिस्सा है। डुप्लिकेट डेटा आपके विश्लेषण के परिणामों को बदल सकता है और आपको गलत परिणाम दे सकता है!
🚀 चुनौती
सभी चर्चा की गई सामग्री Jupyter Notebook के रूप में प्रदान की गई है। इसके अतिरिक्त, प्रत्येक अनुभाग के बाद अभ्यास दिए गए हैं, उन्हें आज़माएं!
पोस्ट-लेक्चर क्विज़
समीक्षा और स्व-अध्ययन
अपने डेटा को विश्लेषण और मॉडलिंग के लिए तैयार करने और उसे साफ करने के कई तरीके हैं, और डेटा को साफ करना एक "हैंड्स ऑन" अनुभव है। Kaggle से इन चुनौतियों को आज़माएं ताकि आप उन तकनीकों का पता लगा सकें जो इस पाठ में शामिल नहीं की गई हैं।
असाइनमेंट
फॉर्म से डेटा का मूल्यांकन करना
अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।