Быстродействующий Python. Высокопроизводительные методы для больших наборов данных

Тиаго Родригес Антан

 

Первая редакция на английском языке: Апрель 2023

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

Многие из обозначений, используемых производителями и продавцами для их различения продуктов, считаются товарными знаками. В тех случаях, когда эти обозначения фигурируют в книге, и Manning Publications была осведомлена о заявке на товарный знак, обозначения были напечатаны в первоначальных заглавных буквах либо всем заглавием.

Опубликовано Manning Publications Co.

20 Baldwin Road

PO Box 761

Shelter Island, NY 11964

ISBN 978-1-61729-793-9

www.manning.com

2023-06-16

 Состав исполнителей

Издания на английском языке
Автор
Тиаго Родригес Антан
Редактор по аудитории
Фрэнсис Лефковиц
Редактор технического развития
Эл Кринкер
Редактор обзора
Михаэла Батинич
Редактор производства
Энди Маринкович
Редактор текста
Алиса Ларсон
Корректор
Кери Хейлз
Технический корректор
Энди Майлз
Наборщик
Гордан Салинович
Изготовитель переплёта
Мария Тудор

 www.Manning.com

Таблица 0-1. Иерархия памяти по размерам и временам доступа для гипотетического, но вполне реалистичного современного настольного компьютера
Тип Размер Время доступа

ЦПУ

Кэш L1

256кБ

2нс

Кэш L2

1МБ

5нс

Кэш L3

6МБ

30нс

Оперативная память

DIMM

8ГБ

100нс

Вторичное хранилище

SSD

256ГБ

500мкс

HDD

2ТБ

5мс

Хранилище третьего уровня

NAS - Network Access Server

100ТБ

Определяется сетевой средой

Частное облачное решение

1ПБ

Определяется поставщиком услуги

 Содержание

