вторник, 18 октября 2016 г.

Что такое ноутбуки, и как ими пользоваться

Урок: Что такое ноутбуки, и как ими пользоваться

Транскрибация урока: В этом видео мы начнем знакомство с IPython Notebook. На моем компьютере уже установлен IPython, и поэтому с помощью соответствующей команды в браузере я могу его запустить. При этом откроется новая вкладка, в которой будут перечислены все те файлы, которые лежат в директории запуска. Для создания нового файла достаточно нажать на кнопку New справа сверху и выбрать тип файла. Нам подходит Python 2. При этом в соседней вкладке появляется новый IPython Notebook, он пока что без названия, мы можем его задать. Давайте это сделаем. Я напишу introduction_to_python, вы можете выбрать любое название. Нажимаем кнопку OK. После этого в той директории, с которой мы запускали IPython, появится файл с этим именем и расширением ipython nb — ipynb. Итак, теперь давайте посмотрим на меню, которое у нас здесь в верхней строчке. На самом деле, меню достаточно интуитивное, поэтому прокомментирую очень коротко. Первая вкладка File предназначена для работы с самим файлом IPython Notebook'а. Из интересного здесь Download as — оно позволяет нам сохранить наш ноутбук, при этом это можно сделать в разных форматах — не только как ipynb-файл, но также как простой питоновский файл. Более того, мы можем выбрать сохранение с помощью html или pdf. Это довольно удобно, потому что если вам хочется поделиться результатами анализа с кем-то, кто не использует IPython или не использует Python в принципе, будет достаточно удобно сохранить это в виде pdf-документа и поделиться — тогда этот человек сможет просто его прочесть. Следующая вкладка — Edit, она отвечает за работу с ячейками. Еще одна вкладка — View — говорит о том, как может выглядеть наш IPython. Вот можем, допустим, скрыть верхнее меню, можем его снова вернуть, вот довольно удобно. Вкладка Insert позволяет нам вставлять ячейки, вкладка Cell отвечает за запуск ячеек и за то, как выглядит наш Output. Вкладка Kernel отвечает за работу с ядром: мы можем его прервать, можем его перегрузить, можем к нему подконнектиться заново. И вкладка Help позволяет нам получить подсказку по тем компонентам, с которыми мы работаем. Это может быть подсказка как по библиотекам, так и по составным частям ноутбука. Нижнее меню тоже довольно простое — при наведении на каждую иконку появляется комментарий. Первая иконка означает сохранение документа, следующая — добавление новой ячейки. Также ячейки можно вырезать, копировать, вставлять, двигать вверх-вниз, их можно запускать, можно прерывать выполнение и также можно перегружать ядро. Теперь давайте напишем нашу первую команду. Традиционно это будет команда 'hello, world!' — нужно будет вывести эту строчку на экран. У IPython это делается достаточно просто — достаточно просто написать эту строчку и запустить соответствующую ячейку. С этого и начнем. Итак, видим, что в качестве результата мы получили строку 'hello, world!'. Ну, можно поступить чуть более интересно — давайте создадим переменную и запишем в нее строчку 'hello, world!'. Ну вот, переменная получилась однобуквенная, не очень хорошо с точки зрения стиля, но ничего страшного. Так, создаем нашу строчку и запускаем. Теперь давайте выведем эту переменную на экран. Опять же это можно сделать двумя способами. Во-первых, можно просто запустить ячейку с этой переменной. Видим, в качестве результата выводится ее значение. Либо можно явно вызвать метод print. Также напечатали значение переменной. Двигаемся дальше. Часто IPython используют в качестве интерактивного калькулятора. Давайте и мы с вами попробуем что-нибудь посчитать. Ну давайте возведем число в степень. Это делается с помощью двойной звездочки. Вот видим, что получили правильный результат — действительно, 6 в четвертой степени. Можем попробовать деление. Видим, что когда мы делим одно целочисленное число на другое, предполагается, что и в качестве результата мы тоже ожидаем целочисленный тип — вот поэтому получили здесь число 8. Если же это не так и хочется получить точный результат в виде числа с плавающей точкой, то вот опять же можно это сделать разными способами. Самое простое — это перевести одно из этих чисел в тип float. Вот так мы и делаем и получаем результат с плавающей точкой. Но не всегда нам удобно работать с такими длинными числами, давайте его немножечко подсократим. Допустим, сделаем это с помощью округления. Для этого есть встроенная функция round. В качестве первого аргумента передаем ей выражение, которое мы хотим округлить. Давайте это же выражение и передадим. Второй аргумент — это количество знаков после запятой, которые мы хотим оставить. Ну давайте оставим три знака после запятой. Вот видите, получилось довольно компактная запись числа. На самом деле, это достаточно простые арифметические функции. Если вам хочется чего-то более интересного, то тут есть два варианта. Во-первых, нужную функцию вы можете самостоятельно реализовать, потом ею пользоваться. Второй вариант, как более предпочтительный — это импорт функций соответствующей библиотеки. Скорее всего, если вам нужно какое-то арифметическое выражение или какая-то функция, то она уже реализована. Вот я хочу посчитать факториал, давайте я его импортирую из библиотеки math. [БЕЗ_ЗВУКА] Итак, функция импортирована, теперь можно ее применять. Давайте посчитаем факториал от какого-нибудь небольшого числа, чтобы было легко проверить. Ну вот факториал, допустим, от трех. Он равен шести, все правильно. Ну теперь давайте посчитаем что-нибудь более интересное, например, факториал от десяти, ну, там умножим его на 0.5. Вот наш результат, тоже довольно просто. Еще одна особенность IPython, про которую хочется упомянуть — это гибкая работа с текстом. Вы можете оставлять комментарии, делить ваш IPython по заголовкам и даже редактировать формулы. Все это очень удобно и сильно повышает читаемость вашего ноутбука, поэтому я всячески советую этим пользоваться. Делается это довольно просто: мы создаем новую ячейку и дальше нам нужно поменять ее тип. Так как ячейку мы не планируем запускать — в том смысле, что мы не планируем писать в ней никакой код, — нужно задать ей тип Markdown. Теперь дальше. Можем написать здесь любой комментарий, который мы хотим видеть в этом месте. Ну давайте для примера просто напишем слово text, запустим ячейку и увидим, что вот этот комментарий теперь здесь останется. Если мы хотим добавить, например, заголовок, то нужно воспользоваться специальным символом. Заголовок обозначается с помощью решетки. Естественно, количество решеток соответствует уровню вашего заголовка. Чем больше решеток, тем ниже уровень заголовка. Ну вот, допустим, давайте сделаем заголовок первого уровня, для этого нам достаточно одной решетки. Напишем слово Header. Так. И теперь поменяем тип ячейки. Готово. Запускаем ее и видим, что появился наш заголовок. Теперь давайте сделаем нечто более интересное, а именно — напишем красивую формулу. Итак, снова меняем тип нашей ячейки. Формула начинается с двойного знака доллара. Ну и давайте напишем какую-нибудь формулу, знакомую всем с детства. Ну вот, например, следующую: квадратный корень из суммы квадратов катетов равен гипотенузе — например, это. Так. Синтаксис довольно простой. И заканчивает формулу опять же двойной знак доллара. Так. Видим, что получилась довольно симпатичная формула, соответственно, такими формулами вы можете пояснять весь свой код. [БЕЗ_ЗВУКА] Напоследок хочется показать еще несколько интересных функций. Ну, во-первых, мы можем вызывать команды bash прямо из IPython. Это делается с помощью восклицательного знака. Пишем восклицательный знак, а дальше — команду, которую мы хотим запустить. Ну давайте мы для простоты запишем, запустим команду echo, напишем в ней снова 'hello, world!' и запустим ее. Вот видите, результат у нас выводится прямо внутри IPython. Кстати, часто бывает удобно передавать туда питоновские переменные — это делается с помощью знака доллара. Помните, в самом начале мы создавали переменную, в которую записывали строчку 'hello, world!'? Вот давайте ее выведем, переменная называлась буквой t. Вот видите, все получается аналогично — тоже появилась строчка 'hello, world!'. Но это, что касается работа с простыми командами. Если нам хочется написать чуть более длинную команду, ну, например, состоящую из двух и более строк, то нам понадобится чуть более сложный синтаксис. Нам нужно будет вызвать так называемый bash magic. Делается это довольно просто: мы пишем два знака процента и далее — слово bash. После этого мы можем писать нашу команду, сколь угодно длинную. Ну давайте напишем для примера команду из двух строк, перейдем в другую директорию, ну и, допустим, выведем на экран, что в ней. Запускаем и видим, что ничего не вывелось, ну просто потому что директория пустая. Можем сделать вот так: ls − l — вот, действительно, написано, что нет ни одного файла. На самом деле, bash magic — далеко не единственный, который предоставляет нам IPython. Чтобы просмотреть весь список, нужно написать команду lsmagic. Видите, открылся довольно большой список, изучите его обязательно — я уверена, что вы найдете там что-то интересное для себя. А мы тем временем двигаемся дальше. И последнее, что хотелось бы показать — это работа с графиками в IPython. Для этого нам нужно также воспользоваться magic'ом, он называется pylab. Кстати, здесь он тоже перечислен, можете его найти. И нам нужно запустить его в режиме inline — эта команда позволит нам отрисовывать графики прямо внутри нашего IPython. Запускаем эту команду, и теперь давайте построим какой-нибудь простой график, например y = x. Для этого заведем наш y — это будет массив от 1 до 10. Давайте я его выведу на экран, чтобы вы в этом убедились. Действительно, обычный список. Итак, мы видим, что y — это массив чисел от 0 до 10, поэтому теперь давайте построим простой график y = x. Для этого нужно вызвать команду plot, передаем ей y в качестве аргумента и строим график. И вот на этом простом симпатичном графике хотелось бы закончить наше знакомство с ноутбуками, а начиная со следующего видео, вы будете более плотно знакомиться с синтаксисом языка Python.

