Наконец-то решила написать про эту холиварную тему 😏
Будет максимально объективно, так как работала с R не только в науке, но и в продакшне в 🖤.
Плюсы 🖥:
🟡Статистика из коробки – большинство статистических тестов, в том числе сложных, доступно без установки дополнительных пакетов.
🟡Очень удобный и юзер-френдли синтаксис в
tidyverse, а в data.table – высокая скорость и оптимизация по памяти.🟡Лучшая визуализация:
ggplot2 за счет подхода грамматики графики позволяет делать сколь угодно сложные и кастомные графики.🟡Векторизация позволяет писать без циклов, повышая читаемость и снижая количество ошибок.
🟡С помощью пайпов и NSE (not standard evaluation) работа с табличками становится очень удобной и читаемой (ниже закинула пример кода для сравнения).
Плюсы 👩💻:
🟡Большинство аналитиков, по крайней мере в РФ, пишут на питоне.
🟡Девопсы обычно умеют разворачивать питон приложения.
🟡Экосистема для машинного обучения сильнее:
scikit-learn, pytorch, keras.🟡airflow для оркестрации изначально рассчитано под питон, писать даги в airflow на R теоретически можно, но это будет странно.
Минусы 🖥:
🟡Чтобы получить плюсы от производительности, нужно писать в
data.table стиле, которому мало где учат. На онлайн-курсах аналитиков данных в принципе не изучают R, большинство R-щиков из академической среды.🟡Разворачивать приложения и оркестрацию для продакшна можно, но нужно уметь это готовить. Например, у нас в 🖤 весь бизнес-мониторинг работал на связке ClickHouse + R +
data.table, оркестрация ETL-пайплайнов через AWX Ansible. Но я больше нигде не видела подобную инфру, поэтому предполагаю, что с нуля настроить инфраструктуру проще на связке питон + airflow. Пользуясь случаем, передаю приветы команде BMS в X5 Tech ❤️🟡Если уходить в машинное обучение, то в R все же слабее пакеты.
🟡Визуализация это круто, но дашборды все равно делают отдельными инструментами: Tableau, Superset, DataLens и так далее.
Минусы 👩💻
🟡В
pandas низкая производительность и неудобный синтаксис по сравнению с tidyverse/data.table.🟡 Визуализация менее лаконична:
matplotlib даже для простых графиков требует простыню кода, а seaborn менее кастомизируем. Но здесь для фанатов R можно использовать plotnine, портированный ggplot2 (но он все равно будет с урезанным функционалом).✍️ Сравнение кода на R и Python
Типичная задача продуктового аналитика: рассчитать ARPPU по двум группам A/B теста (в комментарии закину воспроизводимый пример, а еще пример расчета t-теста на обоих языках).
df_arppu <- df %>%
summarise(user_total = sum(revenue), .by = c(ab_group, user_id)) %>% # суммируем платежи пользователя
summarise(
paying_users = sum(user_total > 0),
total_revenue = sum(user_total),
ARPPU = ifelse(paying_users > 0, total_revenue / paying_users, NA_real_),
.by = ab_group
)
df_arppu = (
df
.groupby(['ab_group', 'user_id'], as_index=False)
.agg(user_total=('revenue', 'sum')) # суммируем платежи пользователя
.groupby('ab_group', as_index=False)
.agg(
paying_users=('user_total', lambda x: (x > 0).sum()),
total_revenue=('user_total', 'sum')
)
.assign(
ARPPU=lambda d: np.where(d['paying_users'] > 0,
d['total_revenue'] / d['paying_users'],
np.nan)
)
)
Ну как, какой вариант кажется более понятным и лаконичным? Пишите в комментариях 👇
Сейчас я в основном пишу на питоне, это удобнее в командной работе, коллеги могут переиспользовать и ревьюить ноутбуки, а еще ETL-процессы в airflow.
Но использую R для некоторых задач A/B тестирования или продуктовых исследований.
В продуктовой аналитике нет особого преимущества одного языка над другим, так как ML обычно не используется, а тяжелые логи можно агрегировать на стороне SQL, поэтому в лимит по памяти пандаса тоже не упираюсь. Мне конечно самой было бы приятнее писать на R, но что поделать, рыночек порешал 😬
В принципе, писать можно на чем угодно, главное, выполнять задачи вовремя и качественно)
#analytics #R #python