Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Python и анализ данных

Покупка
Артикул: 680760.02.99
К покупке доступен более свежий выпуск Перейти
Книгу можно рассматривать как современное практическое введение в разработку научных приложений на Python, ориентированных на обработку данных. Описаны те части языка Python и библиотеки для него, которые необходимы для эффективного решения широкого круга аналитических задач: интерактивная оболочка IPython, библиотеки NumPy и pandas, библиотека для визуализации данных matplotlib и др. Издание идеально подойдет как аналитикам, только начинающим осваивать обработку данных, так и опытным программистам на Python, еще не знакомым с научными приложениями.
Маккинни, У. Маккинли, У. Python и анализ данных / Уэс Маккинли ; пер. с англ. А.А. Слинкина. - Москва : ДМК Пресс, 2015. - 482 с. - ISBN 978-5-97060-315-4. - Текст : электронный. - URL: https://znanium.ru/catalog/product/1027796 (дата обращения: 23.06.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Уэс Маккинли

Python  
и анализ данных

Python for Data Analysis

Wes McKinney

Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo

Москва, 2015

Python и анализ данных

Уэс Маккинли

УДК  004.438Python:004.6
ББК   32.973.22

М15

М15   Уэс Маккинли

Python и анализ данных / Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 
2015. – 482 с.: ил.

ISBN 978-5-97060-315-4

Книгу можно рассматривать как современное практическое введение в 

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

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

                                                                                      УДК   004.438Python:004.6
                                                                             ББК  32.973.22

Original English language edition published by O’Reilly Media, Inc., 1005 Gravenstein 

Highway North, Sebastopol, CA 95472. Copyright © 2013 O’Reilly Media, Inc. Russianlanguage edition copyright © 2015 by DMK Press. All rights reserved.

Все права защищены. Любая часть этой книги не может быть воспроизведена 

в какой бы то ни было форме и какими бы то ни было средствами без письменного 
разрешения владельцев авторских прав.

Материал, изложенный в данной книге, многократно проверен. Но, поскольку 

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

ISBN 978-1-449-31979-3 (англ.)                         Copyright © 2013 Wes McKinney.
ISBN 978-5-97060-315-4 (рус.)                           © Оформление, перевод на русский язык, 

                      издание, ДМК Пресс, 2015

оглавление

Предисловие..................................................................12
Графические выделения ....................................................................... 12

Глава.1..Предварительные.сведения...................................13
О чем эта книга? ................................................................................... 13
Почему именно Python? ........................................................................ 14
Python как клей ............................................................................................. 14
Решение проблемы «двух языков» ................................................................ 15
Недостатки Python ....................................................................................... 15
Необходимые библиотеки для Python ........................................................... 16
NumPy .......................................................................................................... 16
pandas.......................................................................................................... 16
matplotlib ...................................................................................................... 17
IPython ......................................................................................................... 17
SciPy ............................................................................................................ 18
Установка и настройка .......................................................................... 18
Windows ....................................................................................................... 19
Apple OS X .................................................................................................... 21
GNU/Linux .................................................................................................... 22
Python 2 и Python 3 ....................................................................................... 23
Интегрированные среды разработки (IDE) ................................................... 24
Сообщество и конференции ................................................................. 24
Структура книги .................................................................................... 25
Примеры кода .............................................................................................. 25
Данные для примеров .................................................................................. 25
Соглашения об импорте ............................................................................... 25
Жаргон ......................................................................................................... 26
Благодарности ..................................................................................... 26

Глава.2..Первые.примеры.................................................28
Набор данных 1.usa.gov с сайта bit.ly .................................................... 28
Подсчет часовых поясов на чистом Python ................................................... 30
Подсчет часовых поясов с помощью pandas ................................................. 32
Набор данных MovieLens 1M ................................................................. 38
Измерение несогласия в оценках ................................................................. 42
Имена, которые давали детям в США за период с 1880 по 2010 год ...... 43
Анализ тенденций в выборе имен ................................................................. 48
Выводы и перспективы ......................................................................... 56

