Основы программирования и работы с данными для социологов

Коцепция курсов

И. Мусабиров, П. Окопный

Санкт-Петербург, 2013


Предварительные замечания

Мы исходим из того, что студентам I курса читаются основы линейной алгебры и анализа, основы теории вероятностей и математической статистики.

Последовательность курсов спланирована с минимальными перекрытиями с существующими “количественными” курсами (курсом Applied Software, курсом “Анализ данных”), если предполагается изменение их программ по охвату, то следует соответствующим образом адаптировать и эту последовательность курсов. В тех местах, где курсы всё-таки пересекаются, это пересечение оправдано преподаванием с разных аспектов и должно способствовать более полному усвоению и закреплению концепций последующих курсов.

Где возможно, мы опирались на последний черновик новой версии модельного стандарта ACM Computing Curricula 2013. Несмотря на то, что он предназначен для undegraduate CS majors, акценты в новой версии сделаны на концепции Big Tent CS и Computational X, то есть на поощрение использования элементов CS в рамках широкого спектра дисциплин с усиливающейся потребностью в “вычилительной” составляющей.

Мы планируем в дальнейшем дополнить описания курсов привязкой к методическим единицам и компетенциям из ACM Computing Curricula 2013 Body of Knowledge, пока хотелось бы отметить, что мы отказались от введения некоторых наиболее сложных из базовых концепций, предусмотренных Curricula 2013 как обязательные в пользу акцента на навыки, полезные с точки зрения воспроизводимых исследований.

Соответственно, наоборот, часть из метод. единиц раздела Computational Science, например, вошла в состав курсов, несмотря на элективность в стандарте. Разделы, которые не освещены в Curricula 2013, и лежащие ближе к области Statistical Computing, во многом “привязаны” к наработкам проекта Integrating Computing into the Statistics Curricula Университета Калифорнии (Беркли). Например, важной темой StatCurricula, отсутствующей в явном виде в Curricula 2013 являются вопроизводимые вычисления/воспроизводимые исследования (reproducible computation/reproducible research), занявшие важную роль и в нашей последовательности, включая вводный курс.

Замечания по отдельным курсам и выбору языков/средств

Решение использовать R (vs. Python) в качестве языка программирования для первого курса далеко не однозначно, в том числе и для нас. В обсуждении с коллегами мы приняли это решение исходя из того, что объёмы написанного студентами самостоятельно кода в рамках этого курса невелики, охват тем позволяет отступать в некоторых местах от принципов эффективного написания кода в R в пользу большей ясности и читаемости кода, то есть раннего введения сложных конструкций (*apply и некоторые замысловатые формы векторизации) можно избежать.

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

С использованием современной инфраструктуры R мы можем попытаться сделать курс избавленным от первоначальных опасений и проблем, связанных с развертыванием выичислительной среды и неприятия студентом, обусловленного, в том числе длиииииииииным пологим участком кривой обучения от того момента, где ты написал “hello world” и до того, где появляется хоть какой-то смысл. Особенно важным это кажется для бакалавров-социологов, большая часть учебного плана которых далека от CS-проблематики. Немаловажным представляется и то, что инфраструктура позволяет сделать это сравнительно быстро.

Из-за выбора языка базового курса в последовательности сейчас не описано базового курса Python, однако, считать это принципиальной позицией не следует. Безусловно, как минимум R и Python должны быть обязательно в “словарике” бакалавра-социолога, вопрос только в последовательности введения и правильном их разделении между тематическими блоками.

Очевидно отсутствие сколько-нибудь близкого подхода к распределённым вычислениям. Кажется важным вводить на уровне минимальных практических навыков использования обработку наборов данных больших объёмов, скорее всего, на базе Hadoop, и скорее всего на уровне высокоуровневых интерфейсов и утилит. Возможный подход – стартовать от соответствующих решений на базе R, сравнительно неплохо пополняющихся в последнее время (RHadoop, mapR), и попытаться затронуть Pig/Hive. Хотелось бы надеяться, что успешность в более “продвинутой” части курсов по R, где затрагиваются элементы ФП, явно и много используется стратегия параллельной обработки (split-apply-combine), будет облегчать понимание и распределённых вычислений на прикладном уровне.

Основная последовательность курсов

Программирование для социологов I: Методология программирования (с исп. R)

Цель: познакомить студентов с основами программирования и заложить основы computational thinking и problem solving, используя в качестве примеров вопроизводимые исследования и интерактивные приложения из области социальных наук.

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

Области знания (по ACM Computing Curricula 2013): Software Development Fundamentals (SDF), Systems Fundamentals (SF), Computational Science (CN)

Разделы областей знания:

Содержание


Практикум (темы)

Базовая литература

Дополнительная литература

Программирование для социологов II: Работа с данными (с исп. R, SQL)

Цель: научить студентов работать с реальными/приближенными к реальным данными, дать базовые навыки работы с реляционными СУБД.

Одной из наиболее важных частей программирования для целей анализа данных является подготовка данных и их преобразование в необходимую для анализа форму. Нередко приёмы агрегации и изменения представления данных позволяют найти ответы на интересующие вопросы без применения сложных алгоритмов анализа.

Курс рассматривает подходы и типовые операции работы с данными с нескольких точек зрения, в частности, языка запросов SQL и наиболее популярных фреймворков для работы с данными в R.

Разделение I и II курсов позволяет сделать II курс hands-on курсом по программированию в R, получая на примере обработки данных опыт создания завершённых программ, организации кода и логически завершённых цепочек преобразований данных.

В этом смысле, с поправкой на базовость применяемых стат. методов, он в большой степени призван предоставлять возможность получения практики работы с данными (Computing with Data) в смысле (Computing in the Statistics Curricula, разд. 4), а не просто знакомить со способами их обработки.

Кроме того, больший акцент делается и на методы разработки (SDF/Development Methods), с упором на подходы и инструментальные средства разработки для облегчения итеративного решения задач анализа данных.

Темы

Разработка ПО для воспроизводимых исследований в R

Примечания: Кандидат в graduate курсы (Близкий по целям к Stanford STATS290). Если делать его undergraduate, должен быть сравнительно длинным, включать много hands-on programming небольшими порциями и регулярно + сделать его проектным курсом со сквозным примером обработки данных.

Цель: По завершении курса исследователь сможет писать достаточно сложные программы на R для реализации воспроизводимых исследований, в том числе:

Темы

Базовая литература

Дополнительные курсы

Data Mining I (с исп. R)

Примечания: Клон Stanford STATS202. https://sites.google.com/site/stats202/course-information

Цель: Дать представление о работе методов Data Mining с упором на содержательную сторону классов задач DM, методов оценки работы различных алгоритмов.

Курс практически не затрагивает техники многомерного анализа данных, освещаемые в курсе “Анализе данных” и предполагает фокусировку на понимании условий применимости, сильных и слабых сторон различных методов решения задач Data Mining.

Акцент на задачах классификации помогает проследить эволюционное развитие алгоритмов и на примерах понять проблематику DM (bias-variance tradeoff, проблемы интерпретируемости, проблемы сопоставления различных классификаторов).

Курс, помимо ознакомления с применением Data Mining, может служить хорошей основной для дальнейших практико-ориентированных курсов, например, Database Marketing, SNA.

Темы

Базовая литература

Основы вычислительной статистики (с исп. Python)

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

Для студентов-бакалавров, владеющих основами программирования, может не только послужить средством дальнейшего развития computational thinking, но и помочь разрешить часто возникающее у студентов соц. направлений ощущение потери контроля при обращении к математико-статистическим методам, возникающее после стандартного курса ТВ и МС и дальнейших курсов по анализу данных.

Курс закладывает крепкое основание для дальнейшего знакомства с Байесовской статистикой и агентным моделированием, в том числе применяемым в социальных науках.

Так как это не курс традиционной статистики с использованием программынх пакетов (то есть не Introductory Statistics with R), в качестве языка был выбран Python, что, во-первых, позволит избежать использования встроенных средств R для “срезания пути”, во-вторых должно помочь прямо следовать Think Stats и Think Bayes, где это необходимо, облегчая работу преподавателя по подготовке.

Название “основы вычислительной статистики” было выбрано чтобы подчеркнуть вышеупомянутое отличие, в прямом смысле это, конечно, совсем не курс computational statistics.

Пререквизиты: базовые знания программирования (циклы, функции, элементы ООП), курс ТВиМС.

Темы

Базовая литература

Работа с веб-данными (с исп. Python)

Цель курса: научить студентов извлекать и обрабатывать данные в наиболее распространённых форматах из интернет, подготавливать их для дальнейшей обработки.

С появлением всё большего количества данных, в том или ином виде доступных из различных источников в Интернет, всё более актуальным становится владение способами из извлечения и обработки, понимания принципов работы Web services, построенных и использованием различных технологий.

Это hands on programming курс с использованием Python, предполагающий в процессе практических занятий выполнение проектного задания и знакомство с некоторыми аспектами технологии и инструментальными средствами программной инженерии – системами контроля версий, IDE, сервисов social coding (GitHub, BitBucket) и т.д.

Пререквизиты: базовые знания программирования (циклы, функции, элементы ООП).

Темы

Базовая литература