📊 تحلیل دادههای مشتریان (Customer Analytics) با استفاده از کتابخانه Pandas
🤔 تحلیل دادههای مشتریان چیست؟
این فرآیند شامل استفاده از دادههای مشتریان برای گرفتن تصمیمات تجاری بهتر است. اهداف اصلی آن عبارتند از:
🧑🤝🧑 شناخت بهتر مشتریان:
چه کسانی هستند؟ از کجا میآیند؟🛒 تحلیل رفتار خرید:
چه محصولاتی را، چه زمانی و چگونه میخرند؟🗂️ بخشبندی مشتریان (Segmentation):
گروهبندی مشتریان مشابه برای بازاریابی هدفمند.❤️ افزایش وفاداری و کاهش ریزش مشتری (Churn):
شناسایی مشتریان وفادار و مشتریان در معرض خطر.
🧭 مراحل اصلی تحلیل با پانداس
فرآیند تحلیل معمولاً شامل این ۵ مرحله است:
🟢 بارگذاری و کاوش اولیه دادهها
🟡 پاکسازی و آمادهسازی دادهها
🟠 مهندسی ویژگی (Feature Engineering)
🔵 تحلیل و استخراج بینش (Insight Extraction)
🟣 مصورسازی نتایج
💻 مثال عملی: تحلیل دادههای یک فروشگاه آنلاین
فرض کنید یک مجموعه داده از تراکنشهای یک فروشگاه آنلاین داریم. ستونهای این دادهها معمولاً به شکل زیر است:
InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID, Country
🟢 مرحله ۱: بارگذاری و کاوش اولیه دادهها
ابتدا کتابخانههای لازم را وارد کرده و دادهها را بارگذاری میکنیم.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # بارگذاری دادهها (فرض میکنیم فایل در کنار اسکریپت ماست) # در یک پروژه واقعی، ممکن است مسیر فایل متفاوت باشد # df = pd.read_csv('ecommerce_data.csv', encoding='ISO-8859-1') # برای این مثال، یک دیتافریم نمونه میسازیم: data = { 'InvoiceNo': ['536365', '536365', '536366', '536367', '536368', '536369', None, '536370'], 'StockCode': ['85123A', '71053', '84406B', '84879', '22728', '21756', '22633', '22726'], 'Description': ['Product A', 'Product B', 'Product C', 'Product D', 'Product E', 'Product F', 'Product G', 'Product H'], 'Quantity': [6, 6, 8, 2, 3, 1, -1, 3], # شامل مقادیر منفی (مرجوعی) 'InvoiceDate': ['12/1/2010 8:26', '12/1/2010 8:26', '12/1/2010 8:28', '12/1/2010 8:34', '12/1/2010 8:34', '12/1/2010 8:35', '12/1/2010 9:00', '12/1/2010 9:02'], 'UnitPrice': [2.55, 3.39, 1.85, 7.65, 4.25, 5.95, 1.85, 4.25], 'CustomerID': [17850.0, 17850.0, 17850.0, 13047.0, 13047.0, 14688.0, 14688.0, 15311.0], 'Country': ['United Kingdom', 'United Kingdom', 'United Kingdom', 'France', 'France', 'United Kingdom', 'United Kingdom', 'Germany'] } df = pd.DataFrame(data) # نمایش ۵ سطر اول دیتافریم print("نمایش اولیه دادهها:") print(df.head()) # مشاهده اطلاعات کلی دیتافریم (نوع ستونها و مقادیر غیرخالی) print("\nاطلاعات کلی دیتافریم:") df.info() # مشاهده آمار توصیفی برای ستونهای عددی print("\nآمار توصیفی:") print(df.describe())
🔍 بینش اولیه:
🔴 ستون
CustomerIDمقادیر خالی (Null) دارد.🔴 ستون
Quantityمقادیر منفی دارد که احتمالاً به معنای کالاهای مرجوعی است.🔴 ستون
InvoiceDateاز نوعobject(رشته) است و باید به نوع تاریخ تبدیل شود.
🟡 مرحله ۲: پاکسازی و آمادهسازی دادهها
این مرحله بسیار حیاتی است.
# 1. حذف سطرهایی که CustomerID ندارند (چون تحلیل ما بر اساس مشتری است) df.dropna(subset=['CustomerID'], inplace=True) # 2. حذف فاکتورهای مرجوعی (که تعداد منفی دارند) df = df[df['Quantity'] > 0] # 3. تبدیل ستون تاریخ به فرمت datetime df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate']) # 4. تبدیل نوع CustomerID به عدد صحیح df['CustomerID'] = df['CustomerID'].astype(int) print("\nاطلاعات دیتافریم پس از پاکسازی:") df.info()
🟠 مرحله ۳: مهندسی ویژگی (Feature Engineering)
ویژگیهای جدیدی میسازیم که برای تحلیل مفید هستند.
# ساخت ستون قیمت کل (TotalPrice) df['TotalPrice'] = df['Quantity'] * df['UnitPrice'] # استخراج ماه و سال از تاریخ خرید df['InvoiceMonth'] = df['InvoiceDate'].dt.to_period('M') print("\nدیتافریم با ویژگیهای جدید:") print(df.head())
🔵 مرحله ۴: تحلیل و استخراج بینش
حالا میتوانیم به سوالات کلیدی کسبوکار پاسخ دهیم.
سوال ۱: کدام کشورها بیشترین مشتری را دارند؟
customer_by_country = df.groupby('Country')['CustomerID'].nunique().sort_values(ascending=False) print("\nتعداد مشتریان یکتا بر اساس کشور:") print(customer_by_country.head())
سوال ۲: فروش ماهانه شرکت چگونه بوده است؟
monthly_revenue = df.groupby('InvoiceMonth')['TotalPrice'].sum() print("\nفروش کل ماهانه:") print(monthly_revenue)
سوال ۳: مشتریان برتر ما (بر اساس مجموع خرید) چه کسانی هستند؟
top_customers = df.groupby('CustomerID')['TotalPrice'].sum().sort_values(ascending=False) print("\n۱۰ مشتری برتر بر اساس مجموع خرید:") print(top_customers.head(10))
🧠 تحلیل پیشرفتهتر: بخشبندی مشتریان با مدل RFM
RFM یک مدل کلاسیک و بسیار مؤثر برای بخشبندی مشتریان است:
⏱️ Recency (تازگی):
آخرین باری که مشتری خرید کرده چقدر گذشته است؟ (هرچه کمتر، بهتر)🔁 Frequency (تکرار):
مشتری چند بار خرید کرده است؟ (هرچه بیشتر، بهتر)💰 Monetary (ارزش مالی):
مشتری در مجموع چقدر هزینه کرده است؟ (هرچه بیشتر، بهتر)
# برای محاسبه Recency، به یک تاریخ مرجع نیاز داریم (مثلاً یک روز بعد از آخرین تاریخ در دیتاست) snapshot_date = df['InvoiceDate'].max() + pd.Timedelta(days=1) # تجمیع دادهها در سطح مشتری rfm_data = df.groupby('CustomerID').agg({ 'InvoiceDate': lambda date: (snapshot_date - date.max()).days, # Recency 'InvoiceNo': 'nunique', # Frequency (تعداد فاکتورهای یکتا) 'TotalPrice': 'sum' # Monetary }) # تغییر نام ستونها rfm_data.rename(columns={'InvoiceDate': 'Recency', 'InvoiceNo': 'Frequency', 'TotalPrice': 'MonetaryValue'}, inplace=True) print("\nدیتافریم RFM:") print(rfm_data.head())
حالا میتوانیم بر اساس این مقادیر، مشتریان را به بخشهای مختلفی مانند “مشتریان وفادار”، “مشتریان در معرض خطر” و “مشتریان جدید” تقسیم کنیم (این کار معمولاً با استفاده از کوانتایلها انجام میشود).
🟣 مرحله ۵: مصورسازی نتایج
تصویرسازی به درک بهتر نتایج کمک میکند.
# تنظیمات ظاهری نمودارها sns.set(style="whitegrid") # نمودار تعداد مشتریان بر اساس کشور plt.figure(figsize=(12, 6)) customer_by_country.head(10).plot(kind='bar', color='skyblue') plt.title('تعداد مشتریان یکتا در ۱۰ کشور برتر') plt.xlabel('کشور') plt.ylabel('تعداد مشتریان') plt.xticks(rotation=45) plt.show() # نمودار فروش ماهانه plt.figure(figsize=(12, 6)) monthly_revenue.plot(kind='line', marker='o') plt.title('روند فروش ماهانه') plt.xlabel('ماه') plt.ylabel('مجموع فروش') plt.grid(True) plt.show()
✅ جمعبندی
با استفاده از کتابخانه Pandas، شما میتوانید:
📥 دادههای خام مشتریان را به سادگی بارگذاری و بررسی کنید.
🧹 مشکلات رایج داده مانند مقادیر خالی و فرمتهای نادرست را پاکسازی کنید.
🛠️ با مهندسی ویژگی، اطلاعات جدید و ارزشمندی مانند
TotalPriceایجاد کنید.📊 با استفاده از توابع قدرتمند مانند
groupbyوagg، تحلیلهای عمیقی مانند محاسبه مشتریان برتر یا مدل RFM را پیادهسازی کنید.📈 نتایج خود را برای ارائه به مدیران و ذینفعان به صورت نمودارهای گویا به تصویر بکشید.
این فرآیند اساس بسیاری از پروژههای پیشرفتهتر مانند پیشبینی ریزش مشتری (Churn Prediction) و سیستمهای پیشنهاددهنده (Recommendation Systems) است.