Вводная часть
Вступительное слово
Благодарности
Об этой книге
Кто должен читать эту книгу?
Как организована данная книга: дорожная карта
О коде
Форум обсуждения liveBook
Аппаратные и программные средства
Об авторе
Об обложке
Часть 1: Основные подходы
Глава 1. Острая потребность в эффективности обработки данных
Насколько опасна лавина данных?
Современные вычислительные архитектуры и высокопроизводительные вычисления
Изменения внутри компьютера
Изменения в сетевой среде
Облачные решения
Работа с ограничениями Python
Глобальная блокировка интерпретатора
Суммируем имеющиеся решения
Глава 2. Извлекаем максимальную производительность из встроенных функциональных возможностей
Профилирование нагрузок как с вводом/ выводом, так и с вычислениями
Выгрузка данных и вычисление минимальных температур
Встроенный модуль профилирования Python
Применение локального кэширования для снижения загруженности сети
Профилирование кода для выявления узких мест производительности
Визуализация сведений профилирования
Линейное профилирование
На вынос: код профилирования
Оптимизация базовых структур данных для ускорения: списки, наборы и словари
Производительность поиска в списках
Поиск в наборах
Сложность списков, наборов и словарей в Python
Поиск чрезмерного выделения памяти
Навигация по минному полю оценок памяти Python
Объём памяти некоторых альтернативных представлений
Применение массивов в качестве альтернативы спискам
Систематизация изученного: оцениваем использование памяти объектов Python
На вынос: оцениваем использование памяти объектов Python
Отложенность и генераторы для конвейеров Больших данных
Применение генераторов вместо стандартных функций
Глава 3. Одновременность, параллельность и асинхронная обработка
Написание каркаса асинхронного сервера
Реализация каркаса для взаимодействия и клиентами
Программирование при помощи сопрограмм
Отправка сложных данных из простого синхронного клиента
Альтернативные подходы в взаимодействию между процессами
На вынос: асинхронное программирование
Реализация базового механизма MapReduce
Разбираемся с инфраструктурой MapReduce
Разработка очень простой ситуации проверки
Первая попытка реализации инфраструктуры MapReduce
Реализация параллельной версии механизма MapReduce
Применение concurrent.futures для реализации сервера потоков
Асинхронное выполнение фьючерсами
Проблема GIL и многопоточность
Применение множества процессов для реализации MapReduce
Решение на основе concurrent.futures
Решение на основе модуля многопроцессности
Отслеживание развития решения со множеством процессов
Порционная передача данных
Проверяем всё это вместе: асинхронный многопоточный и многопроцессный сервер MapReduce
Проектирование полного высокопроизводительного решения
Создание устойчивой версии нашего сервера
Выводы
Глава 4. Высокопроизводительный NumPy
Разбираемся с NumPy с точки зрения производительности
Сопоставление копирования и представления имеющихся массивов
Разбираемся с механизмом представления NumPy
Применение представления для роста эффективности
Применение программирования массивов
На вынос
Широковещание в NumPy
Применение программирования массивов
Развитие векторного мышления
Тонкая настройка внутренней архитектуры NumPy для производительности
Обзор зависимостей NumPy
Как настраивать NumPy в вашем дистрибутиве
Потоки в NumPy
Часть 2: Аппаратные средства
Глава 5. Повторная реализация критически важного кода при помощи Cython
Обзор методик повторной реализации действенного кода
Вихрем в тур по Cython
Естественная реализация в Cython
Применение аннотаций Cython для увеличения производительности
Почему аннотации фундаментально важны для производительности
Добавление типизации в возвращаемые значения функций
Профилирование кода Cython
Применение встроенной инфраструктуры профилирования Python
Применение line_profiler
Оптимизация доступа к массивам при помощи представлений памяти Cython
На вынос
Чистим все внутренние взаимодействия с Python
Написание обобщённых универсальных функций NumPy на Cython
На вынос
Расширенный доступ к массивам в Cython
Обход ограничения GIL на одновременный запуск множества потоков
Анализ базовой производительности
Пример космической войны с применением Quadlife
Одновременность в Cython
Глава 6. Иерархия памяти, хранение и сетевые среды
Как современные аппаратные архитектуры влияют на производительность Python
Парадоксальное воздействие современных архитектур на производительность
Как кэширование ЦПУ влияет на действенность алгоритма
Современные постоянные хранилища
Действенное хранение данных при помощи Blosc
Сжимаем данные; сберегаем время
Скорость считывания (и буферизация памяти)
Воздействие различных алгоритмов сжатия на производительность хранения
Применение внутренних сведений о представлении данных для увеличения сжатия
Ускорение NumPy при помощи NumExpr
Быстрая обработка выражений
Как архитектура оборудования воздействует на наши результаты
Когда NumExpr не применим
Последствия применения локальных сетей на производительность
Источники неэффективности вызовов REST
Естественный клиент на основе UDP и msgpack
Сервер на основе UDP
Работа с базовым восстановлением стороны клиента
Прочие предложения оптимизации сетевых вычислений
Часть 3: Приложения и библиотеки для современной обработки данных
Глава 7. Высокопроизводительные pandas и Apache Arrow
Оптимизация памяти и времени при загрузке данных
Сопоставление сжатых и не сжатых данных
Умозаключения о типе столбца
Воздействие точности типа данных
Перекодирование и сокращение данных
Методики для увеличения скорости анализа данных
Применение индексации для ускорения доступа
Стратегии итерации по строкам
pandas поверх NumPy, Cython и NumExpr
Применение NumPy в явном виде
pandas поверх NumExpr
Cython и pandas
Считывание данных в pandas при помощи Arrow
Взаимосвязь между pandas и Apache Arrow
Считывание файла CSV
Анализ с применением Arrow
Применение Arrow Interop для делегирования работы более эффективным языкам и системам
Реализации архитектуры interop языка Arrow
Операции нулевого копирования данных при помощи сервера Plasma Arrow
Глава 8. Хранение Больших данных
Унифицированный интерфейс для доступа к файлам: fsspec
Применение fsspec для поиска файлов в репозитории GitHub
Применение fsspec для инспекции файлов zip
Доступ к файлам с применением fsspec
Использование цепочки адресов URL для прозрачного обхода различных файловых систем
Замена серверных частей файловой системы
Взаимодействие с PyArrow
Parquet: действенный формат хранения ориентированных на столбцы данных
Инспектирование метаданных Parquet
Кодирование столбцов при помощи Parquet
Разбиение на разделы наборов данных
Старомодный способ работы с наборами данных размером больше памяти
Файлы сопоставления памяти с NumPy
Порционное считывание и запись кадров данных
Zarr для постоянного хранения больших массивов
Разбираемся с внутренней структурой Zarr
Хранение массивов в Zarr
Создание нового массива
Одновременные считывание и запись в массивы Zarr
Выводы
Часть 4: Современные темы
Глава 9. Анализ данных при помощи GPU
Понимание вычислительной мощности графического процессора
Разбираемся с преимуществами графического процессора
Взаимосвязь между ЦПУ и графическим процессором
Внутренняя архитектура графического процессора
Соображения относительно архитектуры программного обеспечения
Применение Numba для выработки кода GPU
Установка программного обеспечения графического процессора для Python
Основы программирования графического процессора при помощи Numba
Повторение примера Мандельброта с использованием графических процессоров
Версия NumPy кода Мандельброта
Анализ производительности кода GPU: вариант приложения CuPy
Библиотеки анализа данных на основе графического процессора
Применение CuPy: версия NumPy графического процессора
Базовое взаимодействие с CuPy
Написание генератора Мандельброта с применением Numba
Написание генератора Мандельброта с применением CUDA C
Инструменты профилирования для кода графического процессора
Глава 10. Анализ Больших данных с применением Dask
Разбираемся с моделью исполнения Dask
Базовый уровень pandas для сопоставления
Разработка решения кадра данных на основе Dask
Вычислительная стоимость операций Dask
Разбиение данных на разделы для обработки
Сохранение промежуточных вычислений
Реализации алгоритмов поверх распределённых кадров данных
Восстановление данных из разделов
Сохранение распределённых кадров данных
Применение распределённого планировщика Dask
Архитектура dask.distributed
Исполнение кода при помощи dask.distributed
Работа с наборами данных больше размера памяти
Дополнение A. Настройка среды
Дополнение B. Применение Numba для выработки действенного кода нижнего уровня
Указатель

 Вступительное слово

