با یک دیتاست فروشگاهی چه می‌توان کرد؟ بررسی یک نمونه تجاری (قسمت اول: تحلیل اکتشافی)

پیش‌گفتاردر این نوشته بر مبنای دیتاست تراکنش‌های یک فروشگاه آنلاین مستقر در انگلیس (لینک دیتاست) تلاش می‌کنیم به طور اجمالی به این سوال پاسخ بدیم که: «با یک دیتاست فروشگاهی چه می‌توان کرد؟».تراکنش‌های این فروشگاه اینترنتی ناشناس که ظاهراً هدایای مناسبتی رو به صورت عمده می‌فروشه در بازه سال‌های 2010 تا 2011 انجام شده و حاوی حدوداً 26000 تراکنشه که برای سفارش (یا کنسل کردن سفارش) بیش از 4000 محصول توسط حدود 4300 مشتری ثبت شده.چند سطر ابتدایی دیتاست که همگی کالاهای مختلف مربوط به یک سفارشه.اطلاعات ستون‌های دیتاست به صورت زیر قابل بیانه.InvoiceNo:شماره فاکتور که یک عدد 6 رقمیه و اگه با حرف c شروع بشه به معنی کنسل شدن سفارشه.StockCode: شناسه کالا که یک عدد 5 رقمیه و برای هر محصول منحصر به فردهDescription: شرح کالاQuantity: تعداد کالای فروخته شدهInvoiceDate: تاریخ و ساعت تراکنشUnitPrice: قیمت پایه بر حسب استرلینگCustomerID: شناسه مشتری که یک عدد 5 رقمیه و برای هر مشتری منحصر به فردهCountry: کشوری که کالا بهش صادر شدهمثلاً سطر اول دیتاست مربوط به فاکتور شماره 536365 و کالای با شناسه 85123A است که شرح کالا رو سرچ کردم شکل زیر رو آورد. از این کالا در تاریخ و ساعت 12/1/2010 8:26 به تعداد 6 عدد با قیمت پایه 2.55 به مشتری با شناسه 17850 از کشور انگلستان فروخته شده.اولین کالای فروخته‌شده در دیتاست یه همچین چیزیه!در ادامه چند نمونه از تحلیل‌های اکتشافی قابل انجام روی این دیتاست بیان میشه. البته قبلش باید کمی دیتاست رو تمیزکاری کنیم. کدهای این نوشته در این نشانی قابل دسترسه.تمیزکاری داده!می‌دونیم که قبل از شروع هر پروژه داده-محور باید تمیزکاری انجام بدیم! تمیزکاری خودش یک بحث مفصله اما چون موضوع بحث ما نیست فقط سه تا کار ساده رو همون اول انجام میدیم: 1- حذف سطرهای با مقادیر ناموجود، 2- حذف سطرهای تکراری 3- تبدیل ستون تاریخ به ساختارداده datetime تا بشه تحلیل‌های زمانی روی این ستون انجام داد.البته حذف سطرهای نامطلوب منجر به از دست رفتن حدود یک چهارم از داده‌ها میشه که اسراف بزرگیه! با این حال اجازه بدین با همین 400 هزار سطر باقی‌مونده کارمون رو انجام بدیم.تحلیل اکتشافی روی داده (EDA)تحلیل اکتشافی همون طور که از اسمش معلومه با این هدف انجام میشه که شناخت بهتری نسبت به دیتاست پیدا کنیم. در واقع تحلیل اکتشافی یک جور سفر به درون دیتاست محسوب میشه!انواع مختلفی از تحلیل‌های اکتشافی روی یک دیتاست قابل انجامه و محدودیت مشخصی نداره. در ادامه یک سری سوال بیان می‌کنیم و برای هر سوال خروجی کد رو رسم می‌کنیم.به نظرم چالش اصلی در تحلیل اکتشافی طرح سوال موثر و هدفمنده، و البته گاهی برخی سوال‌ها هم پاسخشون ساده به دست نمیاد. به خصوص در مواردی که روابط علّی یا همبستگی‌های غیر خطی مورد سوال باشه.توزیع ارزش مالی سفارش‌ها به چه صورته و مشتری‌های ویژه کدام‌اند؟بررسی ارزش سفارش‌ها به ازای مشتریان مختلف نشون میده تعداد کمی مشتری ویژه! و تعداد زیادی مشتری با سفارش محدود وجود داره.برای این که ببینیم هر مشتری چقدر سفارش داشته از متد groupby از کتابخونه Pandas استفاده کردیم که یک ابزار ساده ولی کارآمد برای تجمیع داده بر مبنای یک یا چند تا از ویژگی‌هاست.نتیجه: هوای مشتری شماره 14646 و 18102 را داشته باشید، البته فقط برای همین دیتاست!سی مشتری با بیش‌ترین حجم سفارشتوزیع سفارش‌ها در ساعات مختلف شبانه‌روز به چه صورته؟پاسخ به سوال بالا می‌تواند برای مدیریت سایت و تخصیص منابع (بخصوص پهنای باند) مفید باشه. همین کار رو میشه برای روز و ماه و هر واحد زمانی دیگه انجام داد.تعداد سفارشات در ساعات مختلف روزآیا کنسل‌کنندگان سفارش باز هم از سایت خرید می‌کنن؟این یک سوال جالبه که پاسخ بهش کمی دشوارتره و با یک خط کد نمیشه به جوابش رسید (شاید هم بشه و من مهارتش رو نداشته باشم). در واقع اگه کسی سفارشی رو کنسل کرده باشه ولی باز هم در آینده از سایت خرید انجام بده معنی‌اش میتونه این باشه که حس مثبتش به فروشگاه رو از دست نداده.روش کار به این صورته که دو تا دیتاست جداگانه از سفارشات با حجم مثبت و با حجم منفی (مربوط به کنسلی‌ها) درست می‌کنیم و هر دیتاست رو بر اساس شناسه مشتری تجمیع می‌کنیم. حالا زمان آخرین کنسلی هر مشتری و اولین خرید همون مشتری رو مقایسه می‌کنیم که می‌بینیم در موارد معدودی بعد از آخرین کنسلی باز هم خرید انجام شده.هر چند که من برای چند تا مشتری نتیجه رو به صورت دستی چک کردم ولی تحلیل‌هایی نظیر این نیاز به تست و بررسی موارد خاص (مثلاً مشتری‌هایی که چند بار کنسلی داشتن) داره. به طور کلی تست صحت عملکرد برنامه در دیتاساینس امری است دشوار!حدود سه درصد مشتری‌هایی که سفارشی رو کنسل کردن باز هم از سایت خرید کردن.آیا یک روند خاص در میزان فروش در طول زمان شکل گرفته؟برای پاسخ به این سوال که می‌تونه نقطه ورود به مبحث پیش‌بینی سری زمانی باشه، دست به دامان فیلترهایی همچون فیلتر HP میشیم (ممنون از افجه عزیز که این فیلتر رو به من معرفی کرد و الان خودش سربازیه). این فیلتر دو تا خروجی میده که یکیش روند تغییرات محسوب میشه و دومی هم نوسانات زمانیه که مجموع این دو نمودار میشه مجموع فروش شرکت در هر روز.نمودار روند فروش نشون میده که بله، یک روند زمانی فروش داریم که در مجموع صعودیه و نشون از رشد فروشگاه داره.روند و نوسانات فروش روزانه‌ی فروشگاهمقصد کالاها کجاست؟تا به اینجا بیش‌تر به مقوله زمان پرداختیم در حالی که مکان هم مهمه! در این دیتاست تنها ستون دارای اطلاعات مکانی ستون Country هست ولی اگه اطلاعات جزیی‌تری از مقصد سفارش وجود داشت (در بهترین حالت مختصات مکانی) میتونست خیلی مفید باشه.این فروشگاه عمده کالاهاش رو در داخل انگلستان فروخته و در نتیجه برای رسم نمودار، این کشور رو حذف می‌کنیم تا ببینیم بهترین مقاصد بعدی کدوم کشورهاست.بجز انگلستان که در نمودار آورده نشده، هلند، ایرلند، آلمان، فرانسه و استرالیا بهترین مشتریای این فروشگاهن.چه چیزی یک کالا رو پرفروش می‌کنه؟در انتهای این نوشته، به یکی از ستون‌ها می‌پردازیم که تا الان اصلاً بهش توجه نکرده بودیم: ستون شرح کالا! شرح کالا حاوی چند تا کلمه است که برای مثال نخستین کالا (همونی که عکسش رو گذاشتیم) به این شرحه:WHITE HANGING HEART T-LIGHT HOLDERحالا با یک بررسی نسبتاً ابتدایی، به ازای تمامی کلیدواژه‌هایی که در ستون شرح کالا وجود داره، مجموع فروش کالاهایی که شامل اون کلیدواژه بودن رو به دست میاریم.نتیجه: بجز یک سری کلمات عمومی، کلمات قرمز و قلب بیشترین فروش رو داشتن. زنده باد ولنتاین!مجموع فروش کالاهایی که یک کلیدواژه خاص رو داشته.سفر ما به درون دیتاست به پایان رسید و البته که سفر کوتاهی بیش نبود. اگه این نوشته مورد توجه مخاطبین قرار بگیره، در قسمت‌های بعدی به پیش‌بینی سری زمانی و خوشه‌بندی می‌پردازم.در صورت تمایل به دریافت مشاوره به من ایمیل بدین. انتقادی هم اگه دارین و یا ایرادی در این نوشته پیدا کردین ممنون میشم کامنت بذارین.