পরিচয়
ডেটা বিশ্লেষণের সময় সঞ্চালনের জন্য সবচেয়ে মৌলিক এবং সাধারণ ক্রিয়াকলাপগুলির মধ্যে একটি হল একটি গ্রুপের মধ্যে কিছু কলামের বৃহত্তম মান ধারণকারী সারি নির্বাচন করা। এই পোস্টে, আমি আপনাকে দেখাব কিভাবে একটি ডেটাফ্রেমের মধ্যে প্রতিটি গ্রুপের মধ্যে সবচেয়ে বড়টি খুঁজে বের করতে হয়।
সমস্যা..
আসুন আমরা প্রথমে কাজটি বুঝতে পারি, ধরে নিই আপনাকে একটি চলচ্চিত্র ডেটাসেট দেওয়া হয়েছে এবং জনপ্রিয়তার ভিত্তিতে প্রতি বছরের সবচেয়ে জনপ্রিয় চলচ্চিত্রের তালিকা করার জন্য অনুরোধ করা হয়েছে।
কিভাবে করবেন..
1.ডেটা প্রস্তুত করা।
আচ্ছা গুগল ডেটাসেটে পূর্ণ। আমার ডেটা বিশ্লেষণের জন্য আমার প্রয়োজনীয় ডেটাসেটগুলি পেতে আমি প্রায়শই kaggle.com ব্যবহার করি। নির্দ্বিধায় kaggle.com-এ লগইন করুন এবং মুভি অনুসন্ধান করুন৷ ডিরেক্টরিতে মুভি ডেটাসেট ডাউনলোড করুন এবং এটি পান্ডাস ডেটাফ্রেমে আমদানি করুন৷
৷আপনি যদি kaggle.com থেকে আমার মতো ডেটা ডাউনলোড করে থাকেন, তাহলে অনুগ্রহ করে সেই ব্যক্তিকে লাইক করুন যিনি আপনাকে ডেটা দিয়ে সাহায্য করেছেন৷
npmovies হিসাবে pdimport numpy হিসাবে পান্ডা আমদানি করুন =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
# নমুনা 5 সারি প্রিন্ট দেখুন(f"আউটপুট \n\n*** {movies.sample(n=5)} ")
আউটপুট
*** বাজেট আইডি orth all_language original_title জনপ্রিয়তা \ 2028 22000000 235260 En 9.1757622548 0 13411 En Malibu এর সর্বাধিক চেয়েছিলেন 7000000006353627 500000000 10217 এন মিষ্টি আখেরাত 7.6731244555 0 98568 EN ENTERHERHERE 3.637857RELEASE_DERE 3.63787RELEASE_DATE রাজস্ব রানটাইম স্ট্যাটাইট \ 2028 28/02/2014 67800064 138.0 ঈশ্বরের প্রকাশিত পুত্র ২548 10/04/2003 0 86.0 মালিবুর সর্বাধিক 3279 24/01/1997 589304 106.0 প্রকাশিত প্রফোন্টাইন 3627 14/05/1997 3263585 112.0 মিষ্টি 2555 22/10/2011 প্রকাশিত 90.0 রিলিজ এন্টার Nowherevote_average vote_count2028 5.9 832548 4.7 773279 6.7 213627 6.8 1034555 6.5 49
2. ডেটা বোঝার জন্য কিছু মৌলিক ডেটা বিশ্লেষণ করুন৷
# ডেটা-টাইপসপ্রিন্ট সনাক্ত করুন(f"আউটপুট \n*** ডেটাটাইপগুলি হল {movies.dtypes}")
আউটপুট
*** ডেটাটাইপগুলি হল বাজেট int64id int64original_language objectoriginal_title অবজেক্টের জনপ্রিয়তা float64release_date objectrevenue int64runtime float64status objecttitle objectvote_average float64vote_count int64dtype:অবজেক্ট2. এখন, আমরা যদি মেমরি ব্যবহারের গুচ্ছ সংরক্ষণ করতে চাই তাহলে আমরা float64 এবং int64-এর ডেটাটাইপ রূপান্তর করতে পারি। কিন্তু ডাটা টাইপ কনভার্ট করার আগে আমাদের সতর্ক থাকতে হবে এবং আমাদের হোমওয়ার্ক করতে হবে।
# সর্বাধিক সাংখ্যিক মান পরীক্ষা করুন। ছাপ (f"আউটপুট \n *** সংখ্যাসূচক ডেটা প্রকারের জন্য সর্বাধিক মান - {movies.select_dtypes(exclude=['object']).unstack().max()}" )# সর্বাধিক ভোট গণনার মান কত (f" *** ভোট গণনা সর্বাধিক মান - {চলচ্চিত্র[['vote_count']].unstack().max()}")# সিনেমার সর্বোচ্চ রানটাইম মান কত (f) " *** মুভি আইডি সর্বোচ্চ মান - {চলচ্চিত্র[['রানটাইম']].আনস্ট্যাক(.max()}")আউটপুট
*** সাংখ্যিক ডেটা টাইপের জন্য সর্বাধিক মান - 2787965087.0 *** ভোট গণনা সর্বাধিক মান - 13752 *** মুভি আইডি সর্বাধিক মান - 338.03. এমন কলাম আছে যেগুলিকে 64 বিটে উপস্থাপন করার প্রয়োজন নেই এবং 16 বিটে নামিয়ে আনা যেতে পারে, তাই আসুন এটি করা যাক। 64 বিট int পরিসীমা -32768 থেকে +32767 পর্যন্ত। আমি ভোট_গণনা এবং রানটাইমের জন্য এটি করব এবং আপনি কম মেমরি স্টোরেজ প্রয়োজন এমন কলামগুলির জন্য এটি করতে পারেন৷
4. এখন, প্রতি বছরের জন্য সর্বাধিক জনপ্রিয় চলচ্চিত্র সনাক্ত করতে, আমাদের মুক্তির_তারিখ অনুসারে গ্রুপ করতে হবে এবং জনপ্রিয়তার সর্বাধিক মান পেতে হবে। একটি সাধারণ SQL নিচের মত কিছু দেখায়।
মুভি থেকে সর্বাধিক জনপ্রিয়তা সহ মুভি নির্বাচন করুন GROUP BY মুভি মুক্তিপ্রাপ্ত বছর5. দুর্ভাগ্যবশত আমাদের রিলিজ_ডেট হল একটি অবজেক্ট ডেটা-টাইপ সেগুলোকে ডেটটাইমে রূপান্তর করার কয়েকটি উপায় রয়েছে। আমি মাত্র বছরের সাথে একটি নতুন কলাম তৈরি করতে বেছে নেব যাতে আমি সেই কলামটি গ্রুপিংয়ের জন্য ব্যবহার করতে পারি।
চলচ্চিত্র['year'] =pd.to_datetime( movies['release_date']).dt.year.astype('Int64')print(f"Output \n ***{movies.sample(n=5) )}")আউটপুট
*** বাজেট আইডি মূল_লঙ্গেজ মূল_title জনপ্রিয়তা \ 757 0 87825 এর সাথে সমস্যাটি 18.587114711 58000000 395145 1350000000032632763 13000000 16406 En dick 4.7425374595 350000 764 En মন্দ মৃত 35.037625Release_date রাজস্ব রানটাইম স্ট্যাটাইট শিরোনাম \ 757 21/09/2012 0 111.0 Curve711 13/10/2010 71664962 111.0 প্রকাশিত RED1945 1/01/2013 19255873 124.0 প্রকাশিত 2763 4/08/1999 27500000 94.0 প্রকাশিত ডিক 4500000 85.0 প্রকাশিত দ্য ইভিল ডেডভোট_অ্যাভারেজ ভোট_কাউন্টের বছর757 6.6 366 2012711 6.6 2808 20101945 7.7 704 20132763 5.7 67 19994595 7.3194>পদ্ধতি 1 - দ্বারা গ্রুপ ব্যবহার না করে
6. আমাদের প্রয়োজন মাত্র 3টি কলাম, মুভির শিরোনাম, মুভি রিলিজের বছর এবং জনপ্রিয়তা। তাই আমরা সেই কলামগুলি বেছে নিই এবং ফলাফলগুলি কেমন দেখায় তা দেখতে বছরের ভিত্তিতে সাজানোর_মান ব্যবহার করি৷
প্রিন্ট(f"আউটপুট \n *** পদ্ধতি 1- গ্রুপ বাই") মুভিগুলি ব্যবহার না করে[["শিরোনাম", "বছর", "জনপ্রিয়তা"]]।ছাঁটা_মূল্য("বছর", ঊর্ধ্বমুখী=সত্য)প্রে>আউটপুট
*** গ্রুপ ব্যবহার না করেই
| শিরোনাম | বছর | জনপ্রিয়তা |
---|---|---|---|
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. এখন ফলাফলের দিকে তাকালে, এক বছরে সর্বাধিক জনপ্রিয় সিনেমা পেতে আমাদের জনপ্রিয়তা বাছাই করতে হবে। একটি তালিকা হিসাবে আগ্রহের কলাম পাস. ascending=False এর ফলে বাছাই করা ফলাফল অবরোহ ক্রমে হবে।
চলচ্চিত্র[["টাইটেল", "বছর", "জনপ্রিয়তা"]]।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 পদ্ধতি ব্যবহার করব।
চলচ্চিত্র[["শিরোনাম", "বছর", "জনপ্রিয়তা"]].sort_values(["year","জনপ্রিয়তা"], 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 - দ্বারা গ্রুপ ব্যবহার করা
আমরা গ্রুপবাই দিয়েও একই অর্জন করতে পারি। পদ্ধতিটি উপরে দেখানো এসকিউএল-এর অনুরূপ।
প্রিন্ট(f"আউটপুট \n *** পদ্ধতি 2 - গ্রুপ বাই")মুভি ব্যবহার করে[["শিরোনাম", "বছর", "জনপ্রিয়তা"]].গ্রুপবাই("বছর", as_index=False).প্রয়োগ করুন (lambda df:df.sort_values("জনপ্রিয়তা", ascending=False).head(1)).droplevel(0).sort_values("year", ascending=False)
আউটপুট
*** পদ্ধতি 2 - দ্বারা গ্রুপ ব্যবহার করা
| শিরোনাম | বছর | জনপ্রিয়তা |
---|---|---|---|
4255 | গ্রোয়িং আপ স্মিথ | 2017 | 0.710870 |
788 | ডেডপুল | 2016 | 514.569956 |
546 | মিনিয়নস | 2015 | 875.581305 |
95 | ইন্টারস্টেলার | 2014 | 724.247784 |
124 | হিমায়িত | 2013 | 165.125366 |
... | ... | ... | ... |
3804 | নরকের ফেরেশতা | 1930 | 8.484123 |
4457 | প্যান্ডোরার বক্স | 1929 | 1.824184 |
2638 | মেট্রোপলিস | 1927 | 32.351527 |
4661 | দ্য বিগ প্যারেড | 1925 | 0.785744 |
4592 | অসহনশীলতা | 1916 | 3.232447 |
90 সারি × 3 কলাম