Несколько лет назад конвейер на основе Python, над которым работала моя команда, внезапно остановился. Процесс просто продолжал использовать ЦПУ и не завершался. Эта функция была критически важной для нашей компании, и нам нужно было решить проблему как можно скорее. Мы посмотрели на алгоритм, и он показался нам нормальным — на самом деле это была достаточно простая реализация. После многих часов изучения возникшей проблемы несколькими инженерами, мы обнаружили, что всё сводилось к поиску по списку — очень большому списку. Основная проблема решилась тривиально после преобразования такого списка на набор. В итоге мы получили гораздо меньшую структуру данных со временем поиска в миллисекундах, а не в часах.

На тот момент меня посетил ряд прозрений:

  • Это была тривиальная задача, однако наш процесс разработки не касался проблем производительности. К примеру, если бы мы регулярно применяли средство профилирования, мы бы выявили эту ошибку производительности за считанные минуты вместо затраченных часов.

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

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

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

Я решил написать данную книгу чтобы и другие программисты могли получить пользу от моих озарений. Моя цель состоит в том, чтобы оказать содействие опытным программистам Python разрабатывать и реализовывать более действенные решения, а также разбираться в возможных компромиссах. Я хотел применить к своему предмету целостный подход, обсуждая чистый Python и важные библиотеки Python, рассматривая перспективы алгоритмов и принимая во внимание современные аппаратные архитектуры и их последствия, а также обсуждая производительность ЦПУ и средств хранения. Я надеюсь, что данная книга окажет вам содействие в более уверенном подходе к вопросам производительности при разработке экосистем Python.

 Благодарности

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