Оглавление

Глава.3..IPython:.интерактивные.вычисления.и.среда.
разработки.....................................................................57
Основы IPython ..................................................................................... 58
Завершение по нажатию клавиши Tab .......................................................... 59
Интроспекция .............................................................................................. 60
Команда %run .............................................................................................. 61
Исполнение кода из буфера обмена ............................................................. 63
Комбинации клавиш ..................................................................................... 64
Исключения и обратная трассировка ........................................................... 65
Магические команды.................................................................................... 66
Графическая консоль на базе Qt ................................................................... 68
Интеграция с matplotlib и режим pylab .......................................................... 68
История команд .................................................................................... 70
Поиск в истории команд и повторное выполнение ........................................ 70
Входные и выходные переменные ................................................................ 71
Протоколирование ввода-вывода ................................................................ 72
Взаимодействие с операционной системой ......................................... 73
Команды оболочки и псевдонимы ................................................................ 73
Система закладок на каталоги...................................................................... 75
Средства разработки программ ........................................................... 75
Интерактивный отладчик .............................................................................. 75
Хронометраж программы: %time и %timeit ................................................... 80
Простейшее профилирование: %prun и %run -p ........................................... 82
Построчное профилирование функции ........................................................ 83
HTML-блокнот в IPython ........................................................................ 86
Советы по продуктивной разработке кода с использованием IPython ... 86
Перезагрузка зависимостей модуля ............................................................ 87
Советы по проектированию программ ......................................................... 88
Дополнительные возможности IPython ................................................. 90
Делайте классы дружественными к IPython .................................................. 90
Профили и конфигурирование ..................................................................... 90
Благодарности ..................................................................................... 92

Глава.4..Основы.NumPy:.массивы.и.векторные.вычисления....93
NumPy ndarray: объект многомерного массива ..................................... 94
Создание ndarray ......................................................................................... 95
Тип данных для ndarray ................................................................................. 97
Операции между массивами и скалярами ...................................................100
Индексирование и вырезание .....................................................................100
Булево индексирование ..............................................................................104
Прихотливое индексирование .....................................................................107
Транспонирование массивов и перестановка осей ......................................108
Универсальные функции: быстрые поэлементные операции  
над массивами ...............................................................................................109
Обработка данных с применением массивов ...................................... 112
Запись логических условий в виде операций с массивами ..........................113

Оглавление

Математические и статистические операции ..............................................115
Методы булевых массивов ..........................................................................116
Сортировка .................................................................................................117
Устранение дубликатов и другие теоретико-множественные операции.......118
Файловый ввод-вывод массивов ........................................................ 119
Хранение массивов на диске в двоичном формате ......................................119
Сохранение и загрузка текстовых файлов ...................................................120
Линейная алгебра ............................................................................... 121
Генерация случайных чисел ................................................................ 122
Пример: случайное блуждание ....................................................................123
Моделирование сразу нескольких случайных блужданий ............................125

Глава.5..Первое.знакомство.с.pandas................................127
Введение в структуры данных pandas ................................................. 128
Объект Series ..............................................................................................128
Объект DataFrame .......................................................................................131
Индексные объекты.....................................................................................137
Базовая функциональность................................................................. 139
Переиндексация .........................................................................................139
Удаление элементов из оси .........................................................................142
Доступ по индексу, выборка и фильтрация ..................................................143
Арифметические операции и выравнивание данных ...................................146
Применение функций и отображение ..........................................................150
Сортировка и ранжирование .......................................................................151
Индексы по осям с повторяющимися значениями .......................................154
Редукция и вычисление описательных статистик ................................ 155
Корреляция и ковариация ...........................................................................158
Уникальные значения, счетчики значений и членство ..................................160
Обработка отсутствующих данных ...................................................... 162
Фильтрация отсутствующих данных ............................................................163
Иерархическое индексирование ......................................................... 166
Уровни переупорядочения и сортировки .....................................................169
Сводная статистика по уровню ....................................................................170
Работа со столбцами DataFrame ..................................................................170
Другие возможности pandas ............................................................... 172
Доступ по целочисленному индексу ............................................................172
Структура данных Panel ...............................................................................173