Часть: Python, уровень 0

Модуль: Введение

Описание модуля: Добро пожаловать! На этой неделе мы начнём осваивать язык Python — один из главных инструментов специалиста в науке о данных, и вспомним кое-что о производных, которые активно используются при настройке моделей машинного обучения.

Курс: Математика и Python для анализа данных

Описание курса: Анализ данных и машинное обучение существенно опираются на результаты из математического анализа, линейной алгебры, методов оптимизации, теории вероятностей. Без фундаментальных знаний по этим наукам невозможно понимать, как устроены методы анализа данных. Данный курс направлен на то, чтобы сформировать этот фундамент. Мы обойдёмся без сложных формул и доказательств и сделаем упор на интерпретации и понимании смысла математических понятий и объектов.

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

В этом курсе вы познакомитесь с фундаментальными математическими понятиями, необходимыми для анализа данных, и получите начальный навык программирования на Python. Курс состоит из двух больших частей. Первая часть курса – практическая, она посвящена языку программирования Python. Вы познакомитесь с синтаксисом и идеологией языка, научитесь писать простые программы. Также вы узнаете о библиотеках, которые часто применяются на практике для анализе данных, например, NumPy, SciPy, Matplotlib и Pandas. Вторая часть курса посвящена таким разделам математики как линейная алгебра, математический анализ, методы оптимизации и теория вероятностей. При этом, упор делается на разъяснение математических понятий и их применение на практике, а не на вывод сложных формул и доказательство теорем.