Всем рецензентам: Абхилашу Бабу Джотиндре Бабу, Андреа Смит, Бисванат Чоудхури, Брайану Гринеру, Брайану С. Коулу, Дэну Шейху, Дане Робинсон, Даниэлю Васкесу, Дэвиду Паккуду, Дэвиду Пачке, Гжегожу Мике, Джеймсу Лю, Йенсу Кристиану Б. Мэдсену, Джереми Чен, Кальян Редди, Лоренцо Де Леон, Ману Сарина, Ник Пипенбрейер, Ноа Флинн, Ор Голан, Пауло Нуин, Пега Т. Афшар, Ричард Вон, Рууд Гийсен, Шашанк Каланити, Симеон Лейзерзон, Симоне Сгуацца, Шрирам Мачарла, Шрути Шивакумар , Стив Лав, Уолтер Александр Мата Лопес, Уильям Джамир Сильва и Се Икуан — ваши предложения помогли сделать эту книгу лучше.

 Об этой книге

Основная цель данной книги состоит в оказании вам помощи для написания более эффективных приложений в экосистеме Python. Под более эффективным я подразумеваю, что ваш код будет пользоваться меньшим числом тактов ЦПУ, меньшим объёмом для хранения и и меньшим сетевым взаимодействием.

Книга применяет целостный подход к задаче производительности. Мы не только обсуждаем методы оптимизации кода на чистом Python, но также рассматриваем действенное использование широко распространённых библиотек по работе с данными, таких как NumPy и pandas. Поскольку в некоторых ситуациях Python недостаточно эффективен, мы также рассматриваем Cython, когда нам требуется бо́льшая скорость. В соответствии со своим целостным подходом, мы также обсуждаем влияние аппаратных средств на проектирование кода: мы анализируем влияние современных вычислительных архитектур на производительность алгоритмов. Также мы изучаем воздействие сетевых архитектур на эффективность и изучаем применение вычислений графического процессора для быстрого анализа данных.

{Прим. пер.: Следует обратить внимание на не совсем традиционное применение автором терминов concurrency и parallelism. Под concurrency в данной книге понимается параллельность, не обязательно одновременная, а parallelism подразумевает именно одновременность.}

 Кто должен читать эту книгу?

Данная книга предназначена для аудитории от средней до продвинутой компетентности. Если вы просмотрите оглавление, вы должны узнать большинство приводимых методик и, скорее всего, вы применяли многие из них. За исключением посвящённых библиотекам ввода/ вывода и вычислениям в графических процессорах разделов, здесь представлено мало сведений вводного характера: вам требуется понимать эти основы. Если вы в настоящее время пишите код с расчётом на его производительность и сталкиваетесь с реальными трудностями при действенной обработке столь большого объёма данных, тогда эта книга для вас.

Для извлечения максимальной пользы от данной книги вам требуется обладать, как минимум, парой лет работы с Python и быть знакомым с управляющим структурами Python, а также понимать что такое списки, наборы и словари. Также вам потребуется опыт работы с некоторыми стандартными библиотеками Python, такими как os, sys, pickle и multiprocessing. Чтобы максимально действенно пользоваться представляемыми мной здесь методами, вы также должны иметь некий уровень знакомства со стандартными библиотеками анализа данных, такими как NumPy - по крайней мере, минимальное знакомство с массивами - и pandas - при некотором опыте работы с кадрами данных.

Оказалось бы полезным, даже если вы напрямую не контактировали с ними, если бы вы были знакомы с путями ускорения кода Python через взаимодействие с внешними языками программирования для C или Rust или бы вам было известно об альтернативных подходах, таких как Cython или Numba. Вам также поможет опыт работы с вводом/ выводом в Python. Учитывая то, что библиотеки ввода/ вывода менее рассмотрены в имеющейся литературе, мы начнём с самого начала таких форматов как Apache Parquet и таких библиотек, как Zarr.