Глава.6..Чтение.и.запись.данных,.форматы.файлов.............175
Чтение и запись данных в текстовом формате .................................... 175
Чтение текстовых файлов порциями ...........................................................181
Вывод данных в текстовом формате............................................................182
Ручная обработка данных в формате с разделителями ................................184
Данные в формате JSON .............................................................................186
XML и HTML: разбор веб-страниц ................................................................188
Разбор XML с помощью lxml.objectify ...........................................................190
Двоичные форматы данных .........................................................................192

Оглавление

Взаимодействие с HTML и Web API ..............................................................194
Взаимодействие с базами данных ...................................................... 196
Чтение и сохранение данных в MongoDB .....................................................198

Глава.7..Переформатирование.данных:.очистка,.
преобразование,.слияние,.изменение.формы....................199
Комбинирование и слияние наборов данных ...................................... 199
Слияние объектов DataFrame как в базах данных .........................................200
Слияние по индексу ....................................................................................204
Конкатенация вдоль оси ..............................................................................207
Комбинирование перекрывающихся данных ...............................................211
Изменение формы и поворот .............................................................. 212
Изменение формы с помощью иерархического индексирования ................213
Поворот из «длинного» в «широкий» формат ...............................................215
Преобразование данных ..................................................................... 217
Устранение дубликатов ...............................................................................217
Преобразование данных с помощью функции или отображения .................218
Замена значений.........................................................................................220
Переименование индексов осей .................................................................221
Дискретизация и раскладывание ................................................................222
Обнаружение и фильтрация выбросов ........................................................224
Перестановки и случайная выборка ............................................................226
Вычисление индикаторных переменных ......................................................227
Манипуляции со строками .................................................................. 229
Методы строковых объектов .......................................................................230
Регулярные выражения ...............................................................................232
Векторные строковые функции в pandas .....................................................235
Пример: база данных о продуктах питания министерства сельского 
хозяйства США ................................................................................... 237

Глава.8..Построение.графиков.и.визуализация...................244
Краткое введение в API библиотеки matplotlib ..................................... 245
Рисунки и подграфики .................................................................................246
Цвета, маркеры и стили линий ....................................................................249
Риски, метки и надписи ...............................................................................251
Аннотации и рисование в подграфике .........................................................254
Сохранение графиков в файле ....................................................................256
Конфигурирование matplotlib ......................................................................257
Функции построения графиков в pandas ............................................. 258
Линейные графики ......................................................................................258
Столбчатые диаграммы...............................................................................260
Гистограммы и графики плотности ..............................................................264
Диаграммы рассеяния ................................................................................266
Нанесение данных на карту: визуализация данных о землетрясении  
на Гаити .............................................................................................. 267
Инструментальная экосистема визуализации для Python ................... 273

Оглавление

Chaco ..........................................................................................................274
mayavi .........................................................................................................274
Прочие пакеты ............................................................................................275
Будущее средств визуализации ..................................................................275

Глава.9..Агрегирование.данных.и.групповые.операции.........276
Механизм GroupBy ............................................................................. 277
Обход групп ................................................................................................280
Выборка столбца или подмножества столбцов ............................................281
Группировка с помощью словарей и объектов Series ...................................282
Группировка с помощью функций ................................................................284
Группировка по уровням индекса ................................................................284
Агрегирование данных ........................................................................ 285
Применение функций, зависящих от столбца, и нескольких функций ..........287
Возврат агрегированных данных в «неиндексированном» виде ...................289
Групповые операции и преобразования .............................................. 290
Метод apply: часть общего принципа разделения–применения– 
объединения ...............................................................................................292
Квантильный и интервальный анализ ..........................................................294
Пример: подстановка зависящих от группы значений вместо  
отсутствующих ............................................................................................296
Пример: случайная выборка и перестановка ...............................................297
Пример: групповое взвешенное среднее и корреляция...............................299
Пример: групповая линейная регрессия .....................................................301
Сводные таблицы и кросс-табуляция .................................................. 302
Таблицы сопряженности .............................................................................304
Пример: база данных федеральной избирательной комиссии за 2012 год ....305
Статистика пожертвований по роду занятий и месту работы .......................308
Распределение суммы пожертвований по интервалам ................................311
Статистика пожертвований по штатам ........................................................313

Глава.10..Временные.ряды..............................................316
Типы данных и инструменты, относящиеся к дате и времени .............. 317
Преобразование между строкой и datetime .................................................318
Основы работы с временными рядами ............................................... 321
Индексирование, выборка, подмножества ..................................................322
Временные ряды с неуникальными индексами ............................................324
Диапазоны дат, частоты и сдвиг .......................................................... 325
Генерация диапазонов дат ..........................................................................325
Частоты и смещения дат .............................................................................326
Сдвиг данных (с опережением и с запаздыванием) .....................................329
Часовые пояса .................................................................................... 331
Локализация и преобразование ..................................................................332
Операции над объектами Timestamp с учетом часового пояса ....................333
Операции между датами из разных часовых поясов ....................................334
Периоды и арифметика периодов ...............................................................335
Преобразование частоты периода ..............................................................336

Оглавление

Квартальная частота периода .....................................................................337
Преобразование временных меток в периоды и обратно ............................339
Создание PeriodIndex из массивов ..............................................................340
Передискретизация и преобразование частоты.................................. 341
Понижающая передискретизация ...............................................................342
Повышающая передискретизация и интерполяция .....................................345
Передискретизация периодов ....................................................................346
Графики временных рядов .................................................................. 348
Скользящие оконные функции ............................................................ 350
Экспоненциально взвешенные функции ......................................................353
Бинарные скользящие оконные функции .....................................................353
Скользящие оконные функции, определенные пользователем ....................355
Замечания о быстродействии и потреблении памяти ......................... 356

Глава.11..Финансовые.и.экономические.приложения..........358
О переформатировании данных ......................................................... 358
Временные ряды и выравнивание срезов ....................................................358
Операции над временными рядами с различной частотой ..........................361
Время суток и выборка данных «по состоянию на» ......................................364
Сращивание источников данных .................................................................366
Индексы доходности и кумулятивная доходность ........................................368
Групповые преобразования и анализ .................................................. 370
Оценка воздействия групповых факторов ...................................................372
Децильный и квартильный анализ ...............................................................373
Другие примеры приложений ............................................................. 375
Стохастический граничный анализ ..............................................................375
Роллинг фьючерсных контрактов.................................................................377
Скользящая корреляция и линейная регрессия ...........................................380

Глава.12..Дополнительные.сведения.о.библиотеке.NumPy....383
Иерархия типов данных в NumPy .................................................................384
Дополнительные манипуляции с массивами ....................................... 385
Изменение формы массива ........................................................................385
Упорядочение элементов массива в C и в Fortran ........................................387
Конкатенация и разбиение массива ............................................................388
Повторение элементов: функции tile и repeat ..............................................390
Эквиваленты прихотливого индексирования: функции take и put .................391
Укладывание ....................................................................................... 393
Укладывание по другим осям ......................................................................394
Установка элементов массива с помощью укладывания ..............................397
Дополнительные способы использования универсальных функций .... 398
Методы экземпляра u-функций ...................................................................398
Пользовательские u-функции ......................................................................400
Структурные массивы ......................................................................... 401
Вложенные типы данных и многомерные поля ............................................402
Зачем нужны структурные массивы? ...........................................................403

Оглавление

Манипуляции со структурными массивами: numpy.lib.recfunctions ..............403
Еще о сортировке ............................................................................... 403
Косвенная сортировка: методы argsort и lexsort ..........................................405
Альтернативные алгоритмы сортировки ......................................................406
Метод numpy.searchsorted: поиск элементов в отсортированном массиве ....407
Класс matrix в NumPy ...................................................................................408
Дополнительные сведения о вводе-выводе массивов ........................ 410
Файлы, спроецированные на память ...........................................................410
HDF5 и другие варианты хранения массива .................................................412
Замечание о производительности ...................................................... 412
Важность непрерывной памяти ...................................................................412
Другие возможности ускорения: Cython, f2py, C ..........................................414

Приложение. Основы.языка.Python..................................415
Интерпретатор Python ........................................................................ 416
Основы ............................................................................................... 417
Семантика языка .........................................................................................417
Скалярные типы ..........................................................................................425
Поток управления........................................................................................431
Структуры данных и последовательности ........................................... 437
Список ........................................................................................................439
Встроенные функции последовательностей ................................................443
Словарь ......................................................................................................445
Множество ..................................................................................................448
Списковое, словарное и множественное включение ...................................450
Функции ............................................................................................. 452
Пространства имен, области видимости и локальные функции ...................453
Возврат нескольких значений .....................................................................454
Функции являются объектами .....................................................................455
Анонимные (лямбда) функции .....................................................................456
Замыкания: функции, возвращающие функции ...........................................457
Расширенный синтаксис вызова с помощью *args и **kwargs ......................459
Каррирование: частичное фиксирование аргументов..................................459
Генераторы ......................................................................................... 460
Генераторные выражения ............................................................................462
Модуль itertools ...........................................................................................462
Файлы и операционная система ......................................................... 463

Предметный.указатель...................................................466

Предисловие

За последние 10 лет вокруг языка Python образовалась и активно развивается целая 
экосистема библиотек с открытым исходным кодом. К началу 2011 года у меня сложилось стойкое ощущение, что нехватка централизованных источников учебных 
материалов по анализу данных и математической статистике становится камнем 
преткновения на пути молодых программистов на Python, которым такие приложения нужны по работе. Основные проекты, связанные с анализом данных (в особенности NumPy, IPython, matplotlib и pandas), к тому времени стали уже достаточно 
зрелыми, чтобы про них можно было написать книгу, которая не устареет сразу после выхода. Поэтому я набрался смелости заняться этим делом. Я был бы очень рад, 
если бы такая книга существовала в 2007 году, когда я приступал к использованию 
Python для анализа данных. Надеюсь, вам она окажется полезной, и вы сумеете с 
успехом воспользоваться описываемыми инструментами в собственной работе.
Графические.выделения

В книге применяются следующие графические выделения:
Курсив
Новые термины, URL-адреса, адреса электронной почты, имена и расширения имен файлов.

Моноширинный
Листинги программ, а также элементы кода в основном тексте: имена переменных и функций, базы данных, типы данных, переменные окружения, предложения и ключевые слова языка.

Моноширинный полужирный
Команды или иной текст, который должен быть введен пользователем буквально.

Моноширинный курсив
Текст, вместо которого следует подставить значения, заданные пользователем или определяемые контекстом.

    Так обозначается совет, рекомендация или замечание общего характера.

    Так обозначается предупреждение или предостережение. 

глава 1. 

Предварительные сведения

О.чем.эта.книга?

