Книги по Data Science

Ресурс для #горячихюныхкогнитивных, намеревающихся серьезно заняться самообразованием в области data science -- список хороших бесплатно распространяемых книг для разного уровня подготовки.

Список составлен и обновляется Уильямом Ченом -- исследователем из команды Quora. Бесплатный или условно-бесплатный (donation с минимумом в 0) доступ к книгам открывается по клику на обложку со страницы блога Уильяма: www.wzchen.com/data-science-books

Первый русскоязычный онлайн-курс по R

День хороших новостей! Горячие-юные-когнитивные Иван Иванчей и Анатолий Карпов записали первый русскоязычный онлайн-курс по R. Курс рассчитан на начинающих, представляющих себе основы статистики, и желающих научиться использовать R для анализа.

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

Теперь у вас просто не будет оправданий, чтобы не использовать R!

Анализ данных в R from Stepic on Vimeo.

Инструментарий аналитика: R

Ниже перечислены пакеты, с которыми я сталкиваюсь в своей работе с той или иной частотой, поэтому набор может выглядеть несколько однобоким. Общие описания пакетов по направлениям и формам работы можно найти в официальном репозитории: cran.r-project.org/web/packages/. Так же есть симпатичная reference card от Yanchang Zhao: cran.r-project.org/doc/contrib/YanchangZhao-refcard-data-mining.pdf. Следует помнить, что немалая часть функций доступна в базовом пакете.

Манипуляции с данными

data.table — ключевой пакет для тех, кто работает с большими датасетами (сотни тысяч, миллионы строк), так как оптимизирован для максимально быстрой работы (сортировки, расщепления, слияния и проч). Операции с таблицами типа data. table совершаются в десятки или даже сотни раз быстрее, чем с простыми таблицами типа data.frame. К сожалению, синтаксис пакета ощутимо отличается от привычного синтаксиса R, и вызывает ощущение некоторой неотмирности и увлеченностью психотропными веществами авторов пакета.

reshape2 — пакет для перевода данных из формата wide в формат long и обратно, быстрый аналог базовой функции reshape.

Визуализация

ggplot2 — графики черные, графики белые, графики испанские… графики плотности, графики круговые, гистограммы — в общем, все, что душа пожелает. Даже есть возможность работать с географическими картами (spatial visualisation). Если что-то не нашлось — скорее всего, это и не нужно. Настраивается все, от цвета и формы графика, до цвета и размера шрифтов легенд. Впрочем, по специфичности и изощренности синтаксиса не уступает data.table. Есть еще другие пакеты для визуализации, например, lattice — но я с ним не работал, мне вполне достаточно и ggplot2.

Психометрика

sem — моделирование структурными уравнениями, конфирматорный факторный анализ во всей красе. Естественно, может применяться не только для психометрических исследований, но я для меня это первоочередное применение.

ltm — IRT-модели Раша и Бирнбаума (кроме 4PL) для дихотомических ответов, сложные политомические модели. Есть демо-примеры.

Линейные модели

lme4 — линейные модели со случайными эффектами. К сожалению, простую линейную модель с фиксированными эффектами построить нельзя, для этого лучше использовать nle. Для получения p-values, если они зачем-то потребуются, к пакету lme4 следует добавить пакет lmerTest.

Кластерный анализ

cluster — аггломеративный и дивизивный кластерные анализы, k-средних и k-медиан, кластерный анализ по подвыборкам для больших датасетов.

Работа с распределениями

gamlss — пакет для аппроксимации теоретической функции эмпирического распределения, оценки параметров эмпирического распределения, генерации данных с определенными параметрами и формой распределения (для симуляционных Монте-Карло-экспериментов).

Анализ нормальности распределения

nortest — базовые критерии для проверки гипотезы об отличии распределения от нормального.

moments — моменты (асимметрия и эксцесс).

Оценка мощности

pwr — простейший пакет для оценки размера выборки при определенных значениях ошибки измерения I/II типа и предполагаемом размере эффекта. Фактически, по трем данным параметрам можно вычислить четвертый.

Интерфейсы доступа к SQL-базам данных

RODBC — простой коннектор к MS SQL базам.

RPostgreSQL — такой же простой коннектор к PostgreSQL базам, единственное, надо научиться использовать ‘' и «» одновременно при написании запроса к базе (т.к. в PostgreSQL таблицы задаются через имена схем и таблиц в виде schema."Table", и эти двойные кавычки вызывают проблемы в синтаксисе команды в R).

Доступ к другим сервисам

RCurl, ROAuth — пакетs, необходимыt для работы с ssl-сертификатами и верификации доступа к API.

twitteR — пакет для импорта данных из твиттера

rga — пакет для доступа к Google Analytics (находится не в CRAN, надо отдельно устанавливать из гит-репозитория).

Отчеты в TeX

knitr — пакет для создания гибридного скрипта, с использованием TeX и чанками с R-кодом.

Профилирование кода

rbenchmark, microbenchmark — оценка времени выполнения функций, сравнение функций по скорости (вплоть до оценки статистической значимости различий).

Прочее

scale — позволяет переходить от академической формы отображения чисел (3,6E +05) к классическим, и обратно.

stringr — работа с текстовыми данными.

boot — пакет для бутстрепов функций.

foreign — импорт данных других программ (SPSS, например).

_____________

Филипп Управителев

R: учебники

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

Если все же хочется какого-то введения на русском языке, то рекомендую «Наглядная статистика. Используем R!» Шипунова и коллег, базовые вещи там вполне неплохо описаны. Из англоязычных — Burns P. The R Inferno; Kabacoff R. R in Action: Data Analysis and Graphics With R; Zhao Y., Cen Y. Data Mining Applications with R. В сети большая часть учебников или прочих дополнительных материалов легко гуглится. Например, очень большую коллекцию книг по R собрал мой друг и коллега Артем Клевцов: psylab.info/R:Литература

Из онлайн-учебников весьма хорош сайт www.statmethods.net/, где описаны основные методы манипуляции с данными (слияние, расщепление, транспонирование и проч.), методы анализа данных (проверка гипотез, многомерные методы, оценка мощности) и визуализации (гистограммы, дендрограмы, графики рассеяния, графики плотности и проч.).

Для тех, кто предпочитает различные онлайн-курсы, есть набор заданий, которые охватывают базовые разделы работы с R. Точно так же ряд тематических курсов на https://www.coursera.org/, которые посвящены анализу данных и близким темам, предполагают выполнение заданий на R.

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

Тем не менее, ситуации, когда приходится лезть в гугл и искать, как же можно решить свою задачу, случаются практически всегда, особенно на первых порах освоения языка. Благо, экосистема R включает в себя не только пакеты методы на любой вкус, но и обширное сообщество, у которого можно что-либо спросить. Ранее я упоминал уже про рассылку Nabble (http://r.789 695.n4.nabble.com/). Мне лично больше нравятся два других ресурса — CrossValidated и StackOverflow. Это форумы, на которых можно что-то спросить и получить ответ. CrossValidated — это сеть, которая объединяет различные ресурсы вопрос-ответного плана, StackOverflow, который посвящен языкам программирования (ветка по R — stackoverflow.com/questions/tagged/r), входит в нее. На CrossValidated есть и спец. форумы по статистике (http://stats.stackexchange.com). Таким образом, если гуглить что-то в духе «how to do xxx in R» или «k-medoids in R», ссылки на эти два форума будут в первой десятке.

Для любителей видео-курсов есть различные YouTube-каналы и плейлисты, например www.youtube.com/playlist?list=PL69A9CCD816A5F3A5.

Следует все же отметить, что большая часть учебников и учебных материалов по R посвящена именно каким-то основным принципам написания скриптов или работы с пакетами. Другие аспекты работы в R, такие как принципы грамотного программирования и оптимизация кода, написание собственных пакетов или разработка web-приложений для анализа данных на основе Shiny — практически не рассматриваются. Впрочем, для большинства психологов это требуется в очень редких случаях."

_____________

Филипп Управителев

Инструментарий аналитика: софт

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

В России, на заре времен, использовались либо локальные программные решения, типа ДА-системы (как правило, социологами для анализа данных опросов), либо Statistica. Последняя — проприетарный продукт компании StatSoft, содержит достаточно большое число модулей по самым разным видам анализов, но больше ориентированный, все же, на индустриально-промышленные задачи. Примерно в то же время у социологов была популярна программа Stata — в ней основная работа ведется через командную строку, а основной набор методов ориентирован на регрессии и работу с номинальными и порядковыми данными. Я, когда работал со Stata, достаточно долго привыкал к ее несколько негибкому языку и некоторым сложностям с манипулированием данными. Некоторые эстеты работали также с Matematica, Weka, в особых случаях — SAS.

Через некоторое время, в начале '00 годов, практика сместилась в сторону SPSS. В немалой части причиной этого стали учебники А.Д.Наследова. На первых порах SPSS пугает определенной лаконичностью интерфейса (а до 15 версии еще и отсутствием русскоязычной локализации), но через некоторое время это проходит. В настоящее время SPSS является наиболее распространенной программой анализа данных, с которой работают психологи. К сожалению, несмотря на регулярно выходящие новые версии (следует отметить, что наиболее стабильными традиционно являются нечетные версии), набор методов анализа в SPSS весьма традиционен, и включает в себя описательные статистики, регрессии, многомерные и непараметрические методы. Относительно неплохо реализована возможность работать множественными вариантами ответов на вопросы. Изыски вроде анализа временных рядов, ROC-кривых или нейронных сетей появились относительно недавно, и психологами, как правило, не используются. К сожалению, SPSS в базовой комплектации SPSS Statistics не дает возможности полноценно работать с текстовыми данными, оценками размера эффекта, IRT-моделями, структурным моделированием, байесовскими методами и некоторыми прочими. Для некоторых из них нужны дополнительные модули, или же они вообще не реализованы. Дополнительным плюсом является достаточно комфортная возможность работать с скриптами.

В общем и целом SPSS (или PSPP, ее бесплатный аналог для linux) является базовым инструментом для тех, кто работает с данными лишь несколько раз в год и, в целом, не особо искушен в области анализа количественных данных. Однако нередко возникают ситуации, особенно при работе с экспериментальными данными, когда необходимо иметь лучшее понимание того, что происходит с данными или просто использовать методы, не включенные в стандартный набор SPSS. Например, когда необходимо аппроксимировать теоретическую функцию распределения эмпирических данных, провести симуляционный эксперримент, использовать непараметрический факторный анализ, проанализировать данные ЭЭГ или же просто построить и оценить SEM-модель при процедуре валидизации опросника. В подобных ситуациях естественным и закономерным будет переход к другим инструментам.

Такими инструментами в настоящее время выступают MATLAB, Python и R. Все это, в первую очередь, языки программирования. Python является наиболее гибким по применению языком программирования, и анализ данных — лишь одна из областей его использования (пакет pandas, например), как и проектирование экспериментов в PsychoPy. MATLAB, конечно же, создан для боли и страданий, но в настоящий момент является самым общепризнанным в академической среде инструментом для проектирования экспериментов, сбора и анализа данных (особенно психофизиологических). К сожалению, проприетарен, но есть бесплатный аналог — Octave.

R, по сравнению с Python и MATLAB выглядит бедным родственником, несмотря на Shiny, так как полностью ориентирован на работу с данными. В настоящее время для R написано несколько тысяч пакетов с разнообразными методами манипуляций и анализа данных, на любой, даже самый притязательный вкус. В качестве дополнительных бонусов, помимо собственно повышения навыков программирования и алгоритмичного мышления, использование R повышает грамотность аналитика в области практики применения различных методов анализа данных. Второй бонус — R, как и Python, обладает возможностью доступа к различным источникам данных, типа facebook или twitter, не говоря уже о просто SQL-базах, что существенно расширяет не только область применения R, но и возможный инструментарий и области для психологических исследований.

Таким образом, если подходить профессионально и дотошно к анализу эмпирических данных, то, на мой взгляд, естественным выбором аналитика будет что-нибудь из списка Python/R/MATLAB. В крайнем случае SPSS, а для редких ценителей — со скриптами и включением кусков кода на R.

10 бесплатных программ, которые сделают вашу научную жизнь продуктивнее

Наука — это не только непрекращающийся fun, дорогие наши #горячиеюныекогнитивные, но еще и суровые трудобудни. При этом основной принцип настоящего ученого — больше полезной работы, меньше бесполезной (он же «лень — двигатель прогресса»). Следуя этому принципу, #thinkcognitiveсобрал для вас список из 10 наиболее полезных бесплатных программ, которые позволяют сделать трудобудни легче и работать с большим удовольствием. Разумеется, наш список неполный — какие программы вы используете, чтобы сделать свою жизнь проще?

1. Нет ничего страшнее, чем потерять текст курсовой накануне отправки научному руководителю. Или диплом. Чтобы этого не произошло, всегда храните важные файлы в облаке. Облако — это значит, что ваши файлы не просто лежат в интернете, они распределяются между различными серверами, причем с копиями, так что вероятность их потери становится практически нулевой. Copy (http://copy.com) и Dropbox (http://dropbox.com) — это программы, которые автоматически синхронизируют данные на вашем компьютере с данными в облаке. Copy дает вам больше места, чем Dropbox, и имеет приятную возможность восстановления предыдущих версий файлов. Пользуйтесь и не теряйте ничего.

2. Mendeley (http://mendeley.com) / Zotero (http://zotero.org) — две программы для хранения баз статей и создания списков литературы. Они полезны тем, что во-первых, вам становится гораздо легче найти что-то у себя в залежах литературы, а во-вторых вам больше не надо каждый раз оформлять список литературы вручную. Обе бесплатны, об их отличиях можно почитать тут: http://chetvericov.ru/faq-po-mendeley-i-zotero/.

3. Evernote (http://www.evernote.com) — программа для ведения заметок. Туда можно скидывать все, что вам может понадобиться, например, конспекты статей или фотографии накарябанных на салфетке гениальных идей. У нее есть веб-приложение, приложение для компьютеров, телефонов, так что ваши заметки будут доступны вам везде.

4. Notepad++ (http://notepad-plus-plus.org/) — маленькая замена блокноту. Большие плюсы — работает с разными кодировками, поддерживает подсветку синтаксиса многих программ, позволяет делать несложные операции с текстом, типа сцепления строк, в общем, 99% того, что может пригодиться при работе с текстовыми файлами.

5. Readability (https://www.readability.com/) — даже не приложение, а плагин для браузера. Он делает длинные страницы текста удобными для прочтения — увеличивает шрифт, делает нормальные цвета, в общем, убирает все лишнее.

6. Okular (http://okular.kde.org/) / PDF X-change Viewer (http://www.tracker-software.com/product/pdf-xchange-viewer) — две программы для просмотра PDF. Они обладают большими возможностями, чем стандартный Acrobat Reader, например, Okular умеет нормально копировать таблицы из PDF с сохранением форматирования, а PDF X-change Viewer обладает встроенным модулем распознавания текста (OCR). К сожалению, Okular изначально делался под Linux, поэтому, если вы захотите использовать его под Windows или Mac, вам придется скачать достаточно большой архив (см. тут:http://okular.kde.org/download.php).

7. Gimp (http://www.gimp.org/) — программа для редактирования изображений, бесплатный, хотя и менее удобный, аналог Adobe Photoshop. Если вам надо что-то нарисовать или отредактировать изображение, Gimp определенно лучше, чем Paint.

8. Если Gimp это аналог Photoshop, то Inkscape (http://www.inkscape.org/) — аналог Adobe Illustrator, то есть программа для редактирования векторной графике. С векторной графикой вы можете столкнуться в трех случаях: вам нужно сделать постер, вы хотите, чтобы ваши графики/иллюстрации прилично выглядели в напечатанной статье, вам нужно сделать много похожих стимулов разных цветов, форм, и т. п. Постеры в Word лучше не делать.

9. GoldenDict (http://goldendict.org/) — это словарь, точнее оболочка для словарей. Эта бесплатная программа может использовать словари самых разных форматов (в т.ч. Abbyy Lingvo), и достаточно удобна в использовании. В саму программу включен только один словарь, где найти остальные — читайте тут http://goldendict.org/dictionaries.php.

10. R + Rstudio + knitr — вы когда-нибудь анализировали данные? Потом копировали результаты анализа в текст, добавляли туда графики? Проверяли, чтобы все описание соответствовало стандартам, принятым на вашей кафедре, или журналом, куда вы посылаете текст? Если нет, то вам это еще предстоит. Если да, то вы наверняка делали ошибки. Например, выяснялось, что использованы не все данные, или где-то надо было исключить выбросы. И приходилось переделывать все заново. Связка R (http://cran.rstudio.com/), RStudio (http://www.rstudio.com/) и Knitr (http://yihui.name/knitr/) позволяет решить эту проблему. Вы пишете текст описания результатов анализа, вставляете в текст команды анализа с использованием R и получаете на выходе готовый текст со всеми нужными цифрами и правильным форматированием.

Анастасия Федорова: «не бояться и представлять себе конкретную цель»

#thinkcognitive продолжает публиковать истории о том, как психологи учатся программированию и разработке экспериментов на компьютере. Сегодня — рассказ Анастасии Федоровой, ранее студента РГГУ, а ныне — инженера-исследователя лаборатории нейроэргономики и интерфейсов мозг-компьютер Курчатовского института. Это еще и хороший пример огромного поля возможностей для работы когнитивных психологов — например, они могут работать в сотрудничестве с нейрофизиологами и инженерами над расширением возможностей нашего тела. От инсайтных задач к управлению робо-рукой движениями глаз =)

«Свой первый эксперимент я сделала 1,5 года назад на платформе Flash 8 с помощью языка ActionScript 2.0. Я продолжала исследование Андрея Четверикова и сначала использовала его программу, но затем решила попробовать сделать что-то сама. Flash я выбрала, так как в моем эксперименте нужно было много работать с графикой. Училась я так: читала документацию, учебники и форум flasher.ru. Через пару недель была готова первая нормально работающая программа для моего диплома.

Затем я осваивала матлаб. В лаборатории, где я работаю, мы используем его для вычислений и визуализации данных. Учила я его примерно так же: читая документацию и изучая примеры и программы коллег.

Неделю назад я закончила курс по R, который проходил на сайте coursera.org (https://class.coursera.org/compdata-004). Рекомендую всем студентам этот замечательный сайт: совершенно за бесплатно можно пройти крутейшие курсы ведущих мировых университетов. Курс был достаточно сжатый, но познавательный, мне очень понравились домашние задания, в которых нужно было писать небольшие программы, производящие сортировку и статистическую обработку данных. В апреле будет еще один курс от того же преподавателя (https://www.coursera.org/course/rprog), очень рекомендую всем, кто хочет изучать R, но не знает с чего начать :)

Сейчас я делаю программу для управления компьютером с помощью движений глаз. Разработчики айтрекера, который стоит у нас в лаборатории, предоставили библиотеки и примеры на Питоне и Си. Я решила начать с Си и сделала программу, распознающую движения глаз и позволяющую с их помощью управлять графическими объектами на экране. Инженер нашей лаборатории объединил мою программу со своей, которая осуществляет управление роботизированной рукой, и сейчас мы делаем эксперимент, в котором пользователь управляет роботом с помощью движений глаз! Это безумно круто и я горжусь тем, что моя программа стала частью этого эксперимента :)

Мне кажется, что главное в программировании — не бояться и представлять себе конкретную цель. Это безумно интересно и очень вдохновляет! Нет ничего приятнее, чем видеть, как твоя программа работает и приносит пользу! :) Я еще только начинаю программировать и собираюсь осваивать новые языки и платформы, ведь столько всего полезного можно сделать самому, имея только время, желание и компьютер! XD"

Друзья, если у вас есть по этому поводу истории или соображения, которыми вы хотели бы поделиться, мы будем рады их опубликовать.

Учитесь программировать и участвуйте в конкурсе NERD! grant.cogitoergo.ru/#nerd

https://www.youtube.com/watch?feature=player_embedded&v=WlxbDnv27dc