इन तीन उपयोगी तकनीकों के साथ पंडों में मास्टर डेटा परिवर्तन

फ़िल्टर करने, हेरफेर करने और कार्य करने में गहराई से उतरें

द्वारा फोटो मिलाद फकुरियन on Unsplash

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

खैर, यह तब तक अच्छा है जब तक आप अपने दिवास्वप्न से बाहर नहीं निकल जाते और अपने सामने टूटी हुई पंक्तियों और निरर्थक लेबलों की निराशाजनक स्थिति से छेड़छाड़ करना शुरू नहीं कर देते।

स्वच्छ डेटा (अपने मूल रूप में) जैसी कोई चीज़ नहीं है। यदि आप एक डेटा वैज्ञानिक हैं, तो आप यह जानते हैं। यदि आप अभी शुरुआत कर रहे हैं, तो आपको इसे स्वीकार करना चाहिए। प्रभावी ढंग से काम करने के लिए आपको अपने डेटा को बदलने की आवश्यकता होगी।

आइए ऐसा करने के तीन तरीकों के बारे में बात करें।

फ़िल्टरिंग - लेकिन ठीक से समझाया गया

चलो फ़िल्टरिंग के बारे में बात करते हैं - लेकिन जितना आप करने के आदी हो सकते हैं उससे थोड़ा अधिक गहराई से। सबसे आम और उपयोगी डेटा परिवर्तन कार्यों में से एक के रूप में, प्रभावी ढंग से फ़िल्टर करना किसी भी डेटा वैज्ञानिक के लिए एक आवश्यक कौशल है। यदि आप पंडों को जानते हैं, तो संभवतः यह उन पहले ऑपरेशनों में से एक है जिन्हें आपने करना सीखा है।

आइए मेरे पसंदीदा, विचित्र रूप से बहुमुखी उदाहरण का उपयोग करके समीक्षा करें: छात्र ग्रेड का एक डेटाफ़्रेम, जिसे उपयुक्त रूप से कहा जाता है grades:

लेखक द्वारा छवि

हम 90 से नीचे के किसी भी अंक को फ़िल्टर करने जा रहे हैं, क्योंकि इस दिन हमने खराब प्रशिक्षित शिक्षक बनने का निर्णय लिया है जो केवल शीर्ष छात्रों को शिक्षा देते हैं (कृपया वास्तव में ऐसा कभी न करें)। इसे पूरा करने के लिए कोड की मानक पंक्ति इस प्रकार है:

ग्रेड[ग्रेड['स्कोर'] >=90]
लेखक द्वारा छवि

यह हमें जैक और हर्मियोन के पास छोड़ देता है। ठंडा। लेकिन वास्तव में यहाँ क्या हुआ? क्यों क्या कोड की उपरोक्त पंक्ति काम करती है? आइए उपरोक्त बाहरी कोष्ठक के अंदर अभिव्यक्ति के आउटपुट को देखकर थोड़ा और गहराई में उतरें:

ग्रेड['स्कोर'] >=90
लेखक द्वारा छवि

आह ठीक है। यह समझ आता है। ऐसा प्रतीत होता है कि कोड की यह पंक्ति एक पांडा श्रृंखला ऑब्जेक्ट लौटाती है जिसमें बूलियन ( True / False ) मान किसके द्वारा निर्धारित होते हैं >= 90 प्रत्येक व्यक्तिगत पंक्ति के लिए लौटाया गया। यह प्रमुख मध्यवर्ती चरण है. बाद में, यह बूलियन्स की श्रृंखला है जो बाहरी कोष्ठक में पारित हो जाती है, और तदनुसार सभी पंक्तियों को फ़िल्टर करती है।

पूर्णता के लिए, मैं यह भी उल्लेख करूंगा कि समान व्यवहार का उपयोग करके प्राप्त किया जा सकता है loc कीवर्ड:

ग्रेड.स्थान[ग्रेड['स्कोर'] >=90]
लेखक द्वारा छवि

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

अभी के लिए, सीखने का महत्वपूर्ण लक्ष्य यह है: जब हम पांडा में फ़िल्टर करते हैं, तो भ्रमित करने वाला वाक्यविन्यास किसी प्रकार का अजीब जादू नहीं होता है। हमें बस इसे इसके दो घटक चरणों में विभाजित करने की आवश्यकता है: 1) पंक्तियों की एक बूलियन श्रृंखला प्राप्त करना जो हमारी स्थिति को संतुष्ट करती है, और 2) संपूर्ण डेटाफ़्रेम को फ़िल्टर करने के लिए श्रृंखला का उपयोग करना।

