TGViewer
Статистика и R в науке и аналитике Статистика и R в науке и аналитике @stats_for_science · 5.56K subscribers
Post #171 5.12K
R или Python в аналитике?

Наконец-то решила написать про эту холиварную тему 😏
Будет максимально объективно, так как работала с 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
Telegram Статистика и R в науке и аналитике in Чат канала "Статистика и R" А вот и обещанный код: library(dplyr) library(tidyr) df <- tibble( user_id = c(1, 1, 2, 3, 3, 4, 5, 6, 5, 7, 8, 9), ab_group = rep(c('A', 'B'), each = 6), revenue = c(50, 100, 200, 300, 150, 0, 150, 0, 100, 700, 200, 200) ) # создание датафрейма df…
  • 🔥 63
  • 👍 18
  • ❤ 16
  • 👏 5
  • 🤔 2
  • 😱 2
  • 🎉 2
More from @stats_for_science
  1. Sep 20, 2026Поведенческая секция: «Расскажите о случае, когда вы не согласились с продактом» Продолжае…
  2. Sep 12, 2026Узнали, согласны? Собрала немного обычных моментов из жизни биолога и A/B тестера, но все…
  3. Sep 1, 2026Коллеги-биостатистики опубликовали статью "Мифологизация статистики в биомедицинских иссле…
  4. Aug 30, 2026С днем рождения меня! 🎉 У меня из недавнего интересного - получила приз лучший сотрудник…
  5. Aug 28, 2026Последовательное тестирование: почему это не волшебная таблетка Сегодня обсудим матчасть м…
  6. Aug 23, 2026Когда мера становится целью: закон Гудхарта В прошлый раз разбирали как прокси-метрики мог…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →