رصد مشتریان - پایتون


یک شرکت فراهم‌کننده سرویس اینترنت (ISP- Internet Service Provider) دو سال است که شروع به کار کرده و در این مدت برای جذب مشتری بیشتر، صرفا سرویس نامحدود اینترنت و با قیمت مناسب ارائه داده است. این شرکت در این دو سال، میزان و نحوه مصرف هر یک مشتریان خود را با دقت رصد کرده است و حالا که بازار را در دست گرفته و ارایه سرویس نامحدود دیگر برایش مقرون به‌‎صرفه نیست، قصد دارد متناسب با نیازهای مشتریانش، تعدادی سرویس محدود تعریف کرده و به آن‎ها پیشنهاد دهد. اولین قدم برای این کار، دسته‎‌بندی کاربران بر اساس فاکتورهای مختلف است و شما هم به همین دلیل استخدام شده‎‌اید.

اطلاعات مربوط به میزان مصرف هر مشتری در تاریخ‎‌های مختلف در اشی‎ایی از نوع TrafficUsage ذخیره شده است و توسط متد load_all در کلاس TrafficUsageDao در قالب یک لیست در اختیار شما قرار می‎‌گیرد. هر رکورد از این لیست، دارای اطلاعات زیر است:

  • user: کاربر
  • internal: مشخص می‌کند که اینترنت مصرفی داخلی بوده یا خارجی
  • nightly: مشخص می‌کند اینترنت مصرفی مربوط به حجم روزانه بوده یا شبانه
  • date: تاریخ مصرف حجم اینترنت
    • یک رشته با فرمت yy/MM/dd است (مانند 97/08/25).
  • usage: میزان مصرف اینترنت بر حسب مگابایت

در کلاس TrafficUsageService قرار است به کمک این داده‌‎ها، اطلاعات زیر استخراج شده و در دسته‎‌بندی مشتریان مورد استفاده قرار بگیرد:

extensionFromNameservice.py
from material import TrafficUsageDao


class TrafficUsageService:
    def __init__(self, traffic_usage_dao: TrafficUsageDao):
        self.traffic_usage_dao = traffic_usage_dao

    def social_media_lovers(self, year: int, month: int):
        pass

    def download_lovers(self, year: int, month: int):
        pass
Python
  1. عاشقان رسانه‎‌های اجتماعی (متد social_media_lovers):
    • مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آن‎ها از اینترنت خارجی، از مصرف اینترنت خارجی حداقل 90% سایر کاربران فعال در آن ماه بیشتر باشد.
      • مثلا اگر علی در تیر 97 به میزان 50 گیگ اینترنت خارجی مصرف کرده اما حداقل 90% سایر کاربران، هر کدام در تیر 97 مصرفشان از اینترنت خارجی کمتر از 50 گیگ بوده، علی از عاشقان رسانه‌های اجتماعی در تیر 97 بوده است.
      • منظور از کاربر فعال در یک بازه زمانی خاص، کاربری است که حداقل یک رکورد TrafficUsage در آن ماه و به نام آن کاربر ثبت شده باشد.
  2. مشتریان عشق دانلود (متد download_lovers):
    • مشتریانی که در طول ماه مورد نظر از سال مورد نظر، مجموع مصرف آن‌ها از اینترنت شبانه، بیش از مجموع مصرف آن‎ها از اینترنت روزانه باشد.

نکته:

  • در هر یک از دو سرویس مورد نظر، به هر دلیلی اگر کاربری پیدا نشود، باید یک لیست خالی برگردانده شود (خروجی متد None نباشد).

نمونه🔗

با اجرای ماژول main که داخل پروژه اولیه قرار دارد، خروجی زیر مورد انتظار است:

social media lovers:
a100
download lovers:
a100
a101
a102
Plain text

نکات🔗

  • می‌توانید فایل اولیه این سوال را از این لینک دریافت کنید.
  • تابع‌های شما نباید مقداری را چاپ کنند، بلکه باید مقادیر مورد نظر را بازگردانند.

نحوه ارسال🔗

شما باید کلاس TrafficUsageService موجود در فایل service.py را تکمیل و سپس این فایل را ارسال کنید.