आप पूछ सकते हैं कि यह उपयोगी क्यों है? खैर, आम तौर पर कहें तो, यदि आप यह समझे बिना कि वे वास्तव में कैसे काम करते हैं, ऑपरेशन का उपयोग करते हैं, तो इससे भ्रमित करने वाले बग पैदा होने की संभावना है। फ़िल्टरिंग एक उपयोगी और अविश्वसनीय रूप से सामान्य ऑपरेशन है, और अब आप जानते हैं कि यह कैसे काम करता है।

पर चलते हैं।

लैम्ब्डा फ़ंक्शंस की सुंदरता

कभी-कभी, आपके डेटा को ऐसे परिवर्तनों की आवश्यकता होती है जो पांडा की कार्यक्षमता में अंतर्निहित नहीं होते हैं। जितना हो सके प्रयास करें, स्टैक ओवरफ्लो को खंगालने या पांडा दस्तावेज़ों की परिश्रमपूर्वक खोज करने से आपकी समस्या का समाधान नहीं पता चलता है।

लैम्ब्डा फ़ंक्शंस दर्ज करें - एक उपयोगी भाषा सुविधा जो पांडा के साथ खूबसूरती से एकीकृत होती है।

एक त्वरित समीक्षा के रूप में, यहां बताया गया है कि लैम्ब्डा कैसे काम करता है:

>>> add_function = लैम्ब्डा x, y: x + y
>>> add_function(2, 3)
5

लैम्ब्डा फ़ंक्शंस नियमित फ़ंक्शंस से अलग नहीं हैं, इस तथ्य को छोड़कर कि उनके पास अधिक संक्षिप्त वाक्यविन्यास है:

  • समान चिह्न के बाईं ओर फ़ंक्शन का नाम
  • RSI lambda समान चिह्न के दाईं ओर कीवर्ड (इसी प्रकार def पारंपरिक पायथन फ़ंक्शन परिभाषा में कीवर्ड, इससे पायथन को पता चलता है कि हम एक फ़ंक्शन को परिभाषित कर रहे हैं)।
  • के बाद पैरामीटर lambda कीवर्ड, कोलन के बाईं ओर।
  • कोलन के दाईं ओर मान लौटाएँ।

अब, आइए लैम्ब्डा फ़ंक्शंस को यथार्थवादी स्थिति में लागू करें।

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

लेखक द्वारा छवि

अब, इस कंपनी के मास्टर डेटा हाईनेसेस के रूप में, हमें कुछ शीर्ष-गुप्त जानकारी दी गई है: इस कंपनी में सभी को 10% की वृद्धि और अतिरिक्त $1000 दिए जाएंगे। यह संभवतः किसी गणना के लिए इतना विशिष्ट है कि इसके लिए कोई विशिष्ट विधि नहीं खोजी जा सकती, लेकिन लैम्ब्डा फ़ंक्शन के साथ यह काफी सरल है:

अद्यतन_आय = लैम्ब्डा संख्या: संख्या + (संख्या * .10) + 1000

फिर, हमें बस पंडों के साथ इस फ़ंक्शन का उपयोग करना होगा apply फ़ंक्शन, जो हमें चयनित श्रृंखला के प्रत्येक तत्व पर एक फ़ंक्शन लागू करने देता है:

पैसे['नई आय'] = पैसे['आय'].लागू करें(अद्यतन_आय)
पैसा
लेखक द्वारा छवि

और हमारा काम हो गया! एक शानदार नया डेटाफ़्रेम जिसमें बिल्कुल वही जानकारी शामिल है जिसकी हमें आवश्यकता थी, सभी कोड की दो पंक्तियों में। इसे और अधिक संक्षिप्त बनाने के लिए, हम इसके अंदर लैम्ब्डा फ़ंक्शन को भी परिभाषित कर सकते थे apply सीधे तौर पर - ध्यान में रखने योग्य एक अच्छी युक्ति।

मैं यहां बात को सरल रखूंगा।

लैम्ब्डा अत्यंत उपयोगी हैं, और इसलिए, आपको उनका उपयोग करना चाहिए। आनंद लेना!

श्रृंखला स्ट्रिंग हेरफेर कार्य

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

उदाहरण के लिए, मान लें कि हमने निम्नलिखित डेटाफ़्रेम को कॉल किया है names जो लोगों के प्रथम और अंतिम नाम संग्रहीत करता है:

लेखक द्वारा छवि

अब, हमारे डेटाबेस में स्थान की सीमाओं के कारण, हम निर्णय लेते हैं कि किसी व्यक्ति के पूरे अंतिम नाम को संग्रहीत करने के बजाय, उनके अंतिम प्रारंभिक नाम को संग्रहीत करना अधिक कुशल है। इस प्रकार, हमें परिवर्तन करने की आवश्यकता है 'Last Name' तदनुसार कॉलम. लैम्ब्डा के साथ, ऐसा करने का हमारा प्रयास कुछ इस तरह दिख सकता है:

नाम['अंतिम नाम'] = नाम['अंतिम नाम'].लागू करें(लैम्ब्डा s: s[:1])
नामों
लेखक द्वारा छवि

यह स्पष्ट रूप से काम करता है, लेकिन यह थोड़ा अव्यवस्थित है, और इसलिए उतना पायथोनिक नहीं है जितना हो सकता है। सौभाग्य से, पांडा में स्ट्रिंग मैनिपुलेशन फ़ंक्शंस की सुंदरता के साथ, एक और, अधिक शानदार तरीका है (कोड की अगली पंक्ति के उद्देश्य के लिए, बस आगे बढ़ें और मान लें कि हमने पहले से ही बदलाव नहीं किया है 'Last Name' उपरोक्त कोड वाला कॉलम):

नाम['अंतिम नाम'] = नाम['अंतिम नाम'].str[:1]
नामों
लेखक द्वारा छवि

ता-दा! .str पांडा श्रृंखला की संपत्ति हमें श्रृंखला में प्रत्येक स्ट्रिंग को एक निर्दिष्ट स्ट्रिंग ऑपरेशन के साथ विभाजित करने देती है, जैसे कि हम प्रत्येक स्ट्रिंग के साथ व्यक्तिगत रूप से काम कर रहे थे।

लेकिन रुको, यह बेहतर हो जाता है। तब से .str प्रभावी ढंग से हमें श्रृंखला के माध्यम से एक स्ट्रिंग की सामान्य कार्यक्षमता तक पहुंचने की सुविधा मिलती है, हम अपने डेटा को जल्दी से संसाधित करने में सहायता के लिए स्ट्रिंग फ़ंक्शंस की एक श्रृंखला भी लागू कर सकते हैं! उदाहरण के लिए, मान लें कि हमने दोनों कॉलमों को लोअरकेस में बदलने का निर्णय लिया है। निम्नलिखित कोड कार्य करता है:

नाम['पहला नाम'] = नाम['पहला नाम'].str.निचला()
नाम['अंतिम नाम'] = नाम['अंतिम नाम'].str.lower()
नामों
लेखक द्वारा छवि

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

मैंने यहां केवल कुछ उदाहरणों को शामिल किया है, लेकिन स्ट्रिंग फ़ंक्शंस का एक बड़ा संग्रह आपके पास उपलब्ध है [1]

इनका उदारतापूर्वक उपयोग करें. वे उत्कृष्ट हैं.

अंतिम विचार और पुनर्कथन

यहां आपके लिए एक छोटी डेटा ट्रांसफॉर्मेशन चीट शीट है:

  1. जैसा आप चाहते हैं वैसा फ़िल्टर करें. जानें कि वास्तव में क्या चल रहा है ताकि आप जान सकें कि आप क्या कर रहे हैं।
  2. अपने लैम्ब्डा से प्यार करो. वे अद्भुत तरीकों से डेटा में हेरफेर करने में आपकी मदद कर सकते हैं।
  3. पांडा को तारें उतनी ही पसंद हैं जितनी आप करते हैं. इसमें बहुत सारी अंतर्निहित कार्यक्षमताएं हैं - आप इसका उपयोग भी कर सकते हैं।

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

मैं आपको बाहर जाने और कुछ और खोजने के लिए प्रोत्साहित करता हूं।

संदर्भ

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

इन तीन उपयोगी तकनीकों के साथ पांडा में मास्टर डेटा परिवर्तन स्रोत https://towardsdatascience.com/master-data-transformation-in-pandas-with-these- three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— से पुनर्प्रकाशित 4 https://towardsdatascience.com/feed के माध्यम से

<!–

->

समय टिकट:

से अधिक ब्लॉकचेन कंसल्टेंट्स