Вам надлежит знать основные команды оболочки терминалов Linux (или терминалов MacOS). Если вы работаете в Windows, установите либо оболочку на основе Unix, либо разберитесь с командной строкой или PowerShell. И, конечно же, на вашем компьютере должно быть установлено программное обеспечение Python.

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

Хотя вам и не требуется обладать академической подготовкой в данной области, вам будет полезно иметь базовое представление об издержках сложности - к примеру, интуитивное представление о том, что масштабируемые линейно с данными алгоритмы лучше чем алгоритмы, стоимость которых растёт экспоненциально. Если вы планируете применять оптимизацию графическим процессором, на данном этапе мы ничего от вас не ожидаем.

 Как организована данная книга: дорожная карта

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

Часть 1: Основные подходы (Главы 1-4) рассматривает вводный материал.

Глава 1. Острая потребность в эффективности обработки данных представляет основную задачу и поясняет почему мы должны уделять внимание действенности при вычислениях и хранении. Она также вводит основной подход данной книги и делает предложения для навигации по ней исходя из ваших потребностей.

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

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

Глава 4. Высокопроизводительный NumPy вводит NumPy, библиотеку, которая позволяет вам действенно обрабатывать многомерные массивы. NumPy стоит в самой сердцевине всех современных методик обработки данных, а раз так, она трактуется в качестве фундаментальной библиотеки. Данная глава распределяет методики numPy для разработки более действенного кода, такие как представления, широковещание и программирование массивов.

Часть 2: Аппаратные средства (Главы 5 и 6) по большей части сосредоточена на выделении максимальной эффективности из распространённых аппаратных ресурсов и сетевых сред.

Глава 5. Повторная реализация критически важного кода при помощи Cython рассматривает Cython, расширенный набор Python, который способен вырабатывать очень эффективный код. Python представляет собой интерпретируемый язык программирования верхнего уровня, поэтому ожидается, что он не будет оптимальным для аппаратных средств. Имеется ряд языков программирования, таких как C или Rust, которые спроектированы таким образом, чьътобы быть максимально эффективными на аппаратном уровне. Cython относится к такой области языков программирования. Хотя он очень близок к Python, он компилируется в код C. Для создания наиболее действенного кода нс Cython необходимо помнить о том, как его код соотносится с действенной реализацией. В данной главе мы ознакомимся с тем как создавать эффективный код Cython.

Глава 6. Иерархия памяти, хранение и сетевые среды обсуждает влияние современных аппаратных архитектур на разработку действенного кода Python. Учитывая то, как устроены современные компьютеры, некоторые парадоксальные подходы могут оказаться более эффективными чем ожидалось. Например, при некоторых обстоятельствах работа со сжатыми данными может оказываться быстрее работы с несжатыми данными, даже если за это придётся платить некую цену алгоритму распаковки. В этой главе также рассматривается влияние ЦПУ, памяти, системы хранения и сетевой среды на разработку алгоритма Python. Мы обсудим NumExpr, библиотеку, которая способна превратить код NumPy в более эффективный за счёт применения свойств современной архитектуры оборудования.

Часть 3: Приложения и библиотеки для современной обработки данных (Главы 7 и 8) бросает взгляд на типичные приложения и библиотеки, применяемые в современной обработке данных.

Глава 7. Высокопроизводительные pandas и Apache Arrow сосредотачивается на настолько эффективном, насколько это возможно, применении pandas, используемой в Python библиотеке кадров данных. Мы рассмотрим относящиеся к pandas методики оптимизации кода. В отличии от большинства глав данной книги, ото строится на более ранних главах. pandas работает поверх NumPy, а потому мы воспользуемся тем, что узнали в Главе 4, и познакомимся со связанными с NumPy методами для оптимизации pandas. Также мы рассмотрим как выполнять оптимизацию pandas при помощи NumExpr и Cython. Наконец, я представляю Arrow, библиотеку, которую, помимо прочих функциональных возможностей, можно применять для повышения производительности обработки кадров данных pandas.