Эта книга посвящена вопросам преобразования, обработки, очистки данных и 
вычислениям на языке Python. Кроме того, она представляет собой современное 
практическое введение в научные и инженерные расчеты на Python, ориентированное на приложения для обработки больших объемов данных. Это книга о тех 
частях языка Python и написанных для него библиотек, которые необходимы для 
эффективного решения широкого круга задач анализа данных. Но в ней вы не найдете объяснений аналитических методов с привлечением Python в качестве языка 
реализации.
Говоря «данные», я имею в виду, прежде всего, структурированные данные; это 
намеренно расплывчатый термин, охватывающий различные часто встречающиеся виды данных, как то:
• многомерные списки (матрицы);
• табличные данные, когда данные в разных столбцах могут иметь разный 
тип (строки, числа, даты или еще что-то). Сюда относятся данные, которые 
обычно хранятся в реляционных базах или в файлах с запятой в качестве 
разделителя;
• данные, представленные в виде нескольких таблиц, связанных между собой по ключевым столбцам (то, что в SQL называется первичными и внешними ключами);
• равноотстоящие и неравноотстоящие временные ряды.
Этот список далеко не полный. Значительную часть наборов данных можно 
преобразовать к структурированному виду, более подходящему для анализа и моделирования, хотя сразу не всегда очевидно, как это сделать. В тех случаях, когда 
это не удается, иногда есть возможность извлечь из набора данных структурированное множество признаков. Например, подборку новостных статей можно преобразовать в таблицу частот слов, к которой затем применить анализ эмоциональной окраски.
Большинству пользователей электронных таблиц типа Microsoft Excel, пожалуй, самого широко распространенного средства анализа данных, такие виды данных хорошо знакомы.

Глава 1. Предварительные сведения

Почему.именно.Python?

Для многих людей (и меня в том числе) Python — язык, в который нельзя не влюбиться. С момента своего появления в 1991 году Python стал одним из самых популярных динамических языков программирования наряду с Perl, Ruby и другими. Относительно недавно Python и Ruby приобрели особую популярность как 
средства создания веб-сайтов в многочисленных каркасах, например Rails (Ruby) 
и Django (Python). Такие языки часто называют скриптовыми, потому что они используются для быстрого написания небольших программ – скриптов. Лично мне 
термин «скриптовый язык» не нравится, потому что он наводит на мысль, будто 
для создания ответственного программного обеспечения язык не годится. Из всех 
интерпретируемых языков Python выделяется большим и активным сообществом 
научных расчетов. Применение Python для этой цели в промышленных и академических кругах значительно расширилось с начала 2000-х годов.
В области анализа данных и интерактивных научно-исследовательских расчетов с визуализацией результатов Python неизбежно приходится сравнивать 
со многими предметно-ориентированными языками программирования и инструментами – с открытым исходным кодом и коммерческими – такими, как R, 
MATLAB, SAS, Stata и другими. Сравнительно недавнее появление улучшенных 
библиотек для Python (прежде всего, pandas) сделало его серьезным конкурентом в решении задач манипулирования данными. В сочетании с достоинствами 
Python как универсального языка программирования это делает его отличным выбором для создания приложений обработки данных.

Python как клей

