Знаю, что многим аналитикам тема классов кажется ненужной — и это нормально.
Сам изучал ООП на своем направлении в магистратуре, очень много всего предстояло изучить... И про свойства, про то, как реализовать, жуть короче, хочется функциями пользовать и все (и то максимум)...
Но если присмотреться, мы сталкиваемся с ними каждый день, просто не задумываемся об этом.
Например, в pandas 🐼.
1️⃣ Класс: pandas.DataFrame, который задает структуру таблиц: колонки, индексы, методы
2️⃣ Объект: df = pd.DataFrame(...), может быть задан через чтение баз данных, csv, вручную и тд.
3️⃣ Методы: df.groupby(), df.query, df, etc.
Классы могут помочь, когда мы хотим выстроить определенную структуру и избежать хаоса в коде
🔽Опишу самый простой пример 🔽
Класс User описывает пользователя продукта.
У него есть: атрибуты user_id, os, orders и метод is_active(),
который определяет, активен ли пользователь (есть ли у него заказы).
class User:
"""Класс, описывающий пользователя продукта."""
def __init__(self, user_id: int, os: str, orders: list[int]):
"""
Args:
user_id (int): Уникальный идентификатор пользователя.
os (str): Операционная система (например, 'iOS' или 'Android').
orders (list[int]): Список идентификаторов заказов пользователя.
"""
self.user_id = user_id
self.os = os
self.orders = orders
def is_active(self) -> bool:
"""Проверяет, есть ли у пользователя хотя бы один заказ."""
return len(self.orders) > 0
Я слышал, что на некоторых курсах по аналитике уже включают ООП. Например, в теме по 🆎.
Это логично: когда ты работаешь с десятками экспериментов, хочется выстроить для них единую структуру, чтобы каждый тест имел одинаковый формат, методы расчёта и итоговую инфу 👀
class Experiment:
def __init__(self, name, control, test, metric_name):
self.name = name
self.control = control
self.test = test
self.metric_name = metric_name
def calc_mean(self, group):
return group[self.metric_name].mean()
def uplift(self):
return (self.calc_mean(self.test) - self.calc_mean(self.control)) / self.calc_mean(self.control)
def summary(self):
return {
"experiment": self.name,
"uplift": round(self.uplift() * 100, 2),
"control_mean": self.calc_mean(self.control),
"test_mean": self.calc_mean(self.test),
}
Но в крупных компаниях зачастую реализована своя A/B платформа, аналитику остается только делать дизайн эксперимента, подводить итоги и делать рекомендации... 🧐
💻💻 Подход с классами не ограничивается тестами.
Необязательно использовать что-то сложное, например, на обучении я реализовывал классы для обращения к API / обработке ошибок / хранения информации на кошельке у юзера. Офк, это можно решить и с помощью SQL (про хранение данных), а у меня проект был без него 💅
Его можно применять и в других задачах — например, в ML, где удобно базово описать модель под свои данные и потом переиспользовать или наследовать её в будущем.
class ConversionModel:
def fit(self, df):
...
def predict(self, new_data):
...
✏️ Что можно почитать?
1. 🔗 Ссылочка 1
2. 🔗 Ссылочка 2
3. 🔗 Ссылочка 3
Если интересен разбор с кейсами применения ООП, ставьте 🐳, пишите, использовали ли вы у себя?
@zasql_python
