قسمت بیست و یکم – استفاده از تابع Cut در پانداس

تابع cut در پانداس برای دسته‌بندی (باین کردن) مقادیر عددی به گروه‌های مجزا استفاده می‌شود. این تابع به شما اجازه می‌دهد که یک متغیر پیوسته را به دسته‌های گسسته تقسیم کنید.

کاربرد تابع cut

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

آرگومان‌های اصلی

x: آرایه یا سری عددی که باید دسته‌بندی شود.

bins: تعداد دسته‌ها یا لیستی از مرزهای دسته‌ها.

labels: برچسب‌هایی برای دسته‌ها (اختیاری).

right: مشخص می‌کند آیا مرز سمت راست دسته‌ها شامل مقادیر است یا خیر (پیش‌فرض True است).

مثال  ۱ : افزودن ستون جدید به دیتا فریم و دسته بندی داده ها

import pandas as pd

data = {
       'Name': ['Ali', 'Sara', 'Reza', 'Maryam'],
       'Score': [45, 78, 62, 90]
       }
df = pd.DataFrame(data)

bins = [0, 50, 75, 100]
labels = ["ضعیف", "متوسط", "عالی"]

df['Category'] = pd.cut(df['Score'], bins=bins, labels=labels)

print(df)

     Name  Score Category
۰     Ali     45     ضعیف
۱    Sara     78     عالی
۲    Reza     62    متوسط
۳  Maryam     90     عالی

مثال ۲ : گروه بندی داده و برچسب گذاری اطلاعات ( برای دریافت دیتاست بر روی لینک کلیک کنید)

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

import pandas as pd

# مسیر فایل اکسل ورودی
file_path = 'C:\\Users\\pirooz\\Desktop\\Article\\Article\\matplotlib\\data.xlsx'  # جایگزین کردن با مسیر فایل اکسل شما

# خواندن داده‌ها از فایل اکسل
df = pd.read_excel(file_path)

# محاسبه ستون مجموع خرید (تعداد خرید * مبلغ خرید)
df['مجموع خرید'] = df['تعداد خرید'] * df['مبلغ خرید']

# تجمیع داده‌ها بر اساس کد مشتری (حذف تکراری‌ها و جمع کردن مجموع خریدها)
df_grouped = df.groupby('کد مشتری').agg({
    'نام مشتری': 'first',  # نگه داشتن اولین نام مشتری برای هر کد
    'مجموع خرید': 'sum'   # جمع کردن مجموع خریدها
}).reset_index()

# محاسبه مجموع کل خریدها
total_sales = df_grouped['مجموع خرید'].sum()

# محاسبه درصد سهم هر مشتری از کل فروش
df_grouped['درصد خرید'] = (df_grouped['مجموع خرید'] / total_sales) * 100

# استفاده از تابع cut برای دسته‌بندی درصد خریدهای مشتریان
bins = [0, 10, 30, 60, 100]  # تعریف بازه‌ها برای درصد خرید
labels = ["کم", "متوسط", "زیاد", "بسیار زیاد"]  # برچسب بازه‌ها

df_grouped['دسته‌بندی_درصد_خرید'] = pd.cut(df_grouped['درصد خرید'], bins=bins, labels=labels)

# نمایش نتایج دسته‌بندی‌شده
print("داده‌ها پس از تجمیع و دسته‌بندی:")
print(df_grouped)

# ذخیره داده‌ها در فایل اکسل جدید
output_file = 'C:\\Users\\pirooz\\Desktop\\Article\\Article\\matplotlib\\aggregated_sales_data.xlsx'
df_grouped.to_excel(output_file, index=False)

print(f"\nفایل خروجی ذخیره شد: {output_file}")

   کد مشتری نام مشتری  مجموع خرید  درصد خرید دسته‌بندی_درصد_خرید
۰       ۱۰۰       علی        ۲۱۵۰  ۲۳.۴۹۷۲۶۸               متوسط
۱       ۱۰۲      مریم        ۲۲۰۰  ۲۴.۰۴۳۷۱۶               متوسط
۲       ۱۰۳       رضا        ۳۳۰۰  ۳۶.۰۶۵۵۷۴                زیاد
۳       ۱۰۴      سارا        ۱۵۰۰  ۱۶.۳۹۳۴۴۳               متوسط

توضیحات کد:

محاسبه ستون مجموع خرید:

ستون جدید مجموع خرید محاسبه می‌شود که از ضرب تعداد خرید و مبلغ خرید به دست می‌آید.

df[‘مجموع خرید’] = df[‘تعداد خرید’] * df[‘مبلغ خرید’].

گروه‌بندی و تجمیع داده‌ها بر اساس کد مشتری:

داده‌ها با استفاده از  group by بر اساس کد مشتری گروه‌بندی می‌شوند.

سپس با استفاده از ()agg مجموع خریدها برای هر مشتری محاسبه می‌شود و برای نام مشتری، اولین مقدار هر گروه انتخاب می‌شود (‘first’).

محاسبه درصد سهم مشتری:

برای هر مشتری، درصد سهم او از کل خریدها محاسبه می‌شود.

دسته‌بندی با استفاده از cut:

با استفاده از تابع cut، درصد خریدهای هر مشتری را به چهار دسته “کم”، “متوسط”، “زیاد” و “بسیار زیاد” تقسیم می‌کنیم.

ذخیره داده‌ها در فایل اکسل جدید:

نتایج تجمیع‌شده در یک فایل اکسل جدید به نام aggregated_sales_data.xlsx ذخیره می‌شود.

 

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *