Комментарии 19
Как насчет furrr
для обощения полученных знаний на область параллельных вычислений? Работает поверх future
и мимикрирует под синтакс purrr
. Можно спокойно использовать вместо purrr
во многих местах, так как дефолтное поведение — последовательное выполнение, слабо отличающееся от purrr
.
Из преимуществ — future
позволяет менять топологию бэкэнда, благодаря чему можно оптимизировать вложенные вызовы future_*
.
Вот reprex
:
library(purrr)
library(furrr)
plan(cluster, workers = 2)
1:10 %>% future_map_int(~Sys.getpid())
#> [1] 7112 7112 7112 7112 7112 6624 6624 6624 6624 6624
plan(sequential)
1:10 %>% future_map_int(~Sys.getpid())
#> [1] 7032 7032 7032 7032 7032 7032 7032 7032 7032 7032
За пример в комментарии спасибо.
Параллельные вычисления — вещь сама по себе весьма нетривиальная и ее надо прочувствовать в бою. Не все задачи можно распараллелить. Не для всех задач параллельное исполнение будет быстрее. Есть масса нюансов по порождению потоков\процессов, передачу туда параметров и получение обратной связи. В рамках первичного погружения параллелизация видится слишком сложной областью. С ней лучше разбираться чуть позже. Причем, зачастую, лучше найти параллелизированную на нижнем уровне реализации алгоритма, чем делать самому руками наверху. Итераторы и %dopar%
по этой же причине не хочется трогать при первом заплыве — скорее запутаешь, чем поможешь. Но это IMHO.
Я ни в коем случае не настиваю, просто предложил простое "расширение".
Я отказался от %dopar%
и foreach
в какой-то момент из-за произвольного unlist
-a и проблем с экспортом обновленных функций.
В любом случае, за компиляцию ресурсов спасибо, для самоучек типа меня это очень полезно, так как легко пропустить какие-то важные инструменты и библиотеки, которые принято использовать в коммъюнити.
- 50 часов на весь этот материал скорее всего хватит только на поверхностное чтение об азах и на выполнение стандартных написанных примеров. Тут работы-изучения минимум на месяц безвылазного чтения и написания кода.
- Я бы обучал основам написания функций как можно раньше, т.к. это очень важный навык для «написания качественного и эффективного кода»: понимать, что код хорошо бы разбивать на маленькие понятные функции.
- Нет ничего про тестирование написанного кода (testthat, covr, и т.д.). Это должно быть важно для «промышленной» разработки.
- Сюда можно добавить азы создания пакетов, как принятого способа организации и документирования кода.
- Очень полезная книга для такого рода «быстрого обучения написанию эффективного кода» — Efficient R programming
Полностью согласен, но… приходится делать выбор. Тут все подробно описано.
- Никто на практике не даст учиться несколько месяцев. В бой кидают как можно раньше. Поэтому приходится максимально ужимать материал.
- Функциям и функциональному подходу, а также безопасному выполнению функций внутри pipe выделяется почти целый день.
- Тестирование, пакеты и документирование — несомненно нужные вещи, но к этому можно приходить только после получения базовых навыков работы в R.
Основная задача — показать почти безграничные рамки, дать минимальный набор навыков и выпустить людей на реальные задачи. А дальше начинается путь развития.
Из электронных книг можно было бы еще посоветовать, если голова не опухнет,
- R packages
- Functional programming and unit testing for data munging with R by Bruno Rodrigues
- blogdown: Creating Websites with R Markdown by Yihui Xie, Amber Thomas, Alison Presmanes Hill
- bookdown: Authoring Books and Technical Documents with R Markdown by Yihui Xie
- R Markdown: The Definitive Guide by Yihui Xie, J. J. Allaire, Garrett Grolemund
- Text Mining with R. A Tidy Approach by Julia Silge and David Robinson
- Data Science Live Book by Pablo Casas
- Mastering Software Development in R by Roger D. Peng, Sean Kross, and Brooke Anderson
Спасибо за богатый материал, есть что почитать. Но на мой взгляд эти требования соответствуют должности "Разработчик R" или "BI аналитик". Мат.стат, машинное обучение и какое-нибудь численное моделирование нужное для DS отсутствуют, а их постижение — это вопрос нескольких лет. Или нескольких месяцев для верхнеуровнего знакомства.
Зависит от того, кого искать будете.
В требованиях к вакансии упомянут определенный бэкграунд "Уверенное владение следующими технологиями (минимум, 30% из списка):"
Народ с ВМК, например, должен знать многие вещи, если не прогуливал.
К вопросу о программировании и знании R.
Для примера, сможете ли комбинаторно решить на R за 3-4 строчки длиной <= 80 символов такую детскую олимпиадную задачу по математике (3-ий класс)?
"Можно ли расставить знаки действий вместо _,
чтобы значение выражения 76 _ 4 _ 51 _ 3 равнялось 36?"
b<-c("*","-", "/","+")
for (i in 1:4) for (j in 1:4) for (k in 1:4)
if (eval(parse(text=paste0(a[1], b[i], a[2] ,b[j], a[3], b[k], a[4] )))==36) print(c(b[i],b[j],b[k]))
Точно! И поговорить про NSE и принципы quotation.
c('*', '/', '+', '-') %>%
{expand.grid(op1 = ., op2 = ., op3 = ., stringsAsFactors = FALSE)} %>%
mutate(data = glue::glue("76 {op1} 4 {op2} 51 {op3} 3")) %>%
filter(purrr::map_dbl(rlang::parse_exprs(data), rlang::eval_bare) == 36)
Одна детская задачка дает фактуру для почти дневного разговора.
"
К вопросу о программировании и знании R.
"
Смогу :)
А вот коллеге, который знал про R "всё" пришлось довольно долго объяснять что такое Random Forest. А объяснить важность предположения о независимости сл.величины так и не смог, вроде. Порядок абстракций другой...
"The Art of Computer Programming" вроде пока никто не отменял и не обесценивал.
Еще раз отмечу, что изначально предполагается, что у коллеги есть какой-либо фундаментальный бэкграунд.
Есть масса прекрасных курсов по ML, тут ведь речь совершенно не про них. И на русском и на английском. Может Вашему коллеге просто надо на них обратить внимание?
Еще вот и хороший мультфильм про random forrest на 10 минут. В этой подборке вообще много короткометражных мультфильмов по математике.
«The Art of Computer Programming» вроде пока никто не отменял и не обесценивал.
Это, безусловно, важно. Говнокод никто читать не хочет, не говоря уже о производительности. Еще R Inferno можно здесь упомянуть…
Просто моя мысль в том, что B-тип дата сайентиста это программист, он тоже нужен. Но без говнокода типа A (анализ) многие проекты просто не полетят или полетят не туда.
потому что на практике надо и то и то
Каждая группа может выбирать для себя оптимальные правила и декларировать code convention. Кстати, нужно учитывать, что приходится не только писать код, но и читать чужой (в т.ч. SO & github), а значит надо знать разные диалекты, чтобы понимать написанное.
Data Science «спецназ» собственными силами