परिचय
डेटा विश्लेषण के दौरान प्रदर्शन करने के लिए सबसे बुनियादी और सामान्य संचालन में से एक समूह के भीतर कुछ स्तंभों के सबसे बड़े मूल्य वाली पंक्तियों का चयन करना है। इस पोस्ट में, मैं आपको दिखाऊंगा कि डेटाफ़्रेम के भीतर प्रत्येक समूह का सबसे बड़ा समूह कैसे खोजें।
समस्या..
आइए पहले कार्य को समझें, मान लें कि आपको मूवी डेटासेट दिया गया है और लोकप्रियता के आधार पर प्रत्येक वर्ष की सबसे लोकप्रिय फिल्म को सूचीबद्ध करने का अनुरोध किया गया है।
इसे कैसे करें..
1. डेटा तैयार करना।
वैसे Google डेटासेट से भरा है। मैं अपने डेटा विश्लेषण के लिए आवश्यक डेटासेट प्राप्त करने के लिए अक्सर kaggle.com का उपयोग करता हूं। kaggle.com पर बेझिझक लॉगिन करें और फिल्में खोजें। निर्देशिका में मूवी डेटासेट डाउनलोड करें और इसे पांडा डेटाफ़्रेम में आयात करें।
अगर आपने मेरे जैसे ही kaggle.com से डेटा डाउनलोड किया है, तो कृपया उस व्यक्ति को पसंद करें जिसने डेटा के साथ आपकी मदद की।
import pandas as pd import numpy as np movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")के रूप में आयात करें
# see sample 5 rows print(f"Output \n\n*** {movies.sample(n=5)} ")
आउटपुट
*** budget id original_language original_title popularity \ 2028 22000000 235260 en Son of God 9.175762 2548 0 13411 en Malibu's Most Wanted 7.314796 3279 8000000 26306 en Prefontaine 8.717235 3627 5000000 10217 en The Sweet Hereafter 7.673124 4555 0 98568 en Enter Nowhere 3.637857 release_date revenue runtime status title \ 2028 28/02/2014 67800064 138.0 Released Son of God 2548 10/04/2003 0 86.0 Released Malibu's Most Wanted 3279 24/01/1997 589304 106.0 Released Prefontaine 3627 14/05/1997 3263585 112.0 Released The Sweet Hereafter 4555 22/10/2011 0 90.0 Released Enter Nowhere vote_average vote_count 2028 5.9 83 2548 4.7 77 3279 6.7 21 3627 6.8 103 4555 6.5 49
2. डेटा को समझने के लिए कुछ बुनियादी डेटा विश्लेषण करें।
# Identify the data-types print(f"Output \n*** Datatypes are {movies.dtypes} ")हैं
आउटपुट
*** Datatypes are budget int64 id int64 original_language object original_title object popularity float64 release_date object revenue int64 runtime float64 status object title object vote_average float64 vote_count int64 dtype: object
2. अब, अगर हम मेमोरी उपयोग के गुच्छा को बचाना चाहते हैं तो हम फ्लोट64 और इंट64 के डेटाटाइप को परिवर्तित कर सकते हैं। लेकिन हमें सावधान रहना होगा और डेटा प्रकारों को परिवर्तित करने से पहले अपना होमवर्क करना होगा।
# Check the maximum numeric value. print(f"Output \n *** maximum value for Numeric data type - {movies.select_dtypes(exclude=['object']).unstack().max()}") # what is the max vote count value print(f" *** Vote count maximum value - {movies[['vote_count']].unstack().max()}") # what is the max movie runtime value print(f" *** Movie Id maximum value - {movies[['runtime']].unstack().max()}")
आउटपुट
*** maximum value for Numeric data type - 2787965087.0 *** Vote count maximum value - 13752 *** Movie Id maximum value - 338.0
3. ऐसे कॉलम हैं जिन्हें 64 बिट्स में प्रदर्शित करने की आवश्यकता नहीं है और इसे 16 बिट तक लाया जा सकता है, तो चलिए इसे करते हैं। 64 बिट इंट रेंज -32768 से +32767 तक है। मैं इसे वोट_काउंट और रनटाइम के लिए करूँगा और आप इसे उन कॉलम के लिए कर सकते हैं जिनके लिए कम मेमोरी स्टोरेज की आवश्यकता होती है।
4. अब, प्रत्येक वर्ष के लिए सबसे लोकप्रिय फिल्म की पहचान करने के लिए, हमें रिलीज_डेट के अनुसार समूह बनाना होगा और लोकप्रियता का अधिकतम मूल्य प्राप्त करना होगा। एक विशिष्ट SQL नीचे जैसा कुछ दिखता है।
SELECT movie with max popularity FROM movies GROUP BY movie released year
5. दुर्भाग्य से हमारी रिलीज_डेट एक ऑब्जेक्ट डेटा-प्रकार है, उन्हें डेटाटाइम में बदलने के कुछ तरीके हैं। मैं सिर्फ साल के साथ एक नया कॉलम बनाना चुनूंगा ताकि मैं उस कॉलम को ग्रुपिंग के लिए इस्तेमाल कर सकूं।
movies['year'] = pd.to_datetime(movies['release_date']).dt.year.astype('Int64') print(f"Output \n ***{movies.sample(n=5)}")
आउटपुट
*** budget id original_language original_title popularity \ 757 0 87825 en Trouble with the Curve 18.587114 711 58000000 39514 en RED 41.430245 1945 13500000 152742 en La migliore offerta 30.058263 2763 13000000 16406 en Dick 4.742537 4595 350000 764 en The Evil Dead 35.037625 release_date revenue runtime status title \ 757 21/09/2012 0 111.0 Released Trouble with the Curve 711 13/10/2010 71664962 111.0 Released RED 1945 1/01/2013 19255873 124.0 Released The Best Offer 2763 4/08/1999 27500000 94.0 Released Dick 4595 15/10/1981 29400000 85.0 Released The Evil Dead vote_average vote_count year 757 6.6 366 2012 711 6.6 2808 2010 1945 7.7 704 2013 2763 5.7 67 1999 4595 7.3 894 1981
विधि 1 - ग्रुप बाय का उपयोग किए बिना
6. हमें केवल 3 कॉलम, मूवी टाइटल, मूवी रिलीज वर्ष और लोकप्रियता चाहिए। इसलिए हम उन कॉलमों को चुनते हैं और परिणाम कैसे दिखते हैं, यह देखने के लिए साल में सॉर्ट_वैल्यू का उपयोग करते हैं।
print(f"Output \n *** Method 1- Without Using Group By") movies[["title", "year", "popularity"]].sort_values("year", ascending=True)
आउटपुट
*** Without Using Group By
वें> <थ>शीर्षकवें> <वें>वर्षवें> | लोकप्रियता | ||
---|---|---|---|
4592 | असहिष्णुता | 1916 | 3.232447 |
4661 | बड़ी परेड | 1925 | 0.785744 |
2638 | महानगर | 1927 | 32.351527 |
4594 | ब्रॉडवे मेलोडी | 1929 | 0.968865 |
4457 | पेंडोरा बॉक्स | 1929 | 1.824184 |
... | ... | ... | ... |
2109 | मैं आपके सामने | 2016 | 53.161905 |
3081 | जंगल | 2016 | 19.865989 |
2288 | घाटी से लड़ें | 2016 | 1.224105 |
4255 | ग्रोइंग अप स्मिथ | 2017 | 0.710870 |
4553 | अमेरिका अभी भी वही जगह है | 0.000000 |
4803 पंक्तियाँ × 3 स्तंभ
8. अब परिणामों को देखते हुए, हमें एक वर्ष में सबसे लोकप्रिय फिल्म प्राप्त करने के लिए लोकप्रियता को भी क्रमबद्ध करने की आवश्यकता है। रुचि के कॉलम को सूची के रूप में पास करें। आरोही=गलत छँटाई का परिणाम अवरोही क्रम में होगा।
movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False)
वें> <थ>शीर्षकवें> <वें>वर्षवें> | लोकप्रियता | ||
---|---|---|---|
4255 | ग्रोइंग अप स्मिथ | 2017 | 0.710870 |
788 | डेडपूल | 2016 | 514.569956 |
26 | कप्तान अमेरिका:गृहयुद्ध | 2016 | 198.372395 |
10 | बैटमैन बनाम सुपरमैन:डॉन ऑफ जस्टिस | 2016 | 155.790452 |
64 | एक्स-मेन:सर्वनाश | 2016 | 139.272042 |
... | ... | ... | ... |
4593 | ब्रॉडवे मेलोडी | 1929 | 0.968865 |
2638 | महानगर | 1927 | 32.351527 |
4660 | बड़ी परेड | 1925 | 0.785744 |
4591 | असहिष्णुता | 1916 | 3.232447 |
4552 | अमेरिका अभी भी वही जगह है | 0.000000 |
4802 पंक्तियाँ × 3 स्तंभ
9. ठीक है, डेटा अब पूरी तरह से सॉर्ट किया गया है। तो अगला कदम यह है कि प्रत्येक वर्ष के लिए केवल पहला मान रखें और बाकी को हटा दें। लगता है कैसे करना है?.
हम .drop_duplicates पद्धति का उपयोग करेंगे।
movies[["title", "year", "popularity"]].sort_values(["year","popularity"], ascending=False).drop_duplicates(subset="year")
वें> <थ>शीर्षकवें> <वें>वर्षवें> | लोकप्रियता | ||
---|---|---|---|
4255 | ग्रोइंग अप स्मिथ | 2017 | 0.710870 |
788 | डेडपूल | 2016 | 514.569956 |
546 | मिनियंस | 2015 | 875.581305 |
95 | अंतरतारकीय | 2014 | 724.247784 |
124 | जमे हुए | 2013 | 165.125366 |
... | ... | ... | ... |
4456 | पेंडोरा बॉक्स | 1929 | 1.824184 |
2638 | महानगर | 1927 | 32.351527 |
4660 | बड़ी परेड | 1925 | 0.785744 |
4591 | असहिष्णुता | 1916 | 3.232447 |
4552 | अमेरिका अभी भी वही जगह है | 0.000000 |
91 पंक्तियाँ × 3 स्तंभ
विधि 2 - ग्रुप बाय का उपयोग करना
हम ग्रुपबी के साथ भी ऐसा ही हासिल कर सकते हैं। दृष्टिकोण ऊपर दिखाए गए SQL के समान है।
print(f"Output \n *** Method 2 - Using Group By") movies[["title", "year", "popularity"]].groupby("year", as_index=False).apply(lambda df:df.sort_values("popularity", ascending=False) .head(1)).droplevel(0).sort_values("year", ascending=False)
आउटपुट
*** Method 2 - Using Group By
वें> <थ>शीर्षकवें> <वें>वर्षवें> | लोकप्रियता | ||
---|---|---|---|
4255 | ग्रोइंग अप स्मिथ | 2017 | 0.710870 |
788 | डेडपूल | 2016 | 514.569956 |
546 | मिनियंस | 2015 | 875.581305 |
95 | अंतरतारकीय | 2014 | 724.247784 |
124 | जमे हुए | 2013 | 165.125366 |
... | ... | ... | ... |
38004 | नरक के दूत | 1930 | 8.484123 |
4457 | पेंडोरा बॉक्स | 1929 | 1.824184 |
2638 | महानगर | 1927 | 32.351527 |
4661 | बड़ी परेड | 1925 | 0.785744 |
4592 | असहिष्णुता | 1916 | 3.232447 |
90 पंक्तियाँ × 3 स्तंभ