Мы исходим из того, что студентам 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), будет облегчать понимание и распределённых вычислений на прикладном уровне.
Цель: познакомить студентов с основами программирования и заложить основы computational thinking и problem solving, используя в качестве примеров вопроизводимые исследования и интерактивные приложения из области социальных наук.
Последовательность практических заданий, в которых написанный студентом код встраивается в подготовленную структуру примера, позволяет сократить зазор от начала обучения до осознания на практике области применимости полученных навыков.
Области знания (по ACM Computing Curricula 2013): Software Development Fundamentals (SDF), Systems Fundamentals (SF), Computational Science (CN)
Разделы областей знания:
Цель: научить студентов работать с реальными/приближенными к реальным данными, дать базовые навыки работы с реляционными СУБД.
Одной из наиболее важных частей программирования для целей анализа данных является подготовка данных и их преобразование в необходимую для анализа форму. Нередко приёмы агрегации и изменения представления данных позволяют найти ответы на интересующие вопросы без применения сложных алгоритмов анализа.
Курс рассматривает подходы и типовые операции работы с данными с нескольких точек зрения, в частности, языка запросов SQL и наиболее популярных фреймворков для работы с данными в R.
Разделение I и II курсов позволяет сделать II курс hands-on курсом по программированию в R, получая на примере обработки данных опыт создания завершённых программ, организации кода и логически завершённых цепочек преобразований данных.
В этом смысле, с поправкой на базовость применяемых стат. методов, он в большой степени призван предоставлять возможность получения практики работы с данными (Computing with Data) в смысле (Computing in the Statistics Curricula, разд. 4), а не просто знакомить со способами их обработки.
Кроме того, больший акцент делается и на методы разработки (SDF/Development Methods), с упором на подходы и инструментальные средства разработки для облегчения итеративного решения задач анализа данных.
Примечания: Кандидат в graduate курсы (Близкий по целям к Stanford STATS290). Если делать его undergraduate, должен быть сравнительно длинным, включать много hands-on programming небольшими порциями и регулярно + сделать его проектным курсом со сквозным примером обработки данных.
Цель: По завершении курса исследователь сможет писать достаточно сложные программы на 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.
Цель: дать студентам возможность рассмотреть проблематику основ теории вероятностей и математической статистики с точки зрения computational thinking, используя аппарат компьютерных имитационных моделей, написанных руками студентов, для симуляции основных явлений и понятий ТВ.
Для студентов-бакалавров, владеющих основами программирования, может не только послужить средством дальнейшего развития computational thinking, но и помочь разрешить часто возникающее у студентов соц. направлений ощущение потери контроля при обращении к математико-статистическим методам, возникающее после стандартного курса ТВ и МС и дальнейших курсов по анализу данных.
Курс закладывает крепкое основание для дальнейшего знакомства с Байесовской статистикой и агентным моделированием, в том числе применяемым в социальных науках.
Так как это не курс традиционной статистики с использованием программынх пакетов (то есть не Introductory Statistics with R), в качестве языка был выбран Python, что, во-первых, позволит избежать использования встроенных средств R для “срезания пути”, во-вторых должно помочь прямо следовать Think Stats и Think Bayes, где это необходимо, облегчая работу преподавателя по подготовке.
Название “основы вычислительной статистики” было выбрано чтобы подчеркнуть вышеупомянутое отличие, в прямом смысле это, конечно, совсем не курс computational statistics.
Пререквизиты: базовые знания программирования (циклы, функции, элементы ООП), курс ТВиМС.
Цель курса: научить студентов извлекать и обрабатывать данные в наиболее распространённых форматах из интернет, подготавливать их для дальнейшей обработки.
С появлением всё большего количества данных, в том или ином виде доступных из различных источников в Интернет, всё более актуальным становится владение способами из извлечения и обработки, понимания принципов работы Web services, построенных и использованием различных технологий.
Это hands on programming курс с использованием Python, предполагающий в процессе практических занятий выполнение проектного задания и знакомство с некоторыми аспектами технологии и инструментальными средствами программной инженерии – системами контроля версий, IDE, сервисов social coding (GitHub, BitBucket) и т.д.
Пререквизиты: базовые знания программирования (циклы, функции, элементы ООП).