Практика показывает, что многие enterprise компании сталкиваются с трудностью в реализации аналитических проектов.
Все дело в том, что, в отличии от классических проектов по поставке железа или внедрению вендорских решений, укладывающихся в линейную модель исполнения, задачи, связанные с продвинутой аналитикой (data science) очень трудно формализуются в виде четкого и однозначного ТЗ в виде достаточным для передачи исполнителю. Ситуация отягощается тем, что для реализации задачи требуется интеграция массы различных внутренних ИТ систем и источников данных, часть вопросов и ответов может появиться только после того, как начинается работа с данными и вскрывается реальное положение дел, сильно отличающееся от документальной картины мира. Это все означает, что для написания грамотного ТЗ необходимо провести предварительную часть работы сопоставимую с половиной проекта, посвященную изучению и формализации реальных потребностей, анализу источников данных, их связей, структуры и пробелов. В рамках организаций сотрудников, которые способны провернуть такую масштабную работу, практически не бывает. Вот и получается, что на конкурсы выкладывают совсем сырые требования. В лучшем случае конкурсы отменяются (отправляются на доработку) после цикла уточняющих вопросов. В худшем случае — за громадный бюджет и длинные сроки получается нечто, совершенно не похожее на планы авторов требований. И остаются они у разбитого корыта.
Разумной альтернативой является создания внутри компании команды data science (DS). Если не замахиваться на строительство египетских пирамид, то команда и 2-3 грамотных специалистов может сделать весьма и весьма много. Но тут возникает другой вопрос, как подготовить этих спецов. Ниже хочу поделиться набором успешно апробированных соображений по быстрой подготовке такого «спецназа» с R в качестве оружия.
Является продолжением предыдущих публикаций.
Проблематика
В настоящий момент поиск на рынке грамотных адекватных специалистов является большой проблемой. Поэтому весьма полезно рассматривать стратегию обучения просто грамотных и адекватных. При этом наблюдается специфика требуемого обучения:
- нет возможность обучаться месяцы, результат нужно получать максимально быстро;
- необходимо ставить акцент на реальные задачи компании;
- в промышленном DS много больше задач, связанных с обработкой данных, нежели с AI\ML;
- промышленный DS не арт-хаус, а структурированная деятельность, воплощающаяся в виде стабильно работающего кода приложений.
При всей замечательности Coursera, Datacamp, различных книг, а также программ по ML, ни одна из совокупностей курсов не позволяла получить требуемый набор характеристик. Они служат прекрасными источниками для повышения мастерства, но для быстрого старта трудны. Основная задача на быстром старте — указать тропинки, болота, капканы; ознакомить со спектром существующих инструментов; показать как задачи компании могут решаться путем применения инструмента; бросить в озеро с лодки и заставить поплыть.
Важно показать, что R не только инструмент, но и соответствующее коммьюнити. Поэтому использование большого количества актуальных наработок, в т.ч. презентационного, является одним из форматов работы с сообществом. Хадли можно даже вопросы писать в твитер или гитхаб. На достойные вопросы можно получить исчерпывающие ответы.
В результате различных экспериментов получился структурный подход «Deep Dive Into R» к подаче базового материала.
Погружение в R
- Оптимальная продолжительность курса — 50 часов (~ 7-9 дней по 7-6 часов).
- Ключевая цель курса — формирование практических навыков по быстрому написанию качественного и эффективного кода с применением оптимальных алгоритмов.
- Комплексные демонстрационные примеры лучше всего создавать на конкретных задачах — так можно ознакомиться с инструментами и подходами гораздо быстрее.
- Большое количество рассматриваемых вопросов служит для формирования представления и «закладок» о возможностях экосистемы.
- Подневная разбивка не догма, а плановое управление фокусом.
- В рамках каждого дня для демонстрации и закрепления материала разбираются практические задачи разной степени сложности и объемности.
Каждый учащийся перед началом получает от своего руководства практическое задание («курсовая работа») в виде реальной задачи, которую он должен будет исполнить в ходе погружения и защитить по завершению курса.
День 1
Кратко об R. Синтаксис и структура языка. Основы применения IDE RStudio для анализа и разработки. Базовые типы и данных. Интерактивные вычисления и исполнение программного кода. Краткое знакомство c R Markdown и R notebook. Принципы работы с библиотеками. Подготовка к аналитической работе, установка необходимых библиотек, создание проекта. Принципы профилировки вычислений, поиск узких (крайне длительных) мест и их устранение.
- History and Ecology of R
- RStudio Cheatsheets
- Getting-started-with-R-Markdown
- Критерии качества обучения/работы: быстро пишем быстрый и компактный код с применением оптимальных алгоритмов
- Векторизация
- Оценка скорости исполнения кода:
system.time
,tictoc
,benchmark
,bench
,profvis
- Оценка производительности системы:
benchmarkme
- Экосистема R, основы языка
- Значения
NA
,NULL
,NaN
. - Операторы
=
,==
,<-
- Функции
is.na()
,is.null()
,is.nan()
, (is.finite()
,is.infinite()
) - Subsetting & slicing
День 2
Концепция и экосистема пакетов ‘tidyverse’ (https://www.tidyverse.org/). Краткий обзор входящих в него пакетов (импорт/обработка/визуализация/экспорт). Концепция tidy data
как основа методов работы в tidyverse
. ‘tibble’ как формат представления данных. (Пакеты из экосистемы tidyverse). Преобразования и манипуляции с данными. Синтаксис и принципы потоковой обработки (pipe). Группировка - вычисление - сборка
. (Пакеты tibble
, dplyr
, tidyr
.)
- Tidyverse site
- Tibbles. There are three key differences between tibbles and data frames: printing, subsetting, and recycling rules.
- Pipe
- STAT 545. Cheatsheet for dplyr join functions by Jenny Bryan
День 3
Формирование графических представлений средствами ggplot (https://ggplot2.tidyverse.org/reference/index.html). Использование графических средств для анализа бизнес-данных.
A Gentle Guide to the Grammar of Graphics with ggplot2
Доп. ссылки на примеры виджетов и графиков
- https://ggplot2.tidyverse.org/index.html
- http://www.ggplot2-exts.org/gallery/
- http://gallery.htmlwidgets.org
- https://www.r-graph-gallery.com
Add-in
esquisse
Создание анимации
День 4
Работа со строковыми и перечислимыми типами. Основы регулярных выражений. Работа с датами. (Пакеты stringi
, stringr
, forcats
, re2r
, lubridate
, anytime
)
Работа со строками:
- Handling Strings with R by Gaston Sanchez
- Handling and Processing Strings in R.
Регулярные выражения. Онлайн инструменты
- Краткое введение в регулярные выражения
- R Regex Tester Shiny App
- regex101
- RegExr
Working with strings: the stringr package
Working with strings: regular expressions
Дата и время:
- Сущности: период, длительность, интервал.
- Табличка с основными функциями Dealing with Dates
- Краткая сводка Analytics for industRy: Dates and times
День 5
Расширенный импорт данных. txt, csv, json, odbc, web scrapping (REST API), xlsx.
(Пакеты readr
, opexlsx
, jsonlite
, curl
, rvest
, httr
, readtext
, DBI
, data.table
)
- Рабочая директория.
getwd()
,setwd()
. Применение пакетаhere
- Add-in
rspivot
. rspivot is a Shiny gadget for RStudio for viewing data frames. - Пакет и add-in
datapasta
. - Introduction to readr. Пробежаться по особенностям специфицирования колонок.
- работа с Excel:
- [
readxl
] - [
openxlsx
] tidyxl
- [
- Web-scrapping на демо-примере:
День 6
Экспорт данных. rds, csv, json, xlsx, docx, pptx, odbc. Основы R Markdown и R Notebook.
(Пакеты opexlsx
, officer
, DBI
, jsonlite
, readr
, data.table
, knitr
)
В т.ч.
- Создание презентаций средствами R
officer
. - Экспорт в PDF через knit -> LaTeX
- Прямой экспорт в Word
День 7
Основы программирования в R. Создание функций. Область видимости переменных. Просмотр объектов. Просмотр объектов, их структуры. Принципы работы «по ссылкам».
- Понятие функции. Создание собственных функций.
- R functions, R for Data Science. 19 Functions
- Концепция окружения. Advanced R. 7 Environments
- for loop, while loop
- purrr tutorial
- концеппция "безопасных" вычислений, применение их в пакетном анализе (
safely
) - Profvis — Profiling tools for faster R code
- Подход lazy_evaluation, non-standard evaluation, пакет
lobstr
День 8
Подходы к валидации промежуточных и финальных результатов. Принципы совместной работы и формирования воспроизводимых вычислений. Демонстрация shiny приложений, как целевого интерфейса для конечных потребителей. (Пакеты checkmate
, reprex
, futile.logger
, shiny
)
- Defensive programming. Валидация параметров. Пакет
checkmate
, скорость — наше все. - Валидация входных данных:
- Логирование средствами
futile.logger
. - 2018-09_reprex-rstudio-webinar
День 9
Методы и подходы в работе с данными «среднего» размера. Пакет data.table
. Основные функции. Сравнительный экспериментальный анализ.
Обзор дополнительных вопросов, появившихся за 1-8 день.
День 10
Защита курсовой
Требования к рабочим местам участников на базе Windows 10
- установлен R 3.5.2 (https://www.r-project.org/)
- установлен C++ компилятор, входящий в R доп. инструментарий Rtools35 (https://cran.r-project.org/bin/windows/Rtools/)
- установлена IDE RStudio Desktop Open Source License (https://www.rstudio.com/products/rstudio/download/)
- установлен последний билд Java SE RE 1.8
- открыт доступ к сайтам, содержащим репозитории R пакетов:
Книги
- R for Data Science by Garrett Grolemund, Hadley Wickham
- R for Data Science: Exercise Solutions by Jeffrey B. Arnold
- Hands-On Programming with R by Garrett Grolemund
- Advanced R by Hadley Wickham
- Handling Strings with R by Gaston Sanchez
- RStudio Cheatsheets
Заключение
- Предлагаемая последовательность подачи материала не является догмой. Могут быть различные отступления и включения доп. материалов, включая математические вставки. Все определяется реальными актуальными вопросами и задачами, которые будут определены для курсовых и списком востребованных производственных вопросов. Наиболее популярными оказываются алгоритмы регрессии, кластеризации, text mining, работа с временными рядами.
- Вопросы параллельных вычислений, создания shiny приложений, использования ML алгоритмов и внешних платформ не умещаются в концепцию «быстрого погружения», но могут являться продолжением после начала практической работы.
P.S. Обычно у HR возникают сложности с формулировкой требований к вакансии.
Вот возможный пример для затравки. Каждый дополняет и правит исходя из своих ожиданий.
Data Science (DS): большие данные и аналитика. Требования к вакансии
- Образование:
- Техническое или естественно научное высшее.
- Приветствуется наличие сертификатов по предметным курсам (Coursera, DataCamp).
- Английский язык в активе (свободное чтение технической литературы, уверенное понимание устной неадаптированной речи, разговорный язык на уровне технического общения).
- Опыт работы:
- В области DS – не менее 1 года.
- Опыт командной разработки ПО по гибким (agile) методологиям – не менее 2 лет.
- Наличие опыта разработки пользовательских интерфейсов (WEB + JS).
- Наличие опыта разработки документации.
- Уверенное владение следующими технологиями (минимум, 30% из списка):
- SQL + No-SQL backend (хотя бы по одной из БД каждого типа).
- Open-source языки программирования для задач DS (Python, R, либо оба).
- Платформы для хранения и обработки больших данных (Hadoop и его производные, Spark\Ignite, ClickHouse, Vertica, ELK стек … )
- Основы HTML+JS+CSS в разрезе разработки web-GUI для конечных пользователей.
- Уверенное владение основами математической статистики и линейной алгебры.
- Временные ряды (включая прогнозирование и поиск аномалий).
- Машинное обучение, нейронные сети.
- Text mining и регулярные выражения.
- Основы администрирования windows+nix систем.
- Инструменты и алгоритмы для обработки и визуализации геоинформации (ESRI, OpenStreet, Yandex Maps, Google Maps, leaflet, ..), работа с shapе и GPX файлами.
- Импорт данных в data science инструменты и их нормализация (файлы, ODBC, REST API, Web — crawling).
- Визуализация (Tableau, QlikView, Excel, Shiny\Dash).
- Коммерческие математические пакеты (Wolfram Mathematica, Maple, Matlab).
- Должностные обязанности:
- Обследование и подготовка исходных данных.
- Выработка гипотез и их проверка на исходных данных.
- Разработка математических моделей и их апробация.
- Разработка программных проектных решений.
- Разработка WEB-приложений и интерактивных дашбордов.
- Разработка hard-copy отчетов.
- Настройка, тестирование, развитие и сопровождение аналитического контура.
- Актуализация проектной документации.
Предыдущая публикация — «Насколько R быстр для продуктива?».