Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import calendar
- from typing import Optional
- from enum import Enum
- from numbers import Real
- class Strategies(Enum):
- BY_GOOD = "BY_GOOD" # придумайте значение enum'а
- BY_MONTH = "BY_MONTH" # придумайте значение enum'а
- months_list = [calendar.month_name[i] for i in range(1, 13)]
- class InconsistentDataError(Exception):
- pass
- def get_most_profitable_month_name(
- amounts_of_sold_subscriptions: np.ndarray,
- subscriptions_prices: np.ndarray,
- ) -> str:
- if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
- raise InconsistentDataError
- income = amounts_of_sold_subscriptions * subscriptions_prices
- sold_per_month = np.sum(income, axis = 1)
- max_id = np.argmax(sold_per_month)
- return months_list[max_id]
- def get_mean_profit(
- amounts_of_sold_subscriptions: np.ndarray,
- subscriptions_prices: np.ndarray,
- strategy: Optional[Strategies] = None,
- ):
- if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
- raise InconsistentDataError
- income = amounts_of_sold_subscriptions * subscriptions_prices
- income_per_month = np.sum(income, axis=1)
- income_per_year = np.sum(income_per_month)
- amounts_of_sold_subscriptions_per_month = np.sum(amounts_of_sold_subscriptions, axis = 1)
- amounts_of_sold_subscriptions_per_year = np.sum(amounts_of_sold_subscriptions_per_month)
- amounts_of_sold_subscriptions_per_service = np.sum(amounts_of_sold_subscriptions, axis = 0)
- income_per_servise_per_year = np.sum(income, axis = 0)
- res = None
- if strategy == None:
- res = income_per_year / amounts_of_sold_subscriptions_per_year
- elif strategy == Strategies.BY_GOOD:
- res = income_per_servise_per_year / amounts_of_sold_subscriptions_per_service
- elif strategy == Strategies.BY_MONTH:
- res = income_per_month / amounts_of_sold_subscriptions_per_month
- return res
- def sort_month_names_by_profits(
- amounts_of_sold_subscriptions: np.ndarray,
- subscriptions_prices: np.ndarray,
- ascending: bool = True,
- ) -> list[str]:
- if amounts_of_sold_subscriptions.shape[1] != subscriptions_prices.shape[1]:
- raise InconsistentDataError
- income = amounts_of_sold_subscriptions * subscriptions_prices
- income_per_month = np.sum(income, axis=1)
- indices = np.argsort(income_per_month)
- res = months_list[indices]
- if not ascending:
- res = res[::-1]
- return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement