Если спросить у эндоваскулярного хирурга с 10-летним стажем про стентирование артерий сердца при инфаркте миокарда - он может сказать , “Уверен, что у этого пациента артерия закроется после нашей операции”. Раньше я воспринимал это как данность. В институте мне нравилось это называть интуицией врача, или предчувствие исхода. В аспирантуре захотелось обличить все эти метафизические предсказания в закономерную структуру, поддающуюся логическому объяснению. Опытный хирург обучил свою нейросеть в головном мозге таким образом, что она оценивает несколько параметров пациента и предсказывает вероятность возникновения окклюзии артерии. Сейчас покажу как я сделал то же самое без большого стажа, и программы для расчета статистики.
R *
Язык для статистической обработки данных
Запросить 100 серверов нельзя оптимизировать код. Ставим запятую
Можно выделить ряд алгоритмов, которые являются базовыми и лежат в основе практически каждой строчки программ, написанных на языках высокого уровня. Хорошо иметь под руками классический многотомный труд Дональда Кнута "The Art of Computer Programming", там детально разобраны многие базовые алгоритмы. Но прочесть и усвоить все — задача, требующая много усилий и времени, которая должна как-то быть мотивирована.
Многие могут предположить, что нюансы необходимо было знать 50 лет назад, а сейчас можно пользоваться готовыми пакетами и функциями и не погружаться в детали. Однако, это далеко не так. Равно как никто не отменял важность понимания представления методов хранения данных в памяти и их обработки в процессоре.
Далее разберем нюансы на примере функций сортировки. Сортировка и поиск используются максимально часто во всех манипуляциях с данными. Экономия нескольких миллисекунд на операции может приводить к суммарному сокращению часов расчета на значительных данных.
Является продолжением серии предыдущих публикаций.
extendr: вызываем rust из R (и наоборот)
R
, как и большинство подобных ему высокоуровневых скриптовых языков, часто полагается на код, написанный на более низкоуровневом языке. Библиотеки R
- пакеты (packages) - нередко содержат код, написанный на C
, C++
или FORTRAN
. Нативный код позволяет обойти различные ограничения (например, однопоточность) и ускорить выполнение сложных алгоритмов за счет оптимизаций, попросту недоступных из самого R
. Вся эта вычислительная мощь, тем не менее, получает удобный и совместимый с другими инструментами интерфейс на стороне R
.
Разработка пакетов с C
/ C++
кодом давно налажена благодаря сторонним библиотекам, включая {usethis}
, {devtools}
, {pkgbuild}
, {cpp11}
и т.д. Но что насчет других низкоуровневых языков? Ведь R
всего-навсего динамически подгружает и вызывает библиотеки, поэтому если соблюсти все необходимые условия, можно, например, создать пакет с кодом, написанном на Rust
. Несмотря на то, что на практике это действительно работает, разработка, поддержка и внедрение таких инструментов - довольно трудоемкий процесс. Точнее был трудоемким до этого момента.
Enter extendr
, проект, который позволяет соединить R
и Rust
и с легкостью интегрировать Rust
код в пакеты R
, одновременно предоставляя возможность хостить R
сессию в Rust
. extendr
находится в разработке довольно давно (больше полугода активной фазы) и представляет собой MVP (minimum viable product), но до сих пор был обделен вниманием. Rust
-крейт уже какое-то время доступен на crates.io
, а R
-пакет ожидает проверки на CRAN
.
extendr
- отличный способ наладить взаимодействие между разработчиками, пишущими на Rust
и R
. Если вы знаете один из языков и хотели бы познакомиться со вторым, или же хотите портировать свои R
-пакеты с проблематичных C
/ C++
на модный Rust
, добро пожаловать под cut.
Модификация EM-алгоритма для решения задачи кластеризации с выбросами
Основной из проблем кластерного анализа практических данных является наличие выбросов. Большинство существующих методов кластеризации не учитывают их существование, из-за этого явно аномальные наблюдения включаются в состав каких-то кластеров, что может серьезно смещать их центры и влиять на качество классификации. Разумеется, можно сначала исходные данные проверить на выбросы, их отсеять и т.д., но тогда задача превратиться в двухэтапную, а хотелось бы, чтобы было "все и сразу".
Один из подходов к решению данной задачи (чтобы метод кластеризации автоматически отсеивал выбросы) получил название "optimally tuned robust improper maximum likelihood estimator" и был описан вот в этой статье 2017 года (http://dx.doi.org/10.1080/01621459.2015.1100996), а недавно и получил реализацию на R. Поговорим о нем.
Истории
Оценка структуры кредитного портфеля с помощью R
В ходе обсуждений возникла «маленькая» задачка — построить динамику структуры кредитного портфеля (динамика кредитной карты, например). Есть важная специфика — необходимо применять метод FIFO для погашения займов. Т.е. при погашении первыми должны гаситься самые ранние займы. Это накладывает определенные требования на расчет статуса каждого отдельного займа и определения его даты погашения. Задачу решаем честно.
Рассматриваем как олимпиадную задачу. Никаких «кровавых энерпрайзов с корпоративными архитекторами» и педалинга кода, подход исключительно «сначала подумать». Не более одного экрана кода на прототип и никаких циклов (закладные для производительности и читаемости). Ниже приведен код на R с прототипом подхода.
Является продолжением серии предыдущих публикаций.
Как создать Trello — dashboard, чтобы задачи из 5 досок собирались в одной?
В своей работе я столкнулся с необходимостью организации задач сотрудников департамента аналитики в едином окне и построения прозрачной схемы оценки их загруженности.
Какие есть варианты?
Сравнивая различные инструменты и таскменеджеры, выбор пал на одного из популярных игроков рынка - Trello. Однако, сразу после выбора программы, возникло новое препятствие. В бесплатной версии этого приложения отсутствовала возможность синхронизации досок нескольких сотрудников воедино без сторонних сервисов, типа Zapier, где для большого проекта тоже нужна лицензия.
Кластеризация смешанных (числовых и категориальных) данных в R
Основная проблема всех классических алгоритмов анализа данных – это их малая применимость к практическим задачам. Относится это и к задачам кластеризации.
В реальных (да и в научных задачах) возникает необходимость в кластеризации данных смешанного типа – например, когда половина переменных числовые, а половина переменных – категориальные.
По отдельности данные задачи решаются стандартными способами (вот, например, статья про иерархическую кластеризацию чисто категориальных данных - https://habr.com/ru/company/otus/blog/461741/), однако решение задачи кластеризации смешанных данных представляет некоторые трудности, связанные в основном со сложностью расчета величины расстояния между наблюдениями.
Минутка теории
Существующие методы предполагают расчет расстояния при Гауэра использовании функции daisy (daisy(method = "gower")) в пакете cluster.
Однако, как утверждают создатели пакета clustMixType, этот способ неприменим при обработки больших объемов данных, и в их пакете реализован иной метод
Теоретические основы реализованного метода кластеризации были разработаны еще в 1999 году в работе Z. Huang. Extensions to the k-means algorithm for clustering large data sets with categorical variables. Data Mining and Knowledge Discovery, 2:283–304, 1998. doi: 10.1023/A:1009769707641. Он получил название метода k-prototypes и основан на следующей формуле расстояния:
Проверка гипотезы равенства средних при неравной дисперсии в R
Задача определения равенства средних при условии равных дисперсий - классическая задача математической статистики, которую решают в техникумах и ВУЗах. Однако МС как наука очень похожа на болото - при попытке спрыгнуть в сторону с кочки классически решаемой задачи можно увязнуть или вовсе утонуть
Рассматриваемая задача - одна из таких. На самом деле, заботливыми математиками уже разработано порядка двух десятков разных статистических тестов для решения такого рода задач, что ставит вопрос из разряда "какой из них применять"
Для решения этой задачи была разработана процедура, позволяющая для каждого конкретного случая определить лучший статистический тест.
Storytelling R отчет против BI, прагматичный подход
Проблематика
Когда говорят про отчеты к данным (неважно, какая тема) все хотят гибкие дашборды, МНОГО дашбордов, играют конкурсы про BI, выдумывают разные сложные требования и кейсы, отсматривают массу вендоров и решений, разбиваются на непримиримые лагеря и на 100% уверены, что это то, без чего жизнь на работе тяжела, уныла и печальна.
Так ли это? По описанию очень сомнительно (похоже на серебряную пулю), а практика дает подтверждение «отнюдь не так».
Является продолжением серии предыдущих публикаций.
Звездные войны или подробный гайд по dplyr
Сегодня, 4 мая, в день Звездных войн мы подготовили для Вас подробный гайд по основным функциям библиотеки dplyr
. Почему именно в день Звездных войн? А потому что разбирать мы все будем на примере датасета starwars
.
Ну что, начнем!
R в руках маркетолога. Когортный анализ своими руками
В маркетинге очень популярен когортный анализ. Его популярность вызвана, скорее всего, легкостью алгоритма и вычислений. Никаких серьезных математических концепций в основе нет, элементарная математика, выполняемая в excel. С точки зрения получения инсайтов гораздо интереснее анализ дожития.
Тем не менее, считаем, что есть такая задача и ее надо решить. Искать какие-либо пакеты и готовые функции неинтересно — математика проста, параметров настройки масса. Ниже возможный пример реализации (без особой фиксации на скорость исполнения), всего кода на пару десятков строк.
Является продолжением серии предыдущих публикаций.
R и работа со временем. Что за кулисами?
Даты и время являются весьма непростыми объектами:
- месяцы содержат различное число дней;
- года бывают високосными и нет;
- существуют различные временнЫе зоны;
- часы, минуты, дни используют различные системы счисления;
- и многие другие нюансы.
Далее тезисно приведены отдельные моменты, которые редко высвечиваются в документации, а также трюки, которые позволяют писать быстрый и контролируемый код.
Совсем краткое резюме для смартфоночиталей: на больших объемах данных используем только POSIXct
с дробными долями секунд. Будет хорошо, понятно, быстро.
Является продолжением серии предыдущих публикаций.
Глаголы R vs Операторы SQL
Какой язык использовать для анализа данных - это максимально избитая и больная тема. Поэтому мы объединились с Алексеем Селезневым, руководителем отдела аналитики в Netpeak и автором телеграм-канала R4Marketing, и подготовили сравнение операторов SQL и глаголов языка R. Для удобства и переносимости сделали это в карточках.
Ближайшие события
R vs Python в продуктивном контуре
Элегантные трюки в notebook на персональном компьютере (ноутбуке) — это хорошо и интересно. Но как только речь заходит об исполнении кода в продуктивном контуре, тут же появляются масса ограничений в виде:
- объема доступного железа;
- требований по производительности;
- стабильности;
- соблюдения требований ИБ;
- … (добавьте специи по вкусу).
Нынче в России такая фаза, что для задач data science язык python позиционируется как "серебряная пуля". Похоже, что такой тезис выдвинули те, кто продают курсы по DS на python. А дальше маховик пошел. В целом, это вполне нормально — почти все процессы в физическом мире являются колебательными.
Но, все-таки, в этом хайпе немного недоговаривают. Есть в python ряд досадных моментов, даже в базовых DS задачах, которые сильно усложняют его использование в продуктивном контуре.
Является продолжением серии предыдущих публикаций.
R, Монте-Карло и enterprise задачи, часть 2
Как ни парадоксально, но пока еще нередко в enterprise встречаются задачи, отличные от построения еще одного личного кабинета, еще одного мониторинга или еще одного документооборота. Если немного подумать, а не хвататься сразу кодировать или искать специализированное ПО, то можно написать компактное, весьма элегантное и быстрое решение, используя метод Монте-Карло .
Задачи в Enterprise достаточны компактны для перебора и не требует точности 100 знаков после запятой. Не ракеты или реакторы запускаем и не научную теорию всего строим.
Рассмотрим далее на примере одной из нестандартных задач.
Является продолжением серии предыдущих публикаций.
Дети, русский язык и R
Типичная ситуация в нынешнем образовательном процессе в школе. На часах 22:00, в электронном дневнике ребенка появляется новое задание. В лучшем случае на послезавтра, но обычно на завтра.
Вариантов реакции три:
- не делать вовсе;
- «не заметить» и отложить решение вопроса на потом;
- попробовать сделать.
Вторая реакция по сути идентична первой, поскольку снежный ком таких заданий будет стремительно накапливаться без каких-либо шансов его разобрать.
Выбирая третий вариант, в отдельных случах даже задания по русскому языку можно попробовать решить с помощью R, принимая во внимание, что на все про все есть 15-20 минут максимум. 5 минут на «экстремальное программирование», 10-15 минут на чистовое оформление. Когда принципиально задача решена оформление можно уже и утром сделать
Является продолжением серии предыдущих публикаций.
Julia+R: преимущества интеграции
R – стабильный, удобный, имеет прекрасную экосистему. Один из признанных лидеров в области анализа и визуализации данных и, наверное, лучший инструмент для статистических исследований. Julia тоже удобна, весьма стройна и при этом ещё и быстра. Она ещё очень молода, не имеет такого количества пакетов и пользователей, но скорость работы впечатляет. Особенно по сравнению с R. Оба языка активно используются для анализа данных и машинного обучения. Что же выбрать?
IT Service Health Monitoring средствами R. Взгляд под иным углом
Казалось бы тема давно исхоженная, пик инновационности OSS систем давно позади. Однако иногда бывают локальные жаркие всплески и бурные споры на эту тему. Можно ходить по торной вендорской дороге, а можно попробовать погрызть эту задачку с другого угла.
Ключевые слова: cmdb, multi-agent sumulation, monte-carlo, ml.
Является продолжением серии предыдущих публикаций.
Как отлаживать код в RStudio и создавать новый проект на R
Продуктовая аналитика на практике при помощи R
Современная мета управления продуктом подразумевает управление на основании данных.
Все хотят аналитического подхода и способности принимать решения на куче данных о продукте которые есть. Но в реальности есть недостаток информации о том, как именно это делать. Какие инструменты использовать, как принимать решения и как исследовать данные. Я бы хотел поделится именно практическим аспектом этого вопроса в формате одного кейса.
Вклад авторов
i_shutov 774.0ffriend 265.0jzha 240.0kxx 239.0selesnow 209.2ikashnitsky 207.0m-pilipenko 194.0temujin 191.0qc-enior 182.4ogurtsov 166.0