среда, 2 ноября 2016 г.

Pandas. Индексация и селекция

Урок: Pandas. Индексация и селекция

Транскрибация урока: [БЕЗ_ЗВУКА] В этом видео мы продолжаем работать с библиотекой Pandas. Мы узнаем еще несколько полезных функций для работы с Data Frame, а также поговорим об индексации и селекции. Для начала импортируем нашу библиотеку. Далее снова создаем Data Frame. Делаем это с помощью уже знакомой нам функции read.csv [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] Итак, наш Data Frame перед вами. Первое, что хочется сделать, это посмотреть, какого типа наши столбцы. Это делается с помощью dtypes. [БЕЗ_ЗВУКА] Мы видим, что все столбцы имеют тип object. Если присмотреться повнимательнее к нашему Data Frame, то можно заметить, что столбец Birth соответствует дата рождения. А в Python есть специальный тип datetime для работы с датами. Если мы сделаем наш столбец типа datetime, то нам будет удобнее с ним работать, потому что мы сможем вызывать специфичные для datetime функции. Это можно сделать с помощью метода Apply. Давайте посмотрим, как он работает. Сразу скажу, что метод Apply тоже работает не inplace, поэтому воспользуемся уже привычным синтаксисом с присваиванием. Вызываем метод Apply. Итак, что мы хотим? Мы хотим применить к нашему столбцу функцию, которая поменяет его тип. Вот давайте вызовем функцию to.datetime. Это также функция модуля Pandas. Так, вызываем нашу функцию. И теперь смотрим, как изменился наш Data Frame. [БЕЗ_ЗВУКА] Сначала можем просто вывести его на печать. Видим, что немножечко изменился формат записи наших дат. А теперь убедимся, что тип также изменился. Снова высылаем dtypes. И видим, что, действительно, колонка Birth изменила свой тип. Теперь это datetime, теперь мы сможем с ней работать, как с датой. А следующая полезная функция, которую мы изучим, это функция info. Она позволяет нам получить мини сводку по нашему Data Frame. Мы видим список всех колонок, которые у нас есть, видим, сколько там ненулевых объектов. Вот мы видим, что в колонке Position есть два нулевых значения. Также мы видим, какие типы данных у нас используются, и сколько места тратится на хранения нашего Data Frame. Мы видим, что наш Data Frame содержит пропущенные значения. Это пропуски – столбцы Position. Не все должности заполнены. Нам не всегда удобно работать с пропущенными значениями в том виде, в котором они есть, и часто мы хотим их на что-то заменить и чем-то их заполнить. Давайте это сделаем и в нашем случае. Например, предположим, что откуда-то из наших опорных данных мы знаем, что везде, где позиция пропущена, она соответствует должности «разнорабочий». Давайте так и заполним. Для этого можем воспользоваться методом Fillna. [БЕЗ_ЗВУКА] В качестве аргумента передаем то значение, которое мы хотим заполнить наши пропуски. Мы с вами просто пишем строчку «разнорабочий». И сразу говорим, что мы хотим это делать inplace. Итак, запускаем. Убираем лишнюю букву «a». И еще раз запускаем. Теперь давайте посмотрим, как выглядит наш Data Frame после изменений. На экране появился Data Frame без пропусков. Теперь все наши пропуски заполнены значением «разнорабочий». Но на самом деле в данном случае мы видим, что наши изменения коснулись только одного столбца. Часто нам удобней вывести его отдельно. Это можно сделать, обратившись к нему по имени через точку. Например frame.Position. Видим, что нам вывелся только один столбец. Причем он вывелся, как serias, то есть как обычный массив. Если мы хотим вывести его в виде Data Frame, то есть чтобы было видно саму таблицу, то нужно обратиться к нему несколько иначе. Указываем значение нашего столбца, вернее его имя, Position. И видим, что теперь он вывелся в привычной для нас форме в виде таблицы. На самом деле аналогичным образом можно вывести любой набор столбцов. Давайте выведем имя и позицию, Name и Position. И аналогично можно поступать со строчками. Допустим, мы хотим вывести первые несколько строк. Если мы выводим первые строки, то можно воспользоваться командой head. Допустим первые 3 строки. Есть и альтернативный способ вывода первых трех строк нашего Data Frame. Мы можем работать с Frame в данном случае как с простым списком. Давайте просто обратимся по индексу. Сделаем вот так, и также получим наши первые 3 строки. Аналогично можно вывести, там, последние 3 строки. Все очень похоже на обычный список. Вот так. Все работает. Если же мы хотим сделать что-то более сложное, например выбрать какой-то список строк и какой-то список столбцов, мы можем воспользоваться командой loc. Она позволяет обращаться к нашему Data Frame с помощью обращения к названиям наших осей. Давайте продемонстрируем, как это работает. Вызываем loc. Дальше сначала передаем ему список тех строк, которые мы хотим. Название наших строк – это их индекс. Поэтому можем, ну просто, написать список цифр, ну допустим, 1-я, 3-я и 5-а строка. Дальше говорим, с какими столбцами мы хотим работать. Ну давайте выведем Name, например, и City. Теперь видим, что получилось ровно то, что мы хотели: 3 строчки и 2 столбца. Альтернативно можно обращаться к нашим осям не по имени, а по позиции, то есть по номеру нашего столбца и по номеру нашей строки. Это делается с помощью команды iloc. [БЕЗ_ЗВУКА] В данном случае первый аргумент не изменится, потому что название оси совпадает с ее позициями, поэтому просто пишем 1, 3, 5. А вот для обращения к колонкам, нам придется просто заменить Name и City на их номера. Соответственно, это получается, что у нас, у нас получается 0-й и 2-й номер. Индексация с 0. Да, получили тот же самый срез нашего массива. Есть еще один способ обратиться к нашему массиву и сделать выборку. Это метод ix. Он умеет работать одновременно и с именами, и с позициями. Вот давайте проверим. Сначала давайте проверим, как он работает с именами. Повторим те же аргументы, которые мы передавали методу «loc. Соответственно результат должен быть таким же. Так, передаем Name и City. И запускаем. Видим, что выброска не изменилась. А теперь давайте попробуем передать туда номера. [БЕЗ_ЗВУКА] Да, все точно так же. Поэтому чаще всего разработчики предпочитают использовать сразу ix, потому что он поддерживает и ту, и другую аннотацию. Так, на самом деле мы можем делать не только такие простые выгрузки из нашей таблицы. Мы можем делать более сложные срезы, удовлетворяющие некоторым логическим операциям. Ну, например, мы можем как-нибудь отфильтровать наш Data Set. Давайте возьмем Data Frame и отфильтруем его по дате рождения. Например, выберем только тех людей, кто старше 85-го года рождения. Как это можно сделать? Берем наш Data Frame. Берем что нас будет интересовать поле «дата рождения». Указываем его в квадратных скобках. Дальше записываем явно то логическое выражение, которое мы хотим проверить. В данном случае нас интересует «больше, либо равно» и давайте будем сравнивать с 85-м годом. Нам нужно создать сначала наш datetime объект. Помните мы заранее поменяли тип нашего столбца, чтобы мы могли работать с ним, как с датами. Поэтому теперь, если мы будем сравнивать этот столбец с датой, то мы получим корректный результат сравнения. Итак, 1 января 85-го года. Итак, мы видим, что результат соответствует нашему условию. В таблице остались только те сотрудники, дата рождения которых не раньше, чем 1 января 1985 года. Работает это с помощью логических индексов. Чуть подробнее, что это такое, вы узнаете несколько позже, когда будете изучать библиотеку NumPy. Там вы обязательно познакомитесь с этим понятием. Но а сейчас мы двигаемся дальше. И давайте мы несколько усложним наше условие. Сейчас мы проверяли условие только на один столбец, давайте проверим сразу несколько. Так как результат применения нашего условия к столбцу логический, то есть True или Falce для каждой строки, то на самом деле мы можем применить некоторую логическую функцию между различными условиями. Например, мы можем проверить условие на дату рождения, еще одно условие на дату рождения или на какой-то другой столбец, и посмотреть, скажем, на их пересечение или на их объединение. Любую логическую функцию. Вот давайте сначала возьмем некоторое условие на дату рождения. Даже давайте оставим то же самое и проверим условие на город. Например, выберем только сотрудников, которые не из Москвы. Вот синтаксически это будет выглядеть следующим образом: снова берем наш Frame, и в квадратных скобках записываем условия. Так как условия будет два, давайте сразу подготовим круглые скобки для каждого из условий. И так как мы уже договорились, что будем использовать их пересечение, давайте добавим знак логического «и» между ними. Теперь первое условие оставляем без изменений. Дата рождения. Дата рождения должна быть не раньше, чем 1-го января. [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] И следующее условие давайте выберем таким: «город» ≠ «Москва». [БЕЗ_ЗВУКА] Судя по предыдущей таблице, мы ожидаем получить только одну строчку. Давайте посмотрим. Ровно так и получилось. Это было пересечение условий. А теперь давайте попробуем сделать объединение условий. То есть логическое «или». Синтаксис будет очень похож. Сначала записываем первое условие. Давайте снова его оставим. [БЕЗ_ЗВУКА] [БЕЗ_ЗВУКА] Дальше набираем знак логического «или». И запишем второе условие. Давайте выберем тех людей, которые из Волгограда. [БЕЗ_ЗВУКА] Запускаем нашу команду и видим, что у нас появилось два типа людей: первые те, у кого «город» = «Волгограду», это первый человек, и все остальные, у кого дата рождения позже 1 января 85-го года. На этом мы закончим работу с Data Frame. Вы уже научились создавать Data Frame, модифицировать их, применять к ним различную функцию, работать с индексами и делать выборки. На самом деле это только вершина айсберга, но нам пора двигаться дальше, и в следующей видеолекции вы будете изучать библиотеку NumPy.

Часть: Библиотеки NumPy, Matplotlib, SciPy, Pandas

Модуль: Библиотеки Python и линейная алгебра

Описание модуля: На этой неделе мы познакомимся с 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