суббота, 8 октября 2016 г.

Что такое Python, и почему мы выбрали именно его

Урок: Что такое Python, и почему мы выбрали именно его

Транскрибация урока: В этом видео мы начнем знакомиться с языком Python. Python был задуман еще в 80-х годах. Его автором является Гвидо ван Россум, работавший тогда в центре математики и информатики в Нидерландах. Гвидо до сих пор принимает активное участие в жизни языка. У него даже есть особое звание — «великодушный пожизненный диктатор». Это особый термин, означающий создателя или главу некоторого проекта, который до сих пор принимает активное участие в его развитии. Существует 3 версии языка: Python1, Python2 и Python3. На сегодняшний день наиболее популярными являются последние 2 версии — Python2 и Python3. Обе эти ветки поддерживаются, однако между ними нет обратной совместимости. Мы с вами будем работать со второй версией. Это означает, что весь код, который мы будем писать, будет написан под Python 2.7. Однако, если вам Python понравится, вы можете самостоятельно изучить также 3-ю версию. Под нее уже портированы и работают практически все популярные библиотеки, поэтому пробуйте, вам должно быть легко. Теперь пара слов о лицензии. Python распространяется свободно. Практически все его версии попадают под действие Python Software Foundation license. Это означает, что они имеют открытый исходный код, а также могут быть использованы не только для личных или учебных целей, но и для создания коммерческих продуктов. Это здорово. Python портирован и работает практически под все известные операционные системы. Это означает, в частности, что он работает под Microsoft Windows, практически под всё семейство UNIX, под Mac OS и Mac OS X. Более того, Python работает даже с такими операционными системами, как iOS, Android или Windows Mobile. Одно из ключевых свойств Python — это его простота. Python имеет простой и лаконичный синтаксис, поэтому под него легко начать писать программы, даже если у вас нет опыта программирования. Более того, интуитивный синтаксис Python позволяет легко находить ошибки в вашем коде, а также быстро читать и понимать чужой код — это очень важно. У Python есть два режима запуска: это стандартный режим и интерактивный режим. Если мы работаем в стандартном режиме, то нам сначала нужно создать файл с кодом, сохранить его нужно с расширением .py, после чего этот файл нужно подать на вход интерпретатору, так как Python — интерпретируемый язык. Упрощенно это можно понимать следующим образом: у нас отсутствует этап компиляции кода, но при этом интерпретатор анализирует наш код построчно или покомандно и сразу же эти команды выполняет. Фактически, если в какой-то команде происходит ошибка, то в этом месте выполнение прекращается, и мы получаем сообщение об ошибке. В интерактивном режиме всё устроено несколько иначе. Мы запускаем Python в интерактивном режиме, после чего имеем возможность подавать ему на вход различные команды. При этом результат работы команд мы видим сразу. Более того, если где-то произошла ошибка, выполнение не прекращается, мы просто получаем сообщение об ошибке и можем экспериментировать дальше. Это очень удобно, когда мы только изучаем язык. Мы с вами часто будем работать в этом режиме. Кстати, многие любят использовать интерактивный Python как онлайн-калькулятор. Действительно, это удобно. Вы можете использовать не только простые арифметические операции, такие как сложение или вычитание, но и что-то более интересное. Например, можно использовать тригонометрию, логарифмы, факториалы. Вам просто нужно импортировать эти функции из соответствующих библиотек. Теперь давайте поговорим об эффективности. Часто программы, написанные на интерпретируемых языках программирования, работают несколько дольше, чем их аналоги, написанные на компилируемых языках. В частности, для ряда задач время выполнения программы может быть дольше. С другой стороны, мы обсудили целый ряд свойств Python, которые позволяют сделать разработку программ на нем довольно эффективной. Это значит, что не так много времени проходит с момента написания программы до момента ее корректной работы. Как же нам быть? Нам хочется, с одной стороны, экономить время, требуемое на разработку программы, с другой стороны, нам хочется, чтобы наши программы работали эффективно. Давайте подойдем к этому вопросу с практической точки зрения. Предположим, что мы решаем некоторую сложную задачу. Например, решаем задачу кредитного скоринга, где нам нужно оценить кредитоспособность некоторого клиента. Эта задача сложная, потому что информация о клиенте может быть сколь угодно сложна или разнородна, а нам с вами нужно придумать, как правильно ее обрабатывать, как правильно рассчитать целевую функцию, как правильно построить модель. Все эти шаги сложны логически, поэтому нам хочется больше внимания уделить логике работы нашей программы, а не синтаксису. Давайте напишем всё это на простом языке. Дальше возможны два варианта: либо программа сразу будет работать настолько быстро, что нам не захочется ничего менять, либо какие-то части будут работать медленно. Если что-то будет работать недостаточно эффективно, давайте перепишем это на быстром языке. Скорее всего, это будут какие-то стандартные части кода, например разложение матриц. Тогда мы можем переписать это на быстром языке, более того, эта часть будет стандартной, то есть мы напишем ее один раз, а дальше нам не придется часто читать этот код. И тогда мы будем использовать этот код в тех местах, где нам захочется работу несколько ускорить. Есть мнение, что 80 % знания языка — это знание его библиотек. С этой точки зрения Python очень интересен, потому что он содержит огромное количество разнообразных модулей в своей стандартной библиотеке. Например, это модуль codecs для работы с текстом в различных кодировках или модуль re для работы с регулярными выражениями. С другой стороны, Python содержит широкий набор внешних библиотек для решения разнообразных задач. Это может быть библиотека matplotlib для построения графиков или библиотека pandas для работы с данными в виде таблиц. Напоследок хотелось бы сказать несколько слов о философии Python. Если вы наберете команду >> import this, вы увидите так называемый «Дзен Python». Он будет на английском языке. Я вам расскажу несколько наиболее интересных утверждений. «Красивое лучше, чем уродливое. Простое лучше, чем сложное. Читаемость важна». Всё это говорит о том, что Python задумывался как простой, лаконичный язык, читать и писать программы на котором должно быть легко. «Если реализацию сложно объяснить — значит, идея точно плоха. Если же реализацию объяснить легко — значит, идея, возможно, хороша». Всё это говорит о том, что архитектура ваших программ важна. Ее следует продумывать заранее и пытаться строить таким образом, чтобы ваши программы были интуитивно понятны. В конце давайте все-таки ответим на вопрос, почему же мы выбрали именно Python в качестве основного языка для нашего курса и специализации. Во-первых, Python свободно распространяется и работает практически на всех известных платформах. Python прост для изучения и обладает такими важными свойствами, как интерактивность и интерпретируемость. Богатый набор функций стандартной библиотеки и широкий набор внешних библиотек позволяют нам решать практически любые задачи, а также вокруг Python сложилось большое сообщество разработчиков, что очень важно, потому что они разрабатывают новые библиотеки, а также помогают новичкам разобраться с кодом. Наверняка вам уже не терпится установить 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