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

Pandas. Data Frame

Урок: Pandas. Data Frame

Транскрибация урока: [БЕЗ_ЗВУКА] В этом видео мы начнем знакомство с библиотекой Pandas. Pandas — очень мощный инструмент для анализа данных Python. Pandas позволяет нам работать с данными в виде таблиц. Это очень естественное представление данных в задачах анализа. Например, если мы решаем задачу классификации данных, то часто мы работаем с матрицей «объект-признак». В этом случае по строчкам у нас идут объекты, а по столбцам — их признаки. Опять же, если мы решаем задачу построения рекомендательных систем, снова мы работаем с таблицами. Мы работаем с таблицей User right, ну или с матрицей предпочтения. Итак, переходим к нашей библиотеке. Сначала нам нужно ее импортировать. Делаем это с помощью команды import. [ПЕЧАТАЕТ] Я использую стандартное сокращение pd, вы будете часто это встречать в коде. Итак, основное в структуре данных, которое позволяет нам работать с таблицами, является Data Frame. Data Frame можно представлять себе как такую двумерную матрицу или как dict-like container для работы c Series. Series — это обычный одномерный drr массив, он отличается от простого массива только тем, что в простом массиве у нас все элементы проиндексированы от 0 до размера массива −1, а тут у нас элементы могут иметь лейблы, то есть это могут быть, в принципе, произвольные имена. Итак, создадим нашу первую таблицу, или наш первый DataFrame. Сделаем это с помощью словаря. Пусть наш DataFrame состоит всего лишь из двух столбцов. Первый столбец будет числами, второй столбец будет каким-нибудь повторяющимся символом. Ну так, теперь создаем наш словарь. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] Итак, мы сделали табличку, теперь давайте выведем ее на экран и посмотрим, как она выглядит. Итак, мы видим, что названия столбцов соответствуют нашим ключам в словаре, и значения соответствуют тому, чем мы их заполнили. Довольно удобно. Но на самом деле такой способ создания DataFrame будет использоваться не так часто, потому что обычно мы хотим анализировать какие-то внешние данные, а эти данные часто хранятся в виде файлов или в виде набора файлов. Поэтому нам удобнее будет считывать эти данные в DataFrame и дальше работать с ними, как с таблицами. Вот давайте попробуем такое сделать. Для этого есть функция read_csv. Она позволяет нам считывать данные с каким-то стандартным разделителем и далее работать с ними, как с таблицей. Создадим новый объект и считаем на него специально заготовленный файл. [ПЕЧАТАЕТ] В качестве первого аргумента передаем имя этого файла. [ПЕЧАТАЕТ] Дальше нам нужно указать, есть ли в нашем файле заголовки. В нашем файле они есть, они находятся в первой строчке. И дальше нужно написать, какой разделитель у нас используется. В данном случае мы используем табуляцию. Итак, мы считали наш файл в таблицу, давайте на него посмотрим. [ПЕЧАТАЕТ] Видим, что получилась небольшая табличка. Она состоит из шести строк и четырех столбцов. Наши столбцы имеют имена (они перед вами в верхней строчке), и строки опять проиндексированы. Кстати, чтобы обратиться к именам столбцов или чтобы их поменять, есть специальный атрибут, называется columns. Таким образом, можно к нему обратиться через точку. И вот мы видим все наши имена столбцов. Также довольно полезный атрибут – shape. С помощью него можно посмотреть на размер нашей таблицы. Ну сейчас табличка маленькая, мы и так представляем себе ее размеры, а когда таблица довольно большая, то это полезно. [ПЕЧАТАЕТ] Итак, мы научились создавать DataFrame, а теперь давайте потренируемся их модифицировать. Мы можем удалять и добавлять строчки, удалять и добавлять столбцы. Давайте начнем с простого и добавим в конец нашего DataFrame новую строчку. Строчку будем добавлять в виде словаря. Это далеко не единственный способ добавления строки, но он довольно простой. Для начала давайте создадим такой словарь. Назовем его new_line, потому что он будет являться впоследствии новой линией в нашем DataFrame, в нашей таблице. Ну и давайте заполним какие-нибудь значения. Допустим, заполним имя. Ну давайте еще заполним дату рождения. Ну вот можно еще заполнить город. [ПЕЧАТАЕТ] Итак, наш словарь готов. Теперь с помощью команды append нужно его добавить к нашему DataFrame. Вызываем во frame метод append. В качестве первого аргумента передаем наш словарь. И еще указываем аргумент ignore_index = True, потому что нам не так важно, под каким индексом добавится наша новая строчка. Так, сделали команду, видим что в конце DataFrame добавилась новая 6-я строка с тем, что мы заполнили. Давайте еще раз выведем на печать наш DataFrame. Так. Видим, что здесь этих изменений нет. Почему это произошло? Ну потому что команда append, на самом деле, работает не inplace, то есть она никак не изменяет наш исходный DataFrame. Она вносит нужные изменения и возвращает нам его копию. Если же мы хотим, чтобы наш DataFrame изменился, то нужно немножечко модифицировать нашу команду. Ну опять же, как вариант можно сделать вот так. Тогда, если мы снова выведем на печать наш DataFrame, то увидим, что он изменился. Действительно добавилась новая строчка. Теперь давайте добавим новые столбцы. Это делается довольно просто, потому что наш DataFrame можно представлять себе как такой словарь Series. Если мы добавляем новый объект к словарю, то как мы делаем? Мы просто указываем значение нового ключа и добавляем объект. Вот давайте здесь поступим по аналогии. Итак, пишем его название. И дальше более-менее случайно давайте его заполним. [ПЕЧАТАЕТ] Итак, готово. Выводим наш DatаFrame на экран и видим, что добавился новый столбец. Так, с добавлением более-менее разобрались. Теперь давайте что-нибудь удалим. Ну сначала можно удалить некоторые строчки. Вот давайте последние две строки удалим. Для этого существует команда drop. Сначала указываем, какие именно объекты мы удаляем. Если мы удаляем строчки, то нам нужно указывать название индекса. Ну то есть названия этой оси. Так, ну вот смотрим: давайте удалим две последних строки, у них номера 5 и 6. Указываем, что эти номера мы указываем по оси 0, и запускаем. Видим, что наш DataFrame стал на 2 строки короче. Но в drop есть такая же особенность, как и у функции append. Она тоже работает не inplace. Поэтому если мы еще раз выведем на экран наш DataFrame, то мы обнаружим, что все строчки на месте. Чтобы это поправить, нужно в предыдущей команде добавить аргумент inplace = True. Но если мы действительно хотим удалить эти строчки из исходного DataFrame. Итак, запускаем и проверяем: действительно строчки удалились. Аналогично можно удалить столбцы. Здесь нам снова понадобится функция drop. Только в данном случае нам нужно будет обращаться уже не к индексам, а к именам наших столбцов. Вот давайте удалим тот столбец, который мы с вами недавно создали. Мы обращаемся к нему по имени. Так, только обратиться нужно правильно, иначе ничего не получится. Так, дальше указываем, что мы работаем с осью 1. Ну и давайте тоже сделаем это сразу inplace. [ПЕЧАТАЕТ] Так, готово. Выводим наш DataFrame на экран и видим, что все получилось. Наш столбец пропал. Часто, после того, как мы проделываем какие-то манипуляции с DataFrame, например чистим данные, добавляем новые столбцы, вычисляем какие-то новые значения, нам хочется сохранить результат в виде файла, чтобы в дальнейшем с ним работать. Pandas позволяет нам сделать это с помощью простого метода. Он называется to_csv. Давайте запишем наш новый получившийся DataFrame в файл. Для этого вызываем эту функцию — to_csv. И давайте теперь аккуратненько запишем, заполним ее аргументы. Для начала нужно написать название файла, в который мы хотим сохранить наш DataFrame. [ПЕЧАТАЕТ] Ну давайте придумаем какое-нибудь простое название — updated_dataset. Дальше у нас есть очень много свободы в том, как именно мы будем сохранять наш файл. Например, мы можем выбрать другой сепаратор, не тот, который был изначально. Вот давайте для разнообразия теперь укажем запятую. Дальше мы можем решать, хотим ли мы оставить header в нашем файле. Ну давайте оставим. Напишем header = True. И то же самое можно сделать с индексами. В данном случае индекс нам не очень полезен, поэтому давайте записывать его не будем. Напишем, что индекс нам не нужен. Так, запускаем команду. И теперь давайте убедимся, что наш файл выглядит именно так, как мы ожидаем, — наш DataFrame через запятую, с заголовком и без индекса. Сделаем это с помощью команды cat. Так, теперь нужно написать название нашего файла: updated_ dataset.csv. Так, значит, где-то мы опечатались. Так. Ну вот так получше. Видим, что действительно в первой строчке идут header, дальше идет наша таблица, все данные через запятую. Ровно то, что мы хотели. На этом мы заканчиваем наше первое знакомство с Pandas. А на следующем видео мы продолжим говорить о DataFrame. Мы изучим еще несколько полезных функций и научимся работать с индексами. Также мы будем делать выборки из таблиц.

Часть: Библиотеки 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