35 KiB
डेटा सोबत काम करणे: डेटा तयारी
![]() |
|---|
| डेटा तयारी - Sketchnote by @nitya |
पूर्व-व्याख्यान क्विझ
डेटाचा स्रोत कोणताही असो, कच्च्या डेटामध्ये काही विसंगती असू शकतात ज्यामुळे विश्लेषण आणि मॉडेलिंगमध्ये अडचणी निर्माण होतात. दुसऱ्या शब्दांत, हा डेटा "गलिच्छ" मानला जाऊ शकतो आणि त्याला स्वच्छ करण्याची गरज असते. या धड्यात डेटा स्वच्छ करण्याच्या आणि बदलण्याच्या तंत्रांवर लक्ष केंद्रित केले आहे, ज्यामुळे हरवलेला, अचूक नसलेला किंवा अपूर्ण डेटा हाताळता येईल. या धड्यात समाविष्ट विषय Python आणि Pandas लायब्ररीचा वापर करून शिकवले जातील आणि नोटबुकमध्ये दाखवले जातील या डिरेक्टरीमध्ये.
डेटा स्वच्छ करण्याचे महत्त्व
-
सोपे वापर आणि पुनर्वापर: जेव्हा डेटा व्यवस्थितपणे आयोजित आणि सामान्यीकृत केला जातो, तेव्हा तो शोधणे, वापरणे आणि इतरांसोबत शेअर करणे सोपे होते.
-
सुसंगतता: डेटा सायन्समध्ये अनेकदा एकापेक्षा जास्त डेटासेट्ससोबत काम करावे लागते, जिथे वेगवेगळ्या स्रोतांमधून आलेले डेटासेट्स एकत्र जोडले जातात. प्रत्येक स्वतंत्र डेटासेटमध्ये सामान्य मानकीकरण असल्याची खात्री करणे आवश्यक आहे, जेणेकरून ते सर्व एकत्रित केल्यावर डेटा उपयुक्त राहील.
-
मॉडेल अचूकता: स्वच्छ केलेला डेटा मॉडेल्सची अचूकता सुधारतो, जे त्यावर अवलंबून असतात.
सामान्य स्वच्छता उद्दिष्टे आणि धोरणे
-
डेटासेट एक्सप्लोर करणे: डेटा एक्सप्लोरेशन, ज्यावर नंतरच्या धड्यात चर्चा केली जाते, तुम्हाला स्वच्छ करायची गरज असलेला डेटा शोधण्यात मदत करू शकते. डेटासेटमधील मूल्ये व्हिज्युअली पाहणे तुम्हाला उर्वरित डेटाबद्दल अपेक्षा सेट करण्यात किंवा सोडवता येणाऱ्या समस्यांची कल्पना देण्यात मदत करू शकते. एक्सप्लोरेशनमध्ये मूलभूत क्वेरींग, व्हिज्युअलायझेशन्स आणि सॅम्पलिंगचा समावेश असतो.
-
फॉरमॅटिंग: स्रोतावर अवलंबून, डेटामध्ये सादरीकरणाच्या पद्धतीत विसंगती असू शकते. यामुळे डेटासेटमध्ये मूल्य शोधण्यात आणि सादर करण्यात अडचणी येऊ शकतात, जिथे ते दिसते पण व्हिज्युअलायझेशन्स किंवा क्वेरी परिणामांमध्ये योग्य प्रकारे सादर केले जात नाही. सामान्य फॉरमॅटिंग समस्यांमध्ये व्हाइटस्पेस, तारीख आणि डेटा प्रकार सोडवणे समाविष्ट आहे. फॉरमॅटिंग समस्या सोडवणे सामान्यतः डेटा वापरणाऱ्या लोकांवर अवलंबून असते. उदाहरणार्थ, तारीख आणि संख्या कशा सादर केल्या जातात यावर देशानुसार मानक वेगवेगळे असू शकते.
-
डुप्लिकेशन्स: डेटा ज्यामध्ये एकापेक्षा जास्त घटना असतात, तो अचूक परिणाम तयार करू शकतो आणि सामान्यतः काढून टाकला पाहिजे. दोन किंवा अधिक डेटासेट्स एकत्र जोडताना ही समस्या सामान्य असते. तथापि, काही वेळा जोडलेल्या डेटासेट्समधील डुप्लिकेशनमध्ये अतिरिक्त माहिती असू शकते आणि ती जतन करणे आवश्यक असते.
-
हरवलेला डेटा: हरवलेला डेटा अचूकतेमध्ये त्रुटी तसेच कमकुवत किंवा पक्षपाती परिणाम निर्माण करू शकतो. कधी कधी हे "रीलोड" करून, हरवलेल्या मूल्यांना गणना आणि कोडसारख्या पद्धतीने भरून काढून किंवा फक्त मूल्य आणि संबंधित डेटा काढून टाकून सोडवले जाऊ शकते. डेटा का आणि कसा हरवला गेला यावरून हरवलेल्या मूल्यांना सोडवण्यासाठी घेतलेली कृती ठरते.
DataFrame माहिती एक्सप्लोर करणे
शिकण्याचे उद्दिष्ट: या उपविभागाच्या शेवटी, तुम्ही pandas DataFrames मध्ये संग्रहित डेटाबद्दल सामान्य माहिती शोधण्यात सहजतेने सक्षम असाल.
तुम्ही तुमचा डेटा pandas मध्ये लोड केल्यानंतर, तो DataFrame मध्ये असेल (मागील धडा साठी तपशीलवार आढावा पहा). तथापि, जर तुमच्या DataFrame मध्ये 60,000 ओळी आणि 400 स्तंभ असतील, तर तुम्ही काय काम करत आहात याची कल्पना कशी कराल? सुदैवाने, pandas काही सोयीस्कर साधने प्रदान करते ज्यामुळे DataFrame बद्दल एकूण माहिती पटकन पाहता येते, तसेच पहिल्या काही आणि शेवटच्या काही ओळी.
या कार्यक्षमता एक्सप्लोर करण्यासाठी, आपण Python scikit-learn लायब्ररी आयात करू आणि एक प्रसिद्ध डेटासेट वापरू: Iris डेटा सेट.
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
यावरून, आपल्याला माहित आहे की Iris डेटासेटमध्ये चार स्तंभांमध्ये 150 नोंदी आहेत आणि कोणतेही null नोंदी नाहीत. सर्व डेटा 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
महत्त्वाचे: DataFrame मधील माहितीबद्दल मेटाडेटा पाहून किंवा त्यातील पहिल्या आणि शेवटच्या काही मूल्यांकडे पाहून, तुम्ही तुमच्या डेटाच्या आकार, स्वरूप आणि सामग्रीबद्दल त्वरित कल्पना करू शकता.
हरवलेल्या डेटाशी व्यवहार करणे
शिकण्याचे उद्दिष्ट: या उपविभागाच्या शेवटी, तुम्हाला DataFrames मधून null मूल्ये बदलणे किंवा काढून टाकणे माहित असेल.
बहुतेक वेळा तुम्हाला वापरायचे (किंवा वापरण्याची गरज असलेले) डेटासेट्समध्ये हरवलेली मूल्ये असतात. हरवलेल्या डेटाशी कसे व्यवहार केले जाते यामध्ये सूक्ष्म व्यापार असतो, ज्याचा तुमच्या अंतिम विश्लेषणावर आणि वास्तविक जगातील परिणामांवर परिणाम होऊ शकतो.
Pandas हरवलेल्या मूल्यांशी दोन प्रकारे व्यवहार करते. पहिला तुम्ही मागील विभागांमध्ये पाहिला आहे: NaN, किंवा Not a Number. हे प्रत्यक्षात IEEE फ्लोटिंग-पॉइंट स्पेसिफिकेशनचा एक विशेष मूल्य आहे आणि ते फक्त हरवलेल्या फ्लोटिंग-पॉइंट मूल्ये दर्शवण्यासाठी वापरले जाते.
फ्लोट्स व्यतिरिक्त हरवलेल्या मूल्यांसाठी, pandas Python None ऑब्जेक्ट वापरतो. दोन वेगवेगळ्या प्रकारच्या मूल्यांचा सामना करणे गोंधळात टाकणारे वाटू शकते, जे मूलत: एकच गोष्ट सांगतात, परंतु या डिझाइन निवडीसाठी ठोस प्रोग्रामिंग कारणे आहेत आणि प्रत्यक्षात, या मार्गाने जाणे बहुसंख्य प्रकरणांसाठी pandas ला चांगला तडजोड प्रदान करण्यास सक्षम करते. तथापि, None आणि NaN दोन्ही निर्बंध घेऊन येतात ज्याबद्दल तुम्हाला जागरूक असणे आवश्यक आहे, त्यांचा कसा वापर केला जाऊ शकतो यासंदर्भात.
NaN आणि None बद्दल अधिक जाणून घ्या नोटबुक मधून!
- Null मूल्ये शोधणे:
pandasमध्ये,isnull()आणिnotnull()पद्धती तुमच्या डेटामधील null डेटा शोधण्यासाठी प्राथमिक पद्धती आहेत. दोन्ही तुमच्या डेटावर Boolean मास्क परत करतात. आम्ही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 एक अंकगणितीय null आहे, तरीही तो एक परिपूर्ण पूर्णांक आहे आणि pandas त्याला तसा मानतो. '' थोडे अधिक सूक्ष्म आहे. जरी आम्ही सेक्शन 1 मध्ये रिक्त स्ट्रिंग मूल्य दर्शवण्यासाठी त्याचा वापर केला, तरीही तो एक स्ट्रिंग ऑब्जेक्ट आहे आणि pandas च्या दृष्टिकोनातून null चे प्रतिनिधित्व नाही.
आता, चला हे उलट करूया आणि या पद्धती अधिक व्यावहारिक पद्धतीने वापरूया. तुम्ही Boolean मास्क थेट Series किंवा DataFrame इंडेक्स म्हणून वापरू शकता, जे हरवलेल्या (किंवा उपस्थित) मूल्यांसोबत काम करताना उपयुक्त ठरू शकते.
महत्त्वाचे:
isnull()आणिnotnull()पद्धतीDataFrames मध्ये वापरल्यावर समान परिणाम तयार करतात: त्या परिणाम आणि त्या परिणामांचा इंडेक्स दर्शवतात, जे तुम्हाला तुमच्या डेटाशी झगडताना खूप मदत करतील.
- Null मूल्ये काढून टाकणे: हरवलेल्या मूल्यांची ओळख पटवण्याव्यतिरिक्त, pandas
SeriesआणिDataFrames मधून null मूल्ये काढून टाकण्यासाठी सोयीस्कर साधन प्रदान करते. (विशेषतः मोठ्या डेटासेट्सवर, तुमच्या विश्लेषणातून हरवलेल्या [NA] मूल्यांना काढून टाकणे इतर मार्गांनी त्यांचा सामना करण्यापेक्षा अधिक सल्ला दिला जातो.) हे कृतीत पाहण्यासाठी, चलाexample1कडे परत जाऊया:
example1 = example1.dropna()
example1
0 0
2
dtype: object
लक्षात घ्या की हे तुमच्या example3[example3.notnull()] च्या आउटपुटसारखे दिसले पाहिजे. येथे फरक असा आहे की, मास्क केलेल्या मूल्यांवर फक्त इंडेक्सिंग करण्याऐवजी, dropna ने Series example1 मधून हरवलेली मूल्ये काढून टाकली आहेत.
DataFrames मध्ये दोन परिमाणे असल्यामुळे, ते डेटा काढण्यासाठी अधिक पर्याय देतात.
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 |
(pandas ने NaNs accommodate करण्यासाठी दोन स्तंभ फ्लोट्समध्ये अपकास्ट केले आहेत का हे तुम्ही लक्षात घेतले आहे का?)
तुम्ही DataFrame मधून एकच मूल्य काढू शकत नाही, त्यामुळे तुम्हाला संपूर्ण ओळी किंवा स्तंभ काढावे लागतात. तुम्ही काय करत आहात यावर अवलंबून, तुम्हाला एक किंवा दुसरे करायचे असू शकते, आणि त्यामुळे pandas तुम्हाला दोन्ही पर्याय देते. कारण डेटा सायन्समध्ये, स्तंभ सामान्यतः व्हेरिएबल्सचे प्रतिनिधित्व करतात आणि ओळी निरीक्षणांचे प्रतिनिधित्व करतात, तुम्ही डेटा ओळी काढण्याची अधिक शक्यता असते; dropna() साठी डीफॉल्ट सेटिंग म्हणजे null मूल्ये असलेल्या सर्व ओळी काढणे:
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
लक्षात घ्या की हे तुम्हाला ठेवायचा डेटा मोठ्या प्रमाणात काढून टाकू शकते, विशेषतः लहान डेटासेट्समध्ये. जर तुम्हाला फक्त काही किंवा सर्व null मूल्ये असलेल्या ओळी किंवा स्तंभ काढायचे असतील तर काय? तुम्ही dropna मध्ये how आणि thresh पॅरामीटर्ससह ती सेटिंग्ज निर्दिष्ट करता.
डीफॉल्टनुसार, how='any' (जर तुम्हाला स्वतः तपासायचे असेल किंवा पद्धतीमध्ये इतर कोणते पॅरामीटर्स आहेत ते पाहायचे असेल, तर कोड सेलमध्ये example4.dropna? चालवा). तुम्ही how='all' निर्दिष्ट करू शकता जेणेकरून फक्त सर्व null मूल्ये असलेल्या ओळी किंवा स्तंभ काढले जातील. हे कृतीत पाहण्यासाठी आपले उदाहरण 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 पॅरामीटर तुम्हाला अधिक सूक्ष्म नियंत्रण देते: तुम्ही सेट करता की ओळी किंवा स्तंभ ठेवण्यासाठी किती non-null मूल्ये असणे आवश्यक आहे:
example2.dropna(axis='rows', thresh=3)
0 1 2 3
1 2.0 5.0 8 NaN
येथे, पहिली आणि शेवटची ओळ काढून टाकली गेली आहे, कारण त्यामध्ये फक्त दोन non-null मूल्ये आहेत.
- Null मूल्ये भरून काढणे: तुमच्या डेटासेटवर अवलंबून, null मूल्ये काढून टाकण्याऐवजी त्यांना वैध मूल्यांनी भरून काढणे कधी कधी अधिक अर्थपूर्ण असते. तुम्ही
isnullवापरून हे जागेवर करू शकता, परंतु ते श्रमसाध्य असू शकते, विशेषतः जर तुम्हाला भरून काढण्यासाठी अनेक मूल्ये असतील. कारण डेटा सायन्समध्ये ही एक सामान्य कार्य आहे, pandasfillnaप्रदान करते, जे तुमच्या निवडीच्या मूल्याने हरवलेल्या मूल्यांसहSeriesकिंवाDataFrameची प्रत परत करते. हे प्रत्यक्षात कसे कार्य करते हे पाहण्यासाठी आणखी एक उदाहरणSeriesतयार करूया.
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
तुम्ही सर्व null नोंदी एका मूल्याने, जसे की 0, भरू शकता:
example3.fillna(0)
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
तुम्ही null मूल्ये फॉरवर्ड-फिल करू शकता, म्हणजे शेवटचे वैध मूल्य null भरण्यासाठी वापरू शकता:
example3.fillna(method='ffill')
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
तुम्ही null भरण्यासाठी पुढील वैध मूल्य मागे नेऊन बॅक-फिल करू शकता:
example3.fillna(method='bfill')
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
तुम्ही अंदाज करू शकता, हे DataFrames सोबत समान कार्य करते, परंतु तुम्ही null मूल्ये भरण्यासाठी 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
लक्षात घ्या की जेव्हा फॉरवर्ड-फिलसाठी मागील मूल्य उपलब्ध नसते, तेव्हा null मूल्य तसेच राहते.
महत्त्वाचे: तुमच्या डेटासेटमधील हरवलेल्या मूल्यांशी व्यवहार करण्याचे अनेक मार्ग आहेत. तुम्ही वापरणारी विशिष्ट रणनीती (त्यांना काढून टाकणे, बदलणे किंवा कसे बदलायचे) त्या डेटाच्या वैशिष्ट्यांवर अवलंबून असते. जितके जास्त तुम्ही डेटासेट्स हाताळाल आणि त्यांच्याशी संवाद साधाल, तितके हरवलेल्या मूल्यांशी व्यवहार करण्याचे चांगले ज्ञान तुम्हाला मिळेल.
डुप्लिकेट डेटा काढून टाकणे
शिकण्याचे उद्दिष्ट: या उपविभागाच्या शेवटी, तुम्ही 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 वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण होणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.