Программа:
  • Введение
  • Знакомство с курсом
  • Python, уровень 0
  • Знакомство с синтаксисом Python
  • Производная и её применения
  • Немного обсуждений
  • Библиотеки Python и линейная алгебра
  • Библиотеки NumPy, Matplotlib, SciPy, Pandas
  • Линейная алгебра. Векторы
  • Линейная алгебра. Матрицы
  • Оптимизация и матричные разложения
  • Градиент и оптимизация гладких функций
  • Оптимизация негладких функций
  • Матричные разложения
  • Случайность
  • Вероятность и случайные величины
  • Статистики
  • Бонусный урок
Описание преподавателя:
  • Евгений Рябенко — кандидат физико-математических наук, доцент кафедры "Интеллектуальные системы" ФУПМ МФТИ, Data Scientist Фабрики данных Яндекса. Соавтор и преподаватель курса "Прикладной статистический анализ данных", который читается в МФТИ, МГУ и ВШЭ. Занимается анализом данных, био- и нейроинформатикой, кормит синиц.
  • Евгений Соколов — руководитель группы анализа неструктурированных данных в Yandex Data Factory. Окончил факультет ВМК МГУ в 2013 году, сейчас пишет диссертацию про матричные разложения в аспирантуре там же. Ведет практические занятия по машинному обучению на ВМК МГУ и читает лекции на ФКН ВШЭ. Преподаватель Школы Анализа Данных Яндекса.
  • Виктор Кантор – старший преподаватель кафедры “Алгоритмы и технологии программирования” ФИВТ МФТИ, руководитель исследовательской группы Yandex Data Factory. Ведет лекции и семинары в МФТИ на кафедрах “Алгоритмы и технологии программирования”, “Анализ данных”, “Банковские информационные технологии”, “Компьютерная лингвистика” и “Распознавание изображений и обработка текстов”.
  • Эмели Драль – преподаватель ШАД и руководитель исследовательской группы Yandex Data Factory. Окончила РУДН, факультет физико-математических и естественных наук, кафедра “Информационные технологии”. Разрабатывала учебные материалы и вела такие курсы как “Технологии разработки программных систем”, “Объектно-ориентированный подход к разработке программных систем”, “Методы интеллектуального поиска”. В МФТИ ведет семинары курса "Машинное обучение" на ФИВТ, кафедра “Алгоритмы и технологии программирования”.
Категория: Наука о данных

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

Тематика: Анализ данных

Материал:



Список литературы

Линейная алгебра
Виктор Кантор:
  • Ильин, Ким. Линейная алгебра и аналитическая геометрия (1998) — МГУ.
  • Умнов. Аналитическая геометрия и линейная алгебра (2011) — МФТИ.
Евгений Рябенко:
  • Деммель. Вычислительная линейная алгебра. Теория и приложения (2001) — понятный кусок про матричные разложения.
Математический анализ
Виктор Кантор:
  • Ильин, Позняк, Основы математического анализа (2005) — МГУ.
  • Тер-Крикоров, Шабунин. Курс математического анализа (2001) — МФТИ, много примеров.
  • Иванов. Лекции по математическому анализу (2000) — МФТИ, очень короткое, но полное изложение.
Методы оптимизации
Евгений Рябенко:
  • Нестеров. Методы выпуклой оптимизации (2010) — математически строгое введение в оптимизацию от живого классика.
  • Boyd, Vandenberghe. Convex Optimization (2004) — идеальная книга по классической оптимизации, много интересных постановок задач.
  • Schneider, Kirkpatrick. Stochastic Optimization (2006) — стохастическая оптимизация во всём многообразии.
Теория вероятностей и статистика
Евгений Соколов:
  • Dekking, Kraaikamp, Lopuhaa, Meester. A Modern Introduction to Probability and Statistics, Understanding Why and How (2005) — доступная книга, описывающая базовые понятия, теоремы и методы; разбирается очень много примеров, тесно связанных с задачами машинного обучения и анализа данных.
Виктор Кантор:
  • Лагутин. Наглядная математическая статистика (2007) — в основном статистика, но есть и небольшое введение в теорию вероятностей. Стоит читать, кроме глав про классификацию и анализ данных, там изложение не слишком современно.
  • Чжун, АитСахлиа. Элементарный курс теории вероятностей. Стохастические процессы и финансовая математика (2007) — очень простое изложение.
  • Отличные лекции с мехмата Новосибирского Государственного Университета: http://www.nsu.ru/mmf/tvims/chernova/tv/tv_nsu07.pdf — теория вероятностей, http://www.nsu.ru/mmf/tvims/chernova/ms/ms_nsu07.pdf — математическая статистика.
Евгений Рябенко:
  • Diez, Barr, Çetinkaya-Rundel, Dorazio. Advanced High School Statistics (2015) — вводная книга, программа соответствует типичному курсу Statistics 101 хорошего западного университета.
  • DasGupta. Probability for Statistics and Machine Learning: Fundamentals and Advanced Topics (2011) — для смелого читателя, рассматриваются в том числе достаточно высокоуровневые методы.
Python
Эмели Драль:
  • Классические руководства по Python: https://docs.python.org/2/tutorial/ (2.7), https://docs.python.org/3/tutorial/(3.5)
  • Reitz. The Hitchhiker’s Guide to Python http://docs.python-guide.org/en/latest/ — довольно полное руководство, в котором рассматриваются вопросы от установки, работы с виртуальным окружением и работы в различных IDE до основных структур языка с примерами кода.
  • Google python class https://developers.google.com/edu/python/ — небольшой бесплатный онлайн-курс по Python для слушателей с минимальным опытом программирования.
Книги, для тех, кому захочется основательно изучить Python:
  • Lutz. Learning Python (2013) — с этой книги можно начинать изучение, она покрывает все основные структуры языка.
  • Lutz. Python Pocket Reference (2015) — подробный справочник.
Конспекты
https://drive.google.com/open?id=0B4sIH7qjgc24cVh0aTNnMEM0eXc

Интересные ресурсы
Ресурсы по материалам 1 недели:
Здесь http://bit.ly/29hALFk вы можете узнать, какие языки программирования сегодня являются самыми востребованным. Интересно, какое место в рейтинге занимает python?

Многие часто спрашивают, почему мы выбрали для специализации python, а не R? Мы подошли к выбору со всей ответственностью, рассмотрели плюсы и минусы обоих вариантов и остановились на python, в первую очередь, из-за простоты изучения, читаемости кода и универсальности языка. Здесь вы можете почитать статью о сравнении языков python и R http://bit.ly/29lkL5z

Ресурсы по материалам 2 недели:
На второй неделе курса Вам предстоит знакомство с библиотекой Pandas для работы с данными в виде таблиц, SciPy и NumPy для работы со статистикой, линейной алгеброй, оптимизационными задачами, а также Matplotlib для визуализации данных. Эти библиотеки очень функциональны, просты для изучения и популярны в мире анализа данных. Они настолько широко распространены, что часто можно встретить их использование для вот таких необычных задач: Python и красивые ножки http://bit.ly/2an3FTt

Занятное дополнение к материалам второй недели:
  • Знакомство с Python, Numpy, Scipy, Matplotlib http://bit.ly/2a4yd06
  • Курс Делфтского Технического Университета про Python и его использование в научных вычислениях http://bit.ly/29GCt4J
Ресурсы по материалам 4 недели:
Статистика — важный инструмент познания, дающий нам механизм порождения новых знаний из наблюдений за окружающим миром. Научиться им пользоваться может быть непросто; если материал лекций покажется Вам сложным, посмотрите, как понятия статистики объясняются на котиках http://bit.ly/29T53jd или в танце http://bit.ly/29PH9l5