Filter by دسته‌ها
آموزش هوش مصنوعی و انواع آن
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
پایتون و ابزارهای یادگیری عمیق
کتابخانه‌ های یادگیری عمیق
یادگیری با نظارت
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
اخبار
رسانه‌ها
آموزش پردازش زبان طبیعی
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
رویدادها
کاربردهای هوش مصنوعی
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
 4 توصیه مهم برای استفاده از تابع groupby از کتابخانه Pandas

4 توصیه مهم برای استفاده از تابع groupby از کتابخانه Pandas

کتابخانه Pandas محبوب‌ترین کتابخانه مورداستفاده در فعالیت‌های تحلیلی و اصلاحی است. به کمک توابع متنوع این کتابخانه می‌توان تحلیل داده‌ها را بدون مشکل و به سرعت انجام داد. علاوه بر این، دستورالعمل‌های آن بسیار ساده و قابل‌فهم می‌باشند. در این مقاله، تمرکز ما تنها بر روی یکی از توابع Pandas به نام تابع groupby است. این‌ها برای گروه‌بندی داده‌ها بر اساس مقادیر متمایز موجود یک ستون استفاده می‌شوند. پس از انجام این گروه‌بندی می‌توان با توجه گروه‌های حاصله روی ستون‌های حاوی مقادیر عددی تحلیل آماری انجام داد یا یک تابع دیگر را روی آن‌ها اعمال نمود.

با بررسی مثال زیر درک این فرایند آسان‌تر خواهد شد. برای شروع کار باید کتابخانه‌های موردنیاز را وارد برنامه کنیم.

استفاده از تابع groupby از کتابخانه Pandas

برای اجرای این مثال به یک دیتاست نیز نیاز خواهیم داشت. به این منظور، از یک دیتاست کوچک که حاوی اطلاعات خانه‌های شهر ملبورن است، استفاده می‌کنیم. می‌توانید آن را از این آدرس بارگیری نمایید.

df = pd.read_csv("/content/melb_data.csv", usecols = ['Price','Landsize','Distance','Type', 'Regionname'])

df = df[(df.Price < 3_000_000) & (df.Landsize < 1200)].sample(n=1000).reset_index(drop=True)

df.head()

تابع groupby

در این‌ کد استفاده از پارامتر usecols که در پرانتز جلوی تابع read_csv تعریف شده، به کاربر اجازه می‌دهد که تنها ستون‌های‌ موردنیاز خود را از میان ستون‌های فایل csv بخواند. در بخش بعد، داده‌های پرت ستون‌های price و landsize را نیز حذف شده است و در آخر، با استفاده از تابع sample یک نمونه تصادفی و شامل 1000 مشاهده (یا سطر) از این دیتاست برگزیده شد.

پیش از بیان توصیه اصلی، یک بار تابع groupby اجرا می‌شود، به نحوی که پس از گروه‌بندی داده‌ها بر اساس ستون  Typeمتوسط فاصله هر گروه از منطقه تجاری شهر محاسبه شود.

df[['Type','Distance']].groupby('Type').mean()

تابع groupby

همانطور که می‌بینید، خانه‌هایی که در این دیتاست در نوع h قرار گرفته‌اند در مقایسه با دو نوع دیگر، فاصله بیشتری با منطقه تجاری مرکز شهر دارند. حال می‌توانیم به سراغ توصیه‌های من برویم که به شما می‌آموزند چطور کارایی تابع groupby را بالا برده و بهترین استفاده را از آن بکنید.

نام ستون‌ها را تغییر دهید

تابع groupby به طور پیش‌فرض نام ستون‌ها را تغییر نمی‌دهد و به همین دلیل، نمی‌توان متوجه شد که مقادیر تجمعی ذاتاً بیانگر چه چیزی هستند. برای مثال، اگر در دیتافریم بالا (که میانگین فاصله را براساس نوع خانه‌ها محاسبه کردیم) نام ستون distance را به avg_distance (به معنای میانگین فاصله) تغییر می‌دادیم، قطعاً نام بامعناتری برای این ستون بود.

یک راه برای انجام این کار است که به جای تابع mean  از تابع agg استفاده کنیم.

