Классы в Python для аналитика (?)
Знаю, что многим аналитикам тема классов кажется ненужной — и это нормально.
Сам изучал ООП на своем направлении в магистратуре, очень много всего предстояло изучить... И про свойства, про то, как реализовать, жуть короче, хочется функциями пользовать и все (и то максимум)...
Но если присмотреться, мы сталкиваемся с ними каждый день, просто не задумываемся об этом.
Например, в 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. 🔗Ссылочка 23. 🔗Ссылочка 3 Если интересен разбор с кейсами применения ООП, ставьте 🐳****, пишите, использовали ли вы у себя?
@zasql_python```