Глава 8. Хранение Больших данных рассматривает оптимизацию хранения данных. Мы обсудим Parquet, библиотеку для эффективной обраьотки данных столбцов и Zarr, которая способна обрабатывать очень большие массивы на диске. Мы также приступаем к обсуждению того, как работать с наборами данных, размеры которых превышают размер памяти.

Часть 4: Современные темы имеет дело с двумя завершающими и очень различными подходами: работу с графическим процессором и применение библиотеки Dask.

Глава 9. Анализ данных при помощи GPU рассматривает применении графических процессоров (GPU) для обработки больших наборов данных. Мы обнаружим, что модель вычислений на графических процессорах, применяющих множество простых процессорных устройств, вполне годится для решения современных задач науки о данных. Для того чтобы воспользоваться преимуществами графических процессоров мы пользуемся двумя различными подходами. Во- первых, мы обсудим имеющиеся библиотеки, которые предоставляют аналогичные знакомые вам библиотекам интерфейсы, к примеру, CuPy как версию NumPy для графического процессора. Во- вторых, мы расскажем как вырабатывать код для работы на графических процессорах из Python.

Глава 10. Анализ Больших данных с применением Dask обсуждает Dask, библиотеку, позволяющую писать одновременный код, который масштабируется на большое число компьютеров -локально или в облачном решении - и при этом представляет знакомые интерфейсы, схожие с NumPy и pandas.

Данная книга также содержит два Дополнения.

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

Дополнение B. Применение Numba для выработки действенного кода нижнего уровня обсуждает Numba, альтернативу Cython для создания эффективного кода нижнего уровня. Cython и Numba — основные средства генерации низкоуровневого кода. Для решения реальных проблем я рекомендую Numba. Почему же тогда я посвятил Cython целую главу и поместил Numba в конец книги? Потому что основная цель этой книги — дать вам прочную основу для написания эффективного кода в экосистеме Python, а Cython с его дополнительными препятствиями позволяет нам копнуть глубже с точки зрения понимания того, что происходит.

 О коде

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

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

Вы можете получить исполняемые фрагменты кода из liveBook (через Интернет) версии данной книги. Полный код примеров доступен для загрузки с GitHub и с вебсайта Manning. Если будут выявляться ошибки или когда основные разработки Python и имеющихся библиотек потребуют некоторых изменений, я буду обновлять этот репозиторий. Поэтому ожидайте неких изменений в данном репозитории книги. Вы обнаружите в данном репозитории каталог для каждой главы.

Какой бы стиль кода вы ни предпочли, я адаптировал приводимый здесь код с тем, чтобы он хорошо служил в печатной книге. Например, я неравнодушен к длинным и содержательным именам переменных, но они плохо сочетаются с ограничениями книжной формы. Я стараюсь применять выразительные имена и следовать стандартным соглашениям Python, таким как PEP8, но приоритет имеет удобочитаемость книги. То же самое относится и к типам аннотациям: я бы хотел ими пользоваться, но они мешают читабельности кода. В некоторых, очень редких случаях, я для повышения удобочитаемости пользуюсь алгоритмом, даже если он не работает со всеми предельными ситуациями и не добавляет многого к объяснению.

В большинстве случаев код из данной книги будет работать со стандартным интерпретатором Python. В некоторых ограниченных ситуациях потребуется IPython, в особенности, для сопровождения анализа производительности. Также вы можете пользоваться Jupyter Notebook.

Подробности установки можно обнаружить в Дополнении A. Настройка среды. Когда какие- то из глав или разделов требуют особенного программного обеспечения, это будет обозначено в соответствующем месте.

 Форум обсуждения liveBook

Приобретение Fast Python также включает в себя доступ к liveBook, Интернет платформе Manning для чтения. Пользуясь исключительными функциональными возможностями обсуждения liveBook вы можете присоединять комментарии к общей книге или же к отдельным разделам либо параграфам. Вы можете запросто делать заметки для себя, задавать технические вопросы и отвечать на них, а также получать помощь от автора и прочих пользователей. Для получения доступа к форуму перейдите по ссылке. О форумах Manning и правилах поведения вы можете дополнительно в https://livebook.manning.com/discussion.

Обязательство Manning перед нашими читателями состоит в том, чтобы предоставлять место, где может состояться содержательный диалог между отдельными читателями, а также между читателями и автором. Это не обязательство какой-либо конкретной суммы участия со стороны автора, чей вклад в форум остаётся добровольным (и неоплачиваемым). Мы предлагаем вам попробовать задать автору несколько сложных вопросов, чтобы он не потерял интерес! Форум и архивы предыдущих обсуждений будут доступны на веб-сайте издателя, пока книга находится в печати.

 Аппаратные и программные средства

Для работы с кодом данной книги вы можете пользоваться любой операционной системой. Тем не менее, именно Linux в большинстве ситуаций был промышленным кодом, в котором предполагалось развёртывание, поэтому именно она и выступает предпочтительной операционной системой. MacOS X также должен работать без каких бы то ни было добавлений. Когда вы пользуетесь Windows, я бы рекомендовал вам установить Windows Subsystem for Linux (WSL {Прим. пер.: см. наши переводы Linux подсистема Windows (WSL) для профессионалов Хайдена Барнса и Изучаем подсистемы Windows для Linux Прэйтика Сингха}).

Альтернативой всем операционным системам служит Docker. Вы можете воспользоваться предоставляемыми в соответствующем репозитории образами Docker. Docker снабдит вас упакованной в контейнер средой Linux для исполнения необходимого кода.

Я рекомендую вам обладать 16ГБ оперативной памяти и 150 ГБ свободного дискового пространства. Глава 9. Анализ данных при помощи GPU с относящимся к графическим процессорам содержимым, потребует GPU NVIDIA, причём, по крайней мере, основывающейся на архитектуре Pascal; большинство выпускавшихся в последние пять лет графических процессоров должны отвечать этому требованию. Дополнительные подробности относительно подготовки ваших компьютера и программного обеспечения для того чтобы получить максимум от данной книги вы можете найти в Дополнении A. Настройка среды.

 Об авторе

Тиаго Родригес Антан обладает степенью бакалавра технических наук в области информатики и степень доктора философии в области биоинформатики. В настоящее время работает в области биотехнологий. Тиаго пользуется Python со всеми его библиотеками для осуществления научных вычислений и задач обработки данных. Чаще всего для оптимизации критически важных частей алгоритмов он также пользуется языками программирования нижнего уровня, такими как C и Rust. В настоящее время он разрабатывает инфраструктуру на основе Amazon AWS, но большую часть своей карьеры он применял локальные вычислительные и научные кластеры.

Дополнительно к работе в данной отрасли, его опыт с академической стороной научных вычислений также содержит два постдока по анализу данных в Кембриджском и Оксфордском университетах. Будучи научным сотрудником университета Монтаны, он с нуля создал всю научную инфраструктуру для анализа биологических данных.

Тиаго является одним из соавторов Biopython, крупного пакета биоинформатики, написанного на Python, и автором книги "Bioinformatics с Python Cookbook" (Packt, 2022), которая вышла в третьем издании. Он также является автором и соавтором многих важных научных статей в области биоинформатики.

 Об обложке

Фигура на нашей обложке Fast Python озаглавлена “Bourgeoise de Passeau” или “Bourgeoise of Passeau” и взята из коллекции Жака Грассе де Сен-Совера, опубликованной в 1797 году. Каждая иллюстрация тщательно нарисована и раскрашена вручную.

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

eXTReMe Tracker - Free Website Statistics
Вопросы? Обсудите их на mdl.ru
Нашли ошибку? Сообщите о ней на данной странице