Книга Уэса Маккинни «Python и анализ данных»

python-dataНедавно в нашей группе во Вконтакте мне задали вопрос о том, какие книги я могу посоветовать про применение Python в научных исследованиях. Как раз в это время я собирался начинать читать книгу Уэса Маккинни «Python и анализ данных» и пообещал, что о ней будет отзыв в блоге. Сегодня я выполняю это обещание.

Когда речь заходит про языки программирования для научных вычислений, то обычно вспоминают MATLAB, а в последнее время все больше появляется упоминаний языка R, который в первую очередь ориентирован на статистические расчеты. При этом Python с некоторыми библиотеками вроде NumPy и matplotlib отлично подходит для научных расчетов и во многих случаях могут успешно заменить MATLAB, который, к тому же, является достаточно дорогой программой, а Python и все упомянутые в книге библиотеки являются с вободными и вы можете их скачать без угрызения совести. Это здорово, что на русском языке вышла подобная книга (на английском языке книги про научные вычисления на Python мне попадались).

Сразу хочу предупредить, что «Python и анализ данных» — это описание инструментов, а не алгоритмов, про алгоритмы я могу посоветовать книги «Программируем коллективный разум» и «Алгоритмы интеллектуального интернета». Уэс Маккинни, автор книги «Python и анализ данных», является создателем известной библиотеки для обработки временных и табличных данных pandas, поэтому не удивительно, что большая часть книги посвящена этой библиотеке,

В этой книге Уэс описывает основные возможности нескольких инструментов и библиотек, которые предназначены для анализа и обработки данных: IPython, библиотеки NumPy, matplotlib и, конечно, pandas.

Книга начинается с примеров, которые должны продемонстрировать легкость извлечения полезной информации из набора данных с помощью описываемых далее библиотек. Примеры любопытные, но поскольку описание библиотеки pandas будет идти только в последующих главах (и автор предупреждает о том, что не страшно, если код пока не понятен), то при чтении этой главы больше обращаешь внимание на результаты, а не на текст программ, поэтому стоит к этой главе вернуться еще раз после прочтения книги.

Одна из глав посвящена такому замечательному инструменту как IPython. В ней автор описывает отличия консоли IPython от стандартной консоли Python, рассказывает про использование отладчика и про работу с IPython в режиме блокнота, т.е. когда код пишется в браузере и тут же виден результат, включая графики.

jupyter

Этот режим чем-то напоминает MathCAD, но более удобный для программирования (хотя математики, которые хотят видеть интегралы, а не циклы, со мной могут не согласиться). Надо сказать, что со времени выхода английской версии книги в 2013 году кое-что поменялось, и блокноты IPython перекочевали в отдельный проект Jupyter. До этого я слышал про блокноты IPython, но воспринимал это скорее как игрушку или средство для оформления кода для демонстрации, а попробовав его на деле, оказалось, что это очень удобный инструмент для постепенного написания скриптов и отладки его по частям.

При описании библиотек автор часто предупреждает, что какие-то моменты могут измениться уже в момент выхода книги в печать (а на русском языке книга вышла на два года позже оригинала), ведь новые версии библиотек выходят достаточно часто. Например, последняя на данный момент версия pandas (0.17.1) вышла в ноябре этого года, а следующая версия (0.18) ожидается в январе следующего года. Хотя те изменения, о которых предупреждает автор, не ломают обратную совместимость.

Разумеется, в книге с таким названием автор не мог обойти стороной NumPy — библиотеку, которая является основой для многих других библиотек для научных вычислений, в первую очередь из-за того, что работает очень быстро, поскольку написана на языках C и Fortran (когда-то я пытался продраться через исходники NumPy, чтобы посмотреть, как реализована одна математическая функция, и ужаснулся). Я бы не назвал эту книгу подробным справочником по NumPy, но основные идеи и операции в ней описаны. Библиотеке NumPy посвящены две главы — в начале с основными возможностями и ближе к концу, в которой автор углубляется в работу самой библиотеки и рассказывает о том, как NumPy хранит данные в памяти, как это сказывается на производительности, как создавать собственные функции, которые могут принимать как одиночные значения, так и массивы (в терминах NumPy — u-функции). Там же коротко рассказывается про отличие массивов NumPy от матриц с предупреждением о том, что матрицы стоит использовать лишь там, где требуется много матричных операций (перемножение матриц, взятие обратных матриц и т.п.), в основном, чтобы сократить код, но по возможности лучше использовать массивы.

Одна глава посвящена библиотеке Matplotlib. Описание ее не особо подробное, но если вы до этого не пользовались этой библиотекой, то книга подтолкнет к ее освоению.

Но все-таки большая часть книги посвящена библиотеке pandas, что не удивительно, учитывая, что Уэс Маккинни является ее создателем и развивает ее, начиная с 2008 года. Этой библиотеке посвящены сразу несколько глав. В первой из них автор рассказывает про основные классы Series и DataView, про то, как могут индексироваться временные ряды, как строятся двумерные таблицы. Остальные главы посвящены переупорядочиванию данных и их обработке.

Еще одна глава рассказывает про чтение и запись файлов в различных форматах. Здесь описаны способы чтения/записи данных в таких форматах как CSV (Comma-Separated Values, значения, разделенные запятыми, хотя это совсем не обязательно), XML, JSON и даже упоминаются библиотеки для работы с форматом HDF5, специально разработанным для хранения больших иерархических данных для научных расчетов, с которым можно работать как из библиотеки pandas, так и с помощью других библиотек.

В книге достаточно подробно описаны возможности pandas для работы с временными данными (когда в качестве индекса используются даты или временные отсчеты), в том числе методы из библиотеки pandas, которые позволяют изменять дискрет (частоту следования) данных, используя различные интерполяции, или лучше сказать заполнения, работу с датами с учетом временных поясов и применение оконных функций.

Как я понял, автора книги больше интересует обработка экономических данных, поэтому многие примеры демонстрируются на данных, связанными с акциями, их котировками (до сих пор не понимаю, при чем тут котики) и тому подобными вещами. Обработке экономических данных посвящена целая глава, которую я прочитал по диагонали, поскольку я очень далек от это темы, и для меня экономисты и бухгалтеры — это странные люди, живущие в своем мире, мало пересекающемся с нашим. Одно то, что они новый финансовый год празднуют не 1 января, а когда хотят, о многом говорит. Библиотека pandas, кстати, это тоже может учитывать. Может быть вам, в отличие от меня, что-нибудь скажут такие термины как «средневзвешенная по объему цена», «индекс доходности» и «кумулятивная доходность» акций. Эти умные слова взяты из примеров книги. К счастью, большинство примеров вычисляют что-то более понятное простому смертному.

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

Подводя итоги, можно сказать, что книга полезная, она дает базовые знания об описанных библиотеках для Python, но жаль, что в книге совсем ничего не говорится об алгоритмах, потому что описания методов можно прочитать в документации. И если уж совсем придираться, то в книге попадается достаточно много опечаток вроде несогласованных окончаний русский языка.

В результате я бы поставил книге твердую четверку. Не сказал, что она меня сильно впечатлила, но меня она заинтересовала проектом IPython и Jupyter и дала понять, как использовать pandas без блуждания по документации. Свою задачу по ознакомлению читателей с библиотеками книга выполняет отлично.

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 8, средняя оценка: 4,63)
Загрузка...

Один комментарий

  1. Артур:

    Спасибо за обзор

Leave a comment

Subscribe without commenting