воскресенье, 23 октября 2016 г.

Чтение данных из файлов

Урок: Чтение данных из файлов

Транскрибация урока: На этом видео мы начнем говорить о работе с файлами в Python. Часто для анализа нам требуется использовать данные, хранящиеся в некотором внешнем файле. Это может быть электронная таблица, простой текстовый документ, html-документ — любой, доступный для хранения данных, формат. Для этого Python предоставляет нам целый ряд разнообразных инструментов. Мы с вами начнем с простого и изучим встроенную функцию open. Если вы встречаетесь с некоторой функцией в первый раз, то полезно почитать ее Docstring. Это делается с помощью вопросительного знака. Набираем вопросительный знак и имя функции — внизу экрана открывается Docstring. Мы можем увидеть, что функция принимает три аргумента: это name, mode и buffering. Нас будут интересовать первые два из них. Аргумент name отвечает за название файла, который мы хотим открыть. Если файл лежит в той же директории, что и IPython, то можно просто написать его имя. Если же он в другой директории, то придется прописать путь. Mode отвечает за то, каким образом мы хотим работать с файлом. Если мы не планируем делать никаких изменений, а, например, просто хотим прочитать содержимое файла или прочитать его в какой-то контейнер, то нам подойдет режим для чтения. В этом случае мы не сможем изменять сам файл, но тем не менее мы сможем его читать. Если мы хотим перезаписать существующий файл или записать новый, то нам нужен режим для записи. Если же мы хотим взять существующий файл и как-то его модифицировать, ну например добавить какие-то строчки в его конец, то нам подойдет режим append — режим для добавления данных в конец. Итак, мы с вами будем решать довольно простую задачу: мы возьмем файл, откроем его и выведем его содержимое на экран. Тогда нам подойдет режим для чтения. Итак, давайте зададим новый объект, назовем его file_object, и с помощью функции open откроем файл. [ПЕЧАТАЕТ] Далее, если мы хотим открывать файл в режиме для чтения, то нам необязательно указывать mode, потому что по умолчанию файл открывается в режиме для чтения. Но давайте мы его укажем, для того чтобы это было явно видно. Итак, мы создали наш объект, давайте теперь посмотрим, какой у него тип. Это делается с помощью команды type. Итак, мы видим, что тип нашего объекта действительно file. Теперь давайте выведем его на экран — это можно сделать с помощью функции read. [ПЕЧАТАЕТ] Мы видим, что наш файл состоит из трех строк, все эти строчки на русском языке. Часто нам бывает удобно считывать файл не полностью, а, например, считывать его по строкам. В частности, если у нас большой файл, нам бывает интересно просто почитать, как он начинается, прочесть несколько первых строк, а весь текст файла нам не нужен. В этом случае бывает удобно воспользоваться функцией readline. Для начала нам снова придется открыть файл для чтения. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] А далее давайте вызовем функцию readline. [ПЕЧАТАЕТ] И видим, что у нас вывелась на экран только первая строка. А повторный вызов данной функции приведет к печати следующей строки. Давайте посмотрим. [ПЕЧАТАЕТ] Если продолжать процедуру, то мы таким образом можем дойти до конца файла. Вот вывод пустой строки на экран обозначает конец файла. Но, на самом деле, для того чтобы обращаться к файлу построчно, нам совсем необязательно пользоваться такими функциями, как read и readline — мы можем обращаться с файлом как с обычным генератором. Вот давайте посмотрим, как это выглядит. Снова откроем файл. [ПЕЧАТАЕТ] А дальше просто, с помощью цикла for, давайте этот файл обойдем и выведем на экран каждую его строчку. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] Обращаю внимание, что мы используем здесь новую функцию — это функция strip. Она помогает отрезать нам от конца каждой строки пробельные символы — это могут быть пробелы, знаки табуляции, а также знаки переноса строки. Итак, вызываем функцию и видим, что наш файл также напечатался построчно. Часто мы хотим работать со строчками файла как с массивом. Что имеется в виду? У нас есть файл, который состоит из нескольких строк, и мы хотим создать список, каждый элемент которого соответствует отдельной строке файла. Часто это бывает удобно. Это также можно сделать несколькими способами. Первый способ самый простой — изменить тип объекта file на список и просто работать с ним как со списком. Давайте это сделаем. Создадим объект data_list — список, и просто с помощью команды list сделаем наш файл объектом типа «список». Снова открываем файл для чтения. [ПЕЧАТАЕТ] И получаем наш список. Теперь давайте выведем содержимое списка на экран, чтобы убедиться, что каждый элемент соответствует отдельной строчке. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] Итак, видим, что результат снова нас удовлетворяет. Мы построчно вывели файл на экран. Второй способ — это использование функции readlines, она возвращает список строк нашего файла. [ПЕЧАТАЕТ] Уже привычным нам способом открываем файл. [ПЕЧАТАЕТ] И далее, с помощью функции readlines, создаем новый список. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] Итак, список готов, теперь снова давайте его напечатаем. [ПЕЧАТАЕТ] [ПЕЧАТАЕТ] Итак, готово. Соответственно, теперь вы можете выбирать тот способ, который вам больше нравится: использование функции readlines или просто работа с файлом как со списком. Когда мы закончили работу с файлом, файл нужно закрыть. Это делается с помощью команды close. Это полезно сразу по нескольким причинам. Первая причина — мы освобождаем ресурсы, которые используются системой на чтение и поддержку нашего файла. Вторая причина — это так называемая безопасная работа с файлом. После того как мы файл закрыли, мы уже не можем его читать, не можем вносить в него изменения. Таким образом, наш файл в какой-то степени защищен от каких-то незапланированных действий или ошибок. Давайте посмотрим, как это работает. Если мы сначала открыли файл, например, открываем его снова для чтения. Возьмем тот же самый файл. Дальше мы вызвали функцию, которая его закрывает — функция close. [ПЕЧАТАЕТ] И дальше, например, давайте попробуем его прочесть, после того как мы его закрыли. Это должно привести к ошибке, потому что мы пытаемся прочитать уже закрытый файл. И действительно, мы видим, что операция такая невозможна, потому что мы пытаемся прочитать закрытый файл. Итак, мы с вами уже научились читать файл и делать это несколькими способами. На самом деле, все это время мы работали с файлом в кодировке utf8, это можно было понять из названия. В жизни это не всегда так, и часто нам приходится работать с данными в разных кодировках. Давайте теперь попробуем открыть файл в кодировке koi_8-r — это русскоязычная кириллица. Для начала попробуем поступить аналогичным образом. Используем функцию open. Создаем объект file и пытаемся прочитать его, после чего — вывести его на экран. [ПЕЧАТАЕТ] Теперь вызываем метод read. [ПЕЧАТАЕТ] И видим, что наш файл выглядит не совсем так, как нам хотелось. Давайте добавим функцию print и убедимся в этом. Вот видите, появились какие-то не очень симпатичные символы. Это говорит о том, что у нас есть проблемы с этой кодировкой. Для того чтобы напечатать этот файл красиво, нужно каким-то образом указать, что мы используем кодировку utf8. Ну на самом деле, сделать это можно разными способами. Один из самых простых — это использовать библиотеку Codecs. Давайте на нее посмотрим. [ПЕЧАТАЕТ] Для начала ее нужно импортировать. Это делается с помощью ключевого слова import. [ПЕЧАТАЕТ] А теперь давайте читать файл. На самом деле, библиотека Codecs предоставляет нам похожую функцию open. У нее схожий синтаксис, только нам можно указать еще дополнительные параметры, например кодировку. Вот давайте это сделаем. Снова создадим объект file, назовем его file_object. И теперь уже с помощью функции open из модуля Codecs будем его читать. Передаем туда название файла. И теперь давайте добавим новый параметр encoding, или кодировка. [ПЕЧАТАЕТ] Так, файл мы прочли. Теперь давайте выведем его на экран, ожидая, что теперь у нас не будет проблем с выводом. [ПЕЧАТАЕТ] Итак, мы видим, что теперь файл выводится корректно. Это происходит, потому что мы открыли его в правильной кодировке. На этом мы заканчиваем знакомство с чтением данных. На следующем видео мы также будем говорить про работу с файлами, но уже будем учиться файл записывать.

Часть: Знакомство с синтаксисом 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