df[['Type','Distance']].groupby('Type').agg(
   avg_distance = ('Distance', 'mean')(

تصویر تابع groupby
البته می‌توان پس از اجرای همان کد قبلی نیز نام ستون را تغییر داد، اما این روش معقول‌تر و کاربردی‌تر است. اگر به جای یک ستون با چندین ستون سروکار داشته باشیم و یا بخواهیم توابع مختلفی را روی یک ستون اعمال کنیم، اهمیت تغییر نام ستون‌ها واضح‌تر خواهد بود. به علاوه باید اشاره کنم که تابع agg می‌تواند چندین ستون را به صورت همزمان پردازش کند. به این منظور تنها کافی است نام ستون‌ها و تابع را مشخص کنیم.

تابع groupby

df[['Type','Distance']].groupby('Type').agg(avg_distance = ('Distance', 'mean'),median_distance = ('Distance', 'median'))

از عبارات Lambda استفاده کنید

عبارت Lambda نوعی خاص از توابع پایتون است که برای تعریف آن از کلیدواژه def استفاده نمی‌شود و به همین دلیل نیز نیازی به تخصیص یک نام خاص به آن نیست. هدف اصلی استفاده از عبارت Lambda ساده‌سازی کد است. این تابع یک خطی بوده و تنها یک بار قابل استفاده است.

در تابع agg می‌توان از عبارات Lambda نیز استفاده کرد. به این ترتیب می‌توان تبدیلات و محاسبات پیچیده‌تری را در کنار تابع groupby بر روی دیتافریم اعمال کرد. برای مثال، می‌توانیم متوسط قیمت هر یک از انواع خانه‌ها را محاسبه کرده و سپس رقم آن را برحسب میلیون دلار بیان کنیم. برای این کار باید از یک عبارت Lambda استفاده نمود.

df[['Type','Price']].groupby('Type').agg(
   avg_price_million = ('Price', lambda x: x.mean() / 1_000_000)
).round(2)

تابع groupby

از پارامتر As_index کمک بگیرید

تابع groupby ستونی که دیتافریم براساس آن گروه‌بندی شده است را به عنوان شاخص دیتافریم خروجی درنظر می‌گیرد. اما اگر چندین گروه‌بندی تو در تو Nested groups انجام داده باشیم، ظاهر دیتافریم چندان زیبا نخواهد شد.

df[['Type','Regionname', 'Distance']]\
.groupby(['Type','Regionname']).mean().head()

As_index

اگر بخواهیم بعداً روی این دیتافریم تحلیلی انجام دهیم، منطقی نیست که ستون type و region ستون‌های شاخص درنظر گرفته شوند. در این شرایط می‌توان از تابع reset_index استفاده کرد. اما یک راه بهتر و بهینه‌تر نیز برای این کار وجود دارد.

اگر پارامتر as_index را در تابع groupby تعریف کرده و مقدار آن را برابر False قرار دهیم، ستون‌هایی که گروه‌بندی بر اساس آن‌ها صورت گرفته، به عنوان ستون‌های معمولی در دیتافریم نمایش داده می‌شوند نه به عنوان ستون شاخص.

df[['Type','Regionname', 'Distance']]\
.groupby(['Type','Regionname'], as_index=False).mean().head()

groupby

مقادیر گمشده را نیز درنظر بگیرید

تابع groupby به‌طور پیشفرض خانه‌های خالی از داده را در نظر نمی‌گیرد. بگذارید برای توضیح این موضوع ابتدا مقادیر موجود در تعدادی از سلول‌های ستون Type را به NaN تبدیل کنم:

df.iloc[100:150, 0] = np.nan

با استفاده از تابع iloc می‌توان مجموعه‌ای از سطرها و ستون‌ها را به کمک اندیس آن‌ها انتخاب کرد و روی آن‌ها عملیات خاصی را انجام داد. در کد بالا، سطرهای 100 تا 150 ستون اول (که اندیس آن صفر است) را انتخاب کرده و مقادیر درون این سلول‌ها را برابر NaN گذاشته‌ام.

حال اگر بخواهیم مثل قبل میانگین فاصله هر یک از انواع خانه‌ها را از منطقه تجاری شهر محاسبه کنیم، تابع groupby بدون توجه به مقادیر گمشده، محاسبات را انجام می‌دهد و به ما اطلاعاتی درباره مقادیر گمشده نمی‌دهد.

تابع groupby + مقادیر گمشده

df[['Type','Distance']].groupby('Type').mean()

در برخی موارد، اطلاعات داده‌های گمشده را نیاز داریم تا بتوانیم آن‌ها را مدیریت کنیم. با تعریف پارامتر dropna در تابع groupby می‌توانیم مجموع مقادیر سطرهایی که دارای مقادیر گمشده هستند را نیز محاسبه کنیم.

df[['Type','Distance']].groupby('Type', dropna=False).mean()

سخن آخر

تابع groupby یکی از پرکاربردترین توابعی است که در فرایند تحلیل کاوش‌گرانه داده‌ها Exploratory data analysis استفاده می‌شود. تا بتوان روابط بین متغیرهای را شناسایی کرد. به همین دلیل، توانایی استفاده کارآمد از این تابع حائز اهمیت است و در فرآیند تحلیل داده‌ها با Pandas کمک زیادی به ما می‌کند. با به کارگیری این 4 توصیه در هنگام استفاده از تابع groupby می‌توانید از تمام توانایی‌ها و قابلیت‌های آن به نحو احسن استفاده کنید.

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
لطفاً برای تکمیل این فرم، جاوا اسکریپت را در مرورگر خود فعال کنید.