परिचय
इस पोस्ट में, मैं आपको दिखाऊंगा कि पंडों के साथ SQL शैली फ़िल्टरिंग के साथ डेटा विश्लेषण कैसे करें। कॉर्पोरेट कंपनी का अधिकांश डेटा डेटाबेस में संग्रहीत किया जाता है, जिसे पुनर्प्राप्त करने और उसमें हेरफेर करने के लिए SQL की आवश्यकता होती है। उदाहरण के लिए, Oracle, IBM, Microsoft जैसी कंपनियां हैं जिनके पास अपने स्वयं के SQL कार्यान्वयन के साथ स्वयं के डेटाबेस हैं।
डेटा वैज्ञानिकों को अपने करियर के किसी न किसी चरण में SQL से निपटना पड़ता है क्योंकि डेटा हमेशा CSV फ़ाइलों में संग्रहीत नहीं होता है। मैं व्यक्तिगत रूप से Oracle का उपयोग करना पसंद करता हूं, क्योंकि मेरी कंपनी का अधिकांश डेटा Oracle में संग्रहीत है।
परिदृश्य – 1 मान लीजिए कि हमें नीचे दी गई शर्तों के साथ हमारे मूवी डेटासेट से सभी फिल्मों को खोजने का कार्य दिया गया है।
- फिल्मों की भाषा या तो अंग्रेजी (एन) या स्पेनिश (एस) होनी चाहिए।
- फिल्मों की लोकप्रियता 500 से 1000 के बीच होनी चाहिए।
- फिल्म की स्थिति जारी होनी चाहिए।
- मतदानों की संख्या 5000 से अधिक होनी चाहिए। उपरोक्त परिदृश्य के लिए, SQL कथन नीचे जैसा कुछ दिखाई देगा।
अब जब आपने आवश्यकता के लिए SQL देख लिया है, तो चलिए पांडा का उपयोग करके इस चरण को चरणबद्ध तरीके से करते हैं। मैं आपको दो तरीके दिखाऊंगा।
विधि 1:- बूलियन अनुक्रमण
1. Movies_data डेटासेट को DataFrame में लोड करें।
pd मूवी के रूप में पांडा आयात करें =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
प्रत्येक शर्त के लिए एक चर निर्दिष्ट करें।
<पूर्व>भाषाएं =["एन", "एस"] condition_on_languages =चलचित्र। वास्तविक भाषा । isin (भाषाएं) condition_on_status =चलचित्र। स्थिति =="रिलीज़" condition_on_popularity =चलचित्र। लोकप्रियता। बीच (500, 1000) condition_on_votecount =चलचित्र। वोट_गिनती> 50003. सभी शर्तों (बूलियन सरणियों) को एक साथ मिलाएं।
final_conditions =( condition_on_languages &condition_on_status &condition_on_popularity &condition_on_votecount )columns =["title" , "Original_language", "status", "popularity" , "vote_count"]# सभी मूवी को एक साथ क्लब करना। loc [ final_conditions , कॉलम ]
<टीडी>10867
<टीडी>एन
<टीडी>10995
शीर्षक <थ>मूल_भाषा <वें>स्थिति <वें>लोकप्रियता <वें>वोट_गिनती | ||
---|---|---|
95 इंटरस्टेलर | विमोचित | 724.247784 |
788डेडपूल | विमोचित | 514.569956 |
विधि 2:- .query() विधि।
.query() विधि एक SQL है जहाँ डेटा को फ़िल्टर करने का क्लॉज़ शैली तरीका है। शर्तों को इस पद्धति के लिए एक स्ट्रिंग के रूप में पारित किया जा सकता है, हालांकि, कॉलम नामों में कोई रिक्त स्थान नहीं होना चाहिए।
यदि आपके कॉलम नामों में रिक्त स्थान हैं, तो उन्हें पायथन रिप्लेस फंक्शन का उपयोग करके अंडरस्कोर से बदलें।
अपने अनुभव से मैंने देखा है कि जब एक बड़े डेटाफ़्रेम पर लागू किया जाता है तो क्वेरी () विधि पिछली विधि की तुलना में तेज़ होती है।
pd मूवी के रूप में पांडा आयात करें =pd। read_csv ("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
4. क्वेरी स्ट्रिंग बनाएं और विधि निष्पादित करें।
ध्यान दें कि .query विधि एकाधिक पंक्तियों में फैले ट्रिपल उद्धृत स्ट्रिंग्स के साथ काम नहीं करती है।
final_conditions =("['en','es']"" और status =='रिलीज़' ""और लोकप्रियता> 500 ""और लोकप्रियता <1000""और वोट_गिनती> 5000") final_result =चलचित्र . क्वेरी ( final_conditions ) final_result
<टीडी>157336
<टीडी>एन
<टीडी>58000000
<टीडी>एन
<टीडी>108.0
<वें>बजट <वें>आईडी <थ>मूल_भाषा <वें>मूल_शीर्षक <वें>लोकप्रियता <वें>रिलीज_तारीख <वें>राजस्व <वें>रनटाइम <वें>स्ट | ||||||
---|---|---|---|---|---|---|
95 | अंतरतारकीय | 724.247784 | 5/11/2014 | 675120017 | 169.0 | रिलीज |
788 | 293660 | डेडपूल | 514.569956 | 9/02/2016 | 783112979 | रिलीज |
मेरे कोडिंग में और भी बहुत कुछ है, मेरे पास अपने "इन" क्लॉज में जांचने के लिए कई मान हैं। तो उपरोक्त सिंटैक्स के साथ काम करने के लिए आदर्श नहीं है। एट सिंबल (@) का उपयोग करके पायथन वेरिएबल्स को संदर्भित करना संभव है।
आप पाइथन सूची के रूप में प्रोग्रामेटिक रूप से मान भी बना सकते हैं और उन्हें (@) के साथ उपयोग कर सकते हैं।
movie_languages =['en' , 'es' ] final_conditions =("मूल_भाषा @movie_languages में ""और स्थिति =='रिलीज़' ""और लोकप्रियता> 500 ""और लोकप्रियता <1000""और वोट_काउंट> 5000" ) final_result =फिल्में। क्वेरी ( final_conditions ) final_result
<टीडी>157336
<टीडी>एन
<टीडी>58000000
<टीडी>एन
<टीडी>108.0
<वें>बजट <वें>आईडी <थ>मूल_भाषा <वें>मूल_शीर्षक <वें>लोकप्रियता <वें>रिलीज_तारीख <वें>राजस्व <वें>रनटाइम <वें>स्ट | ||||||
---|---|---|---|---|---|---|
95 | अंतरतारकीय | 724.247784 | 5/11/2014 | 675120017 | 169.0 | रिलीज |
788 | 293660 | डेडपूल | 514.569956 | 9/02/2016 | 783112979 | रिलीज |