Своим успехом в качестве платформы для научных расчетов Python отчасти 
обязан простоте интеграции с кодом на C, C++ и FORTRAN. Во многих современных вычислительных средах применяется общий набор унаследованных 
библиотек, написанных на FORTRAN и C, содержащих реализации алгоритмов 
линейной алгебры, оптимизации, интегрирования, быстрого преобразования 
Фурье и других. Поэтому многочисленные компании и национальные лаборатории используют Python как «клей» для объединения написанных за 30 лет 
программ.
Многие программы содержат небольшие участки кода, на выполнение которых 
уходит большая часть времени, и большие куски «склеивающего кода», который 
выполняется нечасто. Во многих случаях время выполнения склеивающего кода 
несущественно, реальную отдачу дает оптимизация узких мест, которые иногда 
имеет смысл переписать на низкоуровневом языке типа C.
За последние несколько лет на одно из первых мест в области создания быстрых 
компилируемых расширений Python и организации интерфейса с кодом на C и 
C++ вышел проект Cython (http://cython.org).

Решение проблемы «двух языков»

Во многих организациях принято для научных исследований, создания опытных образцов и проверки новых идей использовать предметно-ориентированные 
языки типа MATLAB или R, а затем переносить удачные разработки в производственную систему, написанную на Java, C# или C++. Но все чаще люди приходят к выводу, что Python подходит не только для стадий исследования и создания 
прототипа, но и для построения самих производственных систем. Я полагаю, что 
компании все чаще будут выбирать этот путь, потому что использование одного и 
того же набора программных средств учеными и технологами несет несомненные 
выгоды организации.

Недостатки Python

Python – великолепная среда для создания приложений для научных расчетов 
и большинства систем общего назначения, но тем не менее существуют задачи, для 
которых Python не очень подходит.
Поскольку Python – интерпретируемый язык программирования, в общем случае написанный на нем код работает значительно медленнее, чем эквивалентный 
код на компилируемом языке типа Java или C++. Но поскольку время программиста обычно стоит гораздо дороже времени процессора, многих такой компромисс устраивает. Однако в приложениях, где задержка должна быть очень мала 
(например, в торговых системах с большим количеством транзакций), время, потраченное на программирование на низкоуровневом и не обеспечивающем максимальную продуктивность языке типа C++, во имя достижения максимальной 
производительности, будет потрачено не зря.
Python – не идеальный язык для программирования многопоточных приложений с высокой степенью параллелизма, особенно при наличии многих потоков, 
активно использующих процессор. Проблема связана с наличием глобальной блокировки интерпретатора (GIL) – механизма, который не дает интерпретатору исполнять более одной команды байт-кода Python в каждый момент времени. Объяснение технических причин существования GIL выходит за рамки этой книги, 
но на данный момент представляется, что GIL вряд ли скоро исчезнет. И хотя во 
многих приложениях обработки больших объектов данных для обеспечения приемлемого времени приходится организовывать кластер машин, встречаются все 
же ситуации, когда более желательна однопроцессная многопоточная система.
Я не хочу сказать, что Python вообще непригоден для исполнения многопоточного параллельного кода; просто такой код нельзя выполнять в одном процессе Python. Например, в проекте Cython реализована простая интеграция с 
OpenMP, написанной на C библиотеке параллельных вычислений, позволяющая 
распараллеливать циклы и тем самым значительно ускорять работу численных 
алгоритмов.

Почему именно Python?

Глава 1. Предварительные сведения

Необходимые библиотеки для Python

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

NumPy

NumPy, сокращение от «Numerical Python», – основной пакет для выполнения 
научных расчетов на Python. Большая часть этой книги базируется на NumPy и 
построенных поверх него библиотек. В числе прочего он предоставляет:
• быстрый и эффективный объект многомерного массива ndarray;
• функции для выполнения вычислений над элементами одного массива или 
математических операций с несколькими массивами;
• средства для чтения и записи на диски наборов данных, представленных в 
виде массивов;
• операции линейной алгебры, преобразование Фурье и генератор случайных чисел;
• средства для интеграции с кодом, написанным на C, C++ или Fortran.
Помимо быстрых средств работы с массивами, одной из основных целей NumPy 
в части анализа данных является организация контейнера для передачи данных 
между алгоритмами. Как средство хранения и манипуляции данными массивы 
NumPy куда эффективнее встроенных в Python структур данных. Кроме того, библиотеки, написанные на низкоуровневом языке типа C или Fortran, могут работать с данными, хранящимися в массиве NumPy, вообще без копирования.

pandas

Библиотека pandas предоставляет структуры данных и функции, призванные 
сделать работу со структурированными данными простым, быстрым и выразительным делом. Как вы вскоре убедитесь, это один из основных компонентов, 
превращающих Python в мощный инструмент продуктивного анализа данных. 
Основной объект pandas, используемый в этой книге, – DataFrame – двумерная 
таблица, в которой строки и столбцы имеют метки:

>>> frame
  
total_bill 
tip 
sex 
 smoker day  
time 
 
size
1 
16.99 
 
1.01 
Female  No 
 
Sun  
Dinner  
2
2 
10.34 
 
1.66 
Male 
 No 
 
Sun  
Dinner  
3
3 
21.01 
 
3.5 
Male 
 No 
 
Sun  
Dinner  
3
4 
23.68 
 
3.31 
Male 
 No 
 
Sun  
Dinner  
2
5 
24.59 
 
3.61 
Female  No 
 
Sun  
Dinner  
4
6 
25.29 
 
4.71 
Male 
 No 
 
Sun  
Dinner  
4
7 
8.77 
 
2  
Male 
 No 
 
Sun  
Dinner  
2
8 
26.88 
 
3.12 
Male 
 No 
 
Sun  
Dinner  
4
9 
15.04 
 
1.96 
Male 
 No 
 
Sun  
Dinner  
2
10 
14.78 
 
3.23 
Male 
 No 
 
Sun  
Dinner  
2

Библиотека pandas сочетает высокую производительность средств работы с 
массивами, присущую NumPy, с гибкими возможностями манипулирования дан
ными, свойственными электронным таблицам и реляционным базам данных (например, на основе SQL). Она предоставляет развитые средства индексирования, 
позволяющие без труда изменять форму наборов данных, формировать продольные и поперечные срезы, выполнять агрегирование и выбирать подмножества. 
В этой книге библиотека pandas будет нашим основным инструментом.
Для разработки финансовых приложений pandas предлагает богатый набор высокопроизводительных средств анализа временных рядов, специально ориентированных на финансовые данные. На самом деле, я изначально проектировал pandas 
как удобный инструмент анализа именно финансовых данных.
Пользователям языка статистических расчетов R название DataFrame покажется знакомым, потому что оно выбрано по аналогии с объектом data.frame в R. 
Однако они не идентичны: функциональность data.frame является собственным 
подмножеством той, что предлагает DataFrame. Хотя эта книга посвящена Python, 
я время от времени будут проводить сравнения с R, потому что это одна из самых 
распространенных сред анализа данных с открытым исходным кодом, знакомая 
многим читателям.
Само название pandas образовано как от panel data (панельные данные), применяемого в эконометрике термина для обозначения многомерных структурированных наборов данных, так и от фразы Python data analysis.

matplotlib

Библиотека matplotlib – самый популярный в Python инструмент для создания 
графиков и других способов визуализации двумерных данных. Первоначально 
она была написана Джоном Д. Хантером (John D. Hunter, JDH), а теперь сопровождается большой группой разработчиков. Она отлично подходит для создания 
графиков, пригодных для публикации. Интегрирована с IPython (см. ниже), что 
позволяет организовать удобное интерактивное окружение для визуализации 
и исследования данных. Графики интерактивны – можно увеличить масштаб 
какого-то участка графика и выполнять панорамирование с помощью панели инструментов в окне графика.

IPython

IPython – компонент стандартного набора инструментов научных расчетов на 
Python, который связывает все воедино. Он обеспечивает надежную высокопродуктивную среду для интерактивных и исследовательских расчетов. Это оболочка 
Python с дополнительными возможностями, имеющая целью ускорить написание, 
тестирование и отладку кода на Python. Особенно она полезна для работы с данными и их визуализации с помощью matplotlib. Я почти всегда использую IPython 
в собственной работе для прогона, отладки и тестирования кода.
Помимо стандартных средств консольной оболочки, IPython предоставляет:
• HTML-блокнот в духе программы Mathematica для подключения к IPython 
с помощью веб-браузера (подробнее об этом ниже);

Почему именно Python?

К покупке доступен более свежий выпуск Перейти