Data Science «спецназ» собственными силами

habr.png

Практика показывает, что многие enterprise компании сталкиваются с трудностью в реализации аналитических проектов.

Все дело в том, что, в отличии от классических проектов по поставке железа или внедрению вендорских решений, укладывающихся в линейную модель исполнения, задачи, связанные с продвинутой аналитикой (data science) очень трудно формализуются в виде четкого и однозначного ТЗ в виде достаточным для передачи исполнителю. Ситуация отягощается тем, что для реализации задачи требуется интеграция массы различных внутренних ИТ систем и источников данных, часть вопросов и ответов может появиться только после того, как начинается работа с данными и вскрывается реальное положение дел, сильно отличающееся от документальной картины мира. Это все означает, что для написания грамотного ТЗ необходимо провести предварительную часть работы сопоставимую с половиной проекта, посвященную изучению и формализации реальных потребностей, анализу источников данных, их связей, структуры и пробелов. В рамках организаций сотрудников, которые способны провернуть такую масштабную работу, практически не бывает. Вот и получается, что на конкурсы выкладывают совсем сырые требования. В лучшем случае конкурсы отменяются (отправляются на доработку) после цикла уточняющих вопросов. В худшем случае — за громандный бюджет и длинные сроки получается нечто, совершенно не похожее на планы авторов требований. И остаются они у разбитого корыта.

Разумной альтернативой является создания внутри компании команды data science (DS). Если не замахиваться на строительство египетских пирамид, то команда и 2–3 грамотных специалистов может сделать весьма и весьма много. Но тут возникает другой вопрос, как подготовить этих спецов. Ниже хочу поделиться набором успешно апробированных соображений по быстрой подготовке такого «спецназа» с R в качестве оружия.

Является продолжением предыдущих публикаций.

В настоящий момент поиск на рынке грамотных адекватных специалистов является большой проблемой. Поэтому весьма полезно рассматривать стратегию обучения просто грамотных и адекватных. При этом наблюдается специфика требуемого обучения:


  • нет возможность обучаться месяцы, результат нужно получать максимально быстро;
  • необходимо ставить акцент на реальные задачи компании;
  • в промышленном DS много больше задач, связанных с обработкой данных, нежели с AI\ML;
  • промышленный DS не арт-хаус, а структурированная деятельность, воплощающаяся в виде стабильно работающего кода приложений.

При всей замечательности Coursera, Datacamp, различных книг, а также программ по ML, ни одна из совокупностей курсов не позволяла получить требуемый набор характеристик. Они служат прекрасными источниками для повышения мастерства, но для быстрого старта трудны. Основная задача на быстром старте — указать тропинки, болота, капканы; ознакомить со спектром существующих инструментов; показать как задачи компании могут решаться путем применения инструмента; бросить в озеро с лодки и заставить поплыть.

Важно показать, что R не только инструмент, но и соответствующее коммьюнити. Поэтому использование большого количества актуальных наработок, в т.ч. презентационного, является одним из форматов работы с сообществом. Хадли можно даже вопросы писать в твитер или гитхаб. На достойные вопросы можно получить исчерпывающие ответы.

В результате различных экспериментов получился структурный подход «Deep Dive Into 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.)


День 3

Формирование графических представлений средствами ggplot (https://ggplot2.tidyverse.org/reference/index.html). Использование графических средств для анализа бизнес-данных.


  • A Gentle Guide to the Grammar of Graphics with ggplot2


  • Доп. ссылки на примеры виджетов и графиков


  • Add-in esquisse


  • Создание анимации



День 4

Работа со строковыми и перечислимыми типами. Основы регулярных выражений. Работа с датами. (Пакеты stringi, stringr, forcats, re2r, lubridate, anytime)


День 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:
  • 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. Создание функций. Область видимости переменных. Просмотр объектов. Просмотр объектов, их структуры. Принципы работы «по ссылкам».


  • Понятие функции. Создание собственных функций.
  • Концепция окружения. Advanced R. 7 Environments
  • for loop, while loop
  • purrr tutorial
  • 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


Книги


  1. Предлагаемая последовательность подачи материала не является догмой. Могут быть различные отступления и включения доп. материалов, включая математические вставки. Все определяется реальными актуальными вопросами и задачами, которые будут определены для курсовых и списком востребованных производственных вопросов. Наиболее популярными оказываются алгоритмы регрессии, кластеризации, text mining, работа с временными рядами.
  2. Вопросы параллельных вычислений, создания shiny приложений, использования ML алгоритмов и внешних платформ не умещаются в концепцию «быстрого погружения», но могут являться продолжением после начала практической работы.

Предыдущая публикация — «Насколько R быстр для продуктива?».

© Habrahabr.ru