Опубликовано

Новинка: “Python. Уроки для начинающих”

Python. Уроки для начинающих

В книге 22 урока, более 40 практических упражнений и заданий для самостоятельной работы. Описан язык Python: его основы, типы данных, управляющие выражения, функции, объекты, классы, исключения, модули и пакеты. Рассмотрены более развитые инструменты языка: установка и применение дополнительных библиотек, многопоточное, многопроцессное и конкурентное программирование, аннотации типов. Рассказано о практическом применении Python и различных библиотек для загрузки данных из Интернета, парсинга веб-страниц, работы с базами данных, программирования графических и веб-приложений, математических расчетов, вывода графиков и работы с искусственным интеллектом.  Электронный архив на сайте издательства  содержит все примеры из книги.

Для начинающих программистов

Ваш путь от новичка к Python-разработчику начинается здесь!

Перед вами — идеальный старт в мир программирования!

Книга Владимира Дронова, автора более 50 популярных компьютерных руководств, написана специально для тех, кто делает первые шаги в коде. Она превратит сложные концепции в понятные и наглядные уроки, не перегружая лишней теорией.

22 урока, 40+ практических упражнений — и вы с нуля освоите мощный язык Python, на котором создаются веб-сайты, приложения, аналитические инструменты и решения с искусственным интеллектом.

Чему вы научитесь:

  • Писать чистый и эффективный код на Python с самого начала.
  • Работать с базами данных, парсить информацию из интернета и строить графики.
  • Создавать графические приложения и основы веб-разработки.
  • Использовать многопоточность для решения сложных задач.
  • Интегрировать возможности искусственного интеллекта в свои проекты.

Почему именно эта книга?

  • Проверенный автор: Владимир Дронов — практикующий программист с 1987 года, умеющий объяснять просто о сложном.
  • Структура «от простого к сложному»: Пошаговые уроки и задания для закрепления материала.
  • Практика с первого дня: Все примеры из книги доступны в электронном архиве для скачивания.
  • Актуальность: Рассмотрены современные подходы, включая аннотации типов, конкурентное программирование и работу с AI.

Для кого эта книга:

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

 

Дронов Владимир Александрович

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.

Книгу “Python. Уроки для начинающих” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………… 13

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

Почему эта книга?……………………………………………………………………………………………………………………… 14

Использованные программные продукты……………………………………………………………………………….. 14

Типографские соглашения………………………………………………………………………………………………………… 15

Часть I. Язык Python: основные инструменты………………….. 17

Урок 1. Введение в Python, часть 1…………………………………………………………. 19

1.1. Интерактивный режим Python……………………………………………………………………………………………. 19

1.2. Операторы. Приоритет операторов. Скобки……………………………………………………………………. 20

1.3. Функции……………………………………………………………………………………………………………………………….. 23

1.4. Переменные. Присваивание……………………………………………………………………………………………….. 24

1.5. Типы данных……………………………………………………………………………………………………………………….. 26

1.5.1. Числа — целые и вещественные………………………………………………………………………………. 26

1.5.2. Строки………………………………………………………………………………………………………………………… 27

1.5.3. Списки………………………………………………………………………………………………………………………… 28

1.5.4. Кортежи……………………………………………………………………………………………………………………… 29

1.5.5. Словари……………………………………………………………………………………………………………………… 29

1.6. Стандартная библиотека. Модули. Импорт…………………………………………………………………….. 30

1.7. Объекты и классы……………………………………………………………………………………………………………….. 32

1.7.1. Введение в объекты и классы…………………………………………………………………………………… 32

1.7.2. Объектная природа Python………………………………………………………………………………………. 33

1.8. Программные ошибки и сообщения о них………………………………………………………………………… 34

1.9. Что еще следует знать о Python в целом, часть 1…………………………………………………………….. 35

Урок 2. Введение в Python, часть 2…………………………………………………………. 38

2.1. Работа с данными разных типов……………………………………………………………………………………….. 38

2.1.1. Выяснение типа данных, к которому относится значение……………………………………. 38

2.1.2. Преобразование значения в другой тип данных……………………………………………………. 39

2.2. Написание программ на Python………………………………………………………………………………………… 39

2.2.1. Ввод данных……………………………………………………………………………………………………………… 40

2.2.2. Вывод данных…………………………………………………………………………………………………………… 40

2.2.3. Написание программ в среде IDLE Shell………………………………………………………………… 41

2.2.4. Альтернативные инструменты для написания программ……………………………………… 44

2.2.5. Комментарии…………………………………………………………………………………………………………….. 45

2.2.6. Правила набора программного кода на Python…………………………………………………….. 45

2.2.7. Сообщения об ошибках в коде программ……………………………………………………………….. 47

2.3. Что еще следует знать о Python в целом, часть 2…………………………………………………………….. 47

Урок 3. Логический тип данных, управляющие выражения и блоки…….. 49

3.1. Логический тип данных……………………………………………………………………………………………………… 49

3.1.1. Введение в логический тип. Операторы сравнения. Условия……………………………….. 49

3.1.2. Логические операторы……………………………………………………………………………………………… 50

3.2. Выражение ветвления…………………………………………………………………………………………………………. 51

3.3. Блоки. Пустой оператор…………………………………………………………………………………………………….. 53

3.3.1. Как набираются выражения, содержащие блоки?………………………………………………… 54

3.4. Выражение выбора…………………………………………………………………………………………………………….. 55

3.5. Циклы. Цикл с условием……………………………………………………………………………………………………… 56

3.6. Управление циклами…………………………………………………………………………………………………………… 58

3.6.1. Переход на следующую итерацию…………………………………………………………………………. 58

3.6.2. Прерывание цикла…………………………………………………………………………………………………….. 58

3.7. Автоматическое преобразование типов в условиях управляющих выражений…………… 59

3.8. Оператор присваивания в составе выражения…………………………………………………………………. 59

3.9. Что еще следует знать о блоках и не только…………………………………………………………………….. 60

3.10. Самостоятельные упражнения………………………………………………………………………………………… 61

Урок 4. Числа и строки………………………………………………………………………….. 62

4.1. Числа — целые и вещественные………………………………………………………………………………………… 62

4.1.1. Запись чисел……………………………………………………………………………………………………………… 62

4.1.2. Преобразование значений в числа………………………………………………………………………….. 63

4.1.3. Обработка чисел……………………………………………………………………………………………………….. 64

4.1.3.1. Арифметические операции…………………………………………………………………………. 64

4.1.3.2. Алгебраические и тригонометрические операции……………………………………. 65

4.1.3.3. Генерирование псевдослучайных чисел…………………………………………………… 66

4.1.4. Сравнение чисел……………………………………………………………………………………………………….. 67

4.1.5. Потери точности при вычислении…………………………………………………………………………… 68

4.2. Строки………………………………………………………………………………………………………………………………….. 68

4.2.1. Создание строк………………………………………………………………………………………………………….. 68

4.2.1.1. Специальные символы………………………………………………………………………………… 69

4.2.2. Преобразование значений в строки………………………………………………………………………… 70

4.2.3. Обработка строк……………………………………………………………………………………………………….. 70

4.2.3.1. Извлечение символов, срезов и перебор. Цикл перебора…………………………. 70

4.2.3.2. Простейшие операции над строками…………………………………………………………. 72

4.2.3.3. Преобразование строк………………………………………………………………………………… 72

4.2.3.4. Поиск и замена в строках……………………………………………………………………………. 74

4.2.4. Сравнение строк……………………………………………………………………………………………………….. 75

4.2.5. Форматируемые строки……………………………………………………………………………………………. 75

4.3. Последовательности…………………………………………………………………………………………………………… 78

4.4. Что еще нужно знать о строках и не только……………………………………………………………………… 79

4.5. Самостоятельные упражнения………………………………………………………………………………………….. 81

Урок 5. Списки, кортежи, генераторы и словари……………………………………. 82

5.1. Списки………………………………………………………………………………………………………………………………….. 82

5.1.1. Создание списков……………………………………………………………………………………………………… 82

5.1.2. Обработка списков……………………………………………………………………………………………………. 82

5.1.2.1. Простейшие операции над списками…………………………………………………………. 82

5.1.2.2. Добавление и удаление элементов списка………………………………………………… 84

5.1.2.3. Обработка элементов списка……………………………………………………………………… 85

5.1.2.4. Поиск элементов в списках…………………………………………………………………………. 86

5.1.2.5. Выдача элементов списков, выбранных псевдослучайным образом…….. 87

5.1.3. Сравнение списков……………………………………………………………………………………………………. 88

5.1.4. Списковые включения………………………………………………………………………………………………. 88

5.2. Кортежи……………………………………………………………………………………………………………………………….. 89

5.2.1. Создание кортежей…………………………………………………………………………………………………… 89

5.2.2. Работа с кортежами………………………………………………………………………………………………….. 89

5.2.3. Именованные кортежи……………………………………………………………………………………………… 90

5.3. Распаковка последовательностей……………………………………………………………………………………… 91

5.3.1. Пара слов о множественном присваивании и множественном выводе………………… 93

5.4. Генераторы………………………………………………………………………………………………………………………….. 93

5.4.1. Генераторы-функции………………………………………………………………………………………………… 93

5.4.2. Генераторы-выражения……………………………………………………………………………………………. 95

5.5. Словари……………………………………………………………………………………………………………………………….. 95

5.5.1. Создание словарей……………………………………………………………………………………………………. 95

5.5.2. Обработка словарей…………………………………………………………………………………………………. 96

5.5.2.1. Простейшие операции над словарями………………………………………………………. 96

5.5.2.2. Добавление, извлечение и удаление элементов словаря…………………………. 97

5.5.2.3. Перебор элементов словаря……………………………………………………………………….. 98

5.5.3. Сравнение словарей……………………………………………………………………………………………….. 100

5.5.4. Словарные включения……………………………………………………………………………………………. 100

5.5.5. Словари со значением по умолчанию defaultdict……………………………………………….. 101

5.6. Отображения……………………………………………………………………………………………………………………… 101

5.7. Особенности хранения значений в переменных. Ссылки……………………………………………… 102

5.8. Копирование списков, кортежей и словарей………………………………………………………………….. 103

5.9. Что еще нужно знать о генераторах и не только……………………………………………………………. 104

5.10. Самостоятельные упражнения………………………………………………………………………………………. 105

Урок 6. Функции………………………………………………………………………………….. 106

6.1. Вызов функций………………………………………………………………………………………………………………….. 106

6.1.1. Виды параметров функций…………………………………………………………………………………….. 106

6.1.2. Распаковка последовательностей и отображений в вызовах функций……………… 107

6.2. Объявление своих функций………………………………………………………………………………………………. 108

6.2.1. Объявление функции………………………………………………………………………………………………. 108

6.2.2. Доступ к глобальным переменным из тела функции…………………………………………… 109

6.2.3. Необязательные параметры………………………………………………………………………………….. 110

6.2.4. Произвольное количество параметров…………………………………………………………………. 111

6.2.5. Строго позиционные, строго именованные и двоякие параметры…………………….. 112

6.3. Функция как значение………………………………………………………………………………………………………. 114

6.3.1. Разные функции и методы, принимающие с параметрами другие функции……… 114

6.4. Лямбда-функции……………………………………………………………………………………………………………….. 116

6.5. Вложенные функции…………………………………………………………………………………………………………. 117

6.5.1. Замыкания. Фабрики функций……………………………………………………………………………….. 118

6.6. Декораторы функций………………………………………………………………………………………………………… 120

6.7. Сообщения об ошибках в телах функций. Стек вызовов………………………………………………. 122

6.8. Что еще нужно знать о функциях…………………………………………………………………………………….. 123

6.9. Самостоятельное упражнение…………………………………………………………………………………………. 124

Урок 7. Классы и объекты……………………………………………………………………. 125

7.1. Объекты……………………………………………………………………………………………………………………………… 125

7.1.1. Создание объектов………………………………………………………………………………………………….. 125

7.1.2. Обращение к атрибутам и вызов методов…………………………………………………………….. 125

7.1.3. Объектные и классовые атрибуты и методы………………………………………………………… 126

7.2. Классы……………………………………………………………………………………………………………………………….. 127

7.2.1. Объявление класса………………………………………………………………………………………………….. 127

7.2.2. Конструктор и деструктор…………………………………………………………………………………….. 128

7.2.3. Наследование классов……………………………………………………………………………………………. 130

7.2.3.1. Объявление производного класса……………………………………………………………. 130

7.2.3.2. Перекрытие и переопределение методов………………………………………………… 131

7.2.3.3. Множественное наследование…………………………………………………………………. 133

7.2.3.4. Указание декораторов функций у методов……………………………………………… 134

7.2.4. Классовые атрибуты и методы. Статические методы………………………………………… 134

7.2.5. Закрытые атрибуты и методы……………………………………………………………………………….. 135

7.2.6. Свойства………………………………………………………………………………………………………………….. 136

7.2.7. Добавленные атрибуты………………………………………………………………………………………….. 138

7.2.7.1. Ограничение набора создаваемых атрибутов……………………………………….. 138

7.2.8. Вложенные классы…………………………………………………………………………………………………. 139

7.2.9. Класс как значение…………………………………………………………………………………………………. 140

7.3. Декораторы классов…………………………………………………………………………………………………………. 140

7.4. Что еще нужно знать об объектах и классах………………………………………………………………….. 141

7.5. Самостоятельные упражнения………………………………………………………………………………………… 142

Урок 8. Модули и пакеты…………………………………………………………………….. 143

8.1. Модули. Импорт и подключение…………………………………………………………………………………….. 143

8.1.1. Использование сущностей из другого модуля……………………………………………………… 143

8.1.1.1. Импорт сущностей…………………………………………………………………………………….. 143

8.1.1.2. Подключение модулей………………………………………………………………………………. 144

8.1.2. Указание сущностей, доступных извне………………………………………………………………… 145

8.1.3. Создание своих модулей………………………………………………………………………………………… 145

8.2. Пакеты……………………………………………………………………………………………………………………………….. 146

8.2.1. Создание пакетов……………………………………………………………………………………………………. 146

8.2.2. Импорт и подключение из пакетов. Пути сущностей………………………………………….. 146

8.3. Что еще нужно знать о модулях, импорте и подключении……………………………………………. 148

8.4. Самостоятельное упражнение…………………………………………………………………………………………. 149

Урок 9. Исключения и их обработка. Обработчики контекстов…………… 150

9.1. Исключения……………………………………………………………………………………………………………………….. 150

9.1.1. Введение в исключения………………………………………………………………………………………….. 150

9.1.2. Обработка исключений………………………………………………………………………………………….. 151

9.1.3. Возбуждение исключений……………………………………………………………………………………… 153

9.1.4. Объявление своих исключений……………………………………………………………………………… 154

9.2. Обработчики контекстов………………………………………………………………………………………………….. 154

Часть II. Язык Python: расширенные инструменты……….. 157

Урок 10. Функции и классы особой функциональности………………………. 159

10.1. Создание генераторов-функций…………………………………………………………………………………….. 159

10.2. Dunder-методы и их использование………………………………………………………………………………. 160

10.2.1. Преобразование объектов в другие типы данных……………………………………………. 161

10.2.2. Поддержка арифметических операций с объектами.
Перегрузка операторов………………………………………………………………………………………. 162

10.2.3. Поддержка операций сравнения……………………………………………………………………….. 164

10.2.4. Создание своих итераторов……………………………………………………………………………….. 164

10.2.5. Создание своих последовательностей……………………………………………………………… 166

10.2.6. Создание своих отображений……………………………………………………………………………. 167

10.2.7. Прочие dunder-методы……………………………………………………………………………………….. 168

10.3. Написание менеджеров контекста………………………………………………………………………………… 170

10.3.1. Функции-менеджеры контекста…………………………………………………………………………. 170

10.3.2. Классы-менеджеры контекста…………………………………………………………………………… 171

10.4. Перечисления………………………………………………………………………………………………………………….. 172

10.5. Что еще нужно знать о классах особой функциональности……………………………………….. 175

10.6. Самостоятельные упражнения………………………………………………………………………………………. 176

Урок 11. Регулярные выражения………………………………………………………….. 177

11.1. Создание регулярных выражений…………………………………………………………………………………. 177

11.2. Написание регулярных выражений………………………………………………………………………………. 177

11.2.1. Метасимволы………………………………………………………………………………………………………. 178

11.2.2. Поднаборы…………………………………………………………………………………………………………… 178

11.2.3. Вариант……………………………………………………………………………………………………………….. 179

11.2.4. Квантификаторы…………………………………………………………………………………………………. 179

11.2.5. Утверждения………………………………………………………………………………………………………… 180

11.2.6. Группы…………………………………………………………………………………………………………………. 181

11.2.7. Обычные символы………………………………………………………………………………………………. 182

11.2.8. Флаги……………………………………………………………………………………………………………………. 182

11.2.9. Тестирование регулярных выражений……………………………………………………………… 183

11.3. Использование регулярных выражений……………………………………………………………………….. 184

11.3.1. Поиск первого совпадения…………………………………………………………………………………. 184

11.3.2. Поиск всех совпадений……………………………………………………………………………………….. 186

11.3.3. Прочие случаи использования…………………………………………………………………………… 186

11.4. Что еще нужно знать о регулярных выражениях и не только…………………………………….. 188

11.5. Самостоятельные упражнения………………………………………………………………………………………. 188

Урок 12. Установка и использование дополнительных библиотек……….. 189

12.1. Работа с дополнительными библиотеками. Утилита pip……………………………………………. 189

12.2. Библиотека Pillow: работа с графикой………………………………………………………………………….. 191

12.3. Программа для создания графических миниатюр, версия 1.0……………………………………. 192

12.4. Модуль argparse: обработка командных ключей……………………………………………………….. 194

12.4.1. Введение в командные ключи и их обработка…………………………………………………. 194

12.4.2. Создание объекта обработчика командных ключей………………………………………. 195

12.4.3. Описание командных ключей……………………………………………………………………………. 196

12.4.4. Обработка командных ключей………………………………………………………………………….. 198

12.5. Программа для создания графических миниатюр, версия 2.0……………………………………. 199

12.6. Что еще нужно знать о дополнительных библиотеках……………………………………………….. 201

12.7. Самостоятельные упражнения………………………………………………………………………………………. 202

Урок 13. Многопоточное и многопроцессное программирование…………. 203

13.1. Многопоточное программирование……………………………………………………………………………… 203

13.1.1. Введение в потоки. Глобальная блокировка интерпретатора……………………….. 203

13.1.2. Создание потоков……………………………………………………………………………………………….. 204

13.1.3. Блокировки………………………………………………………………………………………………………….. 206

13.1.4. Программа для создания графических миниатюр, версия 3.0………………………… 207

13.1.5. Очереди………………………………………………………………………………………………………………… 209

13.1.6. Программа для создания графических миниатюр, версия 3.1………………………… 211

13.2. Многопроцессное программирование………………………………………………………………………….. 213

13.2.1. Процессы и работа с ними…………………………………………………………………………………. 213

13.2.2. Программа для создания графических миниатюр, версия 4.0………………………… 214

13.3. Что еще нужно знать о потоках и процессах……………………………………………………………….. 215

13.4. Самостоятельные упражнения………………………………………………………………………………………. 216

Урок 14. Конкурентное программирование………………………………………….. 217

14.1. Сопрограммы………………………………………………………………………………………………………………….. 217

14.1.1. Введение в сопрограммы. Фьючеры………………………………………………………………….. 217

14.1.2. Сопрограммы-методы………………………………………………………………………………………… 220

14.1.2.1. Асинхронные итераторы. Цикл перебора с приостановкой……………. 220

14.1.2.2. Асинхронные менеджеры контекста.
Асинхронный обработчик контекста…………………………………………………. 221

14.1.3. Сопрограммы-генераторы…………………………………………………………………………………. 222

14.2. Задачи……………………………………………………………………………………………………………………………… 222

14.2.1. Создание и выполнение задач…………………………………………………………………………… 222

14.2.2. Одновременный запуск задач……………………………………………………………………………. 223

14.2.3. Группы задач………………………………………………………………………………………………………. 224

14.2.4. Прерывание задач………………………………………………………………………………………………. 225

14.3. Асинхронные очереди……………………………………………………………………………………………………. 226

14.4. Библиотека aiofiles: конкурентная работа с файлами………………………………………………… 226

14.5. Программа для создания графических миниатюр, версия 5.0……………………………………. 227

14.6. Самостоятельные упражнения………………………………………………………………………………………. 230

Урок 15. Аннотации типов и документирование кода. Датаклассы……… 231

15.1. Аннотации типов и их применение……………………………………………………………………………….. 231

15.1.1. Написание аннотаций типов……………………………………………………………………………… 231

15.1.1.1. Указание типов в аннотациях…………………………………………………………….. 232

15.1.1.2. Указание типов элементов у списков и кортежей…………………………….. 233

15.1.1.3. Указание типов элементов у последовательностей и отображений
произвольных типов……………………………………………………………………………. 234

15.1.1.4. Указание типов у функций, присваиваемых переменным……………….. 235

15.1.1.5. Указание типов у фьючеров……………………………………………………………….. 235

15.1.1.6. Указание типов значений, выдаваемых генераторами-функциями… 236

15.1.1.7. Обобщенные типы……………………………………………………………………………….. 237

15.1.2. Получение аннотаций, заданных у функций и методов………………………………….. 237

15.2. Строки документирования…………………………………………………………………………………………….. 238

15.3. Датаклассы……………………………………………………………………………………………………………………… 241

15.3.1. Простейшие датаклассы…………………………………………………………………………………….. 241

15.3.2. Более сложные датаклассы……………………………………………………………………………….. 243

15.4. Что еще нужно знать об аннотациях типов………………………………………………………………….. 245

15.5. Самостоятельное упражнение………………………………………………………………………………………. 245

Часть III. Практическое Python-программирование……… 247

Урок 16. Загрузка и анализ данных из Интернета………………………………… 249

16.1. Библиотека requests: загрузка файлов из Интернета…………………………………………………… 249

16.1.1. Requests: отправка клиентских запросов………………………………………………………….. 249

16.1.2. Requests: обработка полученных серверных ответов…………………………………….. 251

16.1.3. Requests: загрузка больших файлов………………………………………………………………….. 252

16.2. Библиотека Beautiful Soup: парсинг веб-страниц……………………………………………………….. 253

16.2.1. Подготовка к парсингу веб-страницы……………………………………………………………….. 253

16.2.2. Навигация по структуре узлов веб-страницы………………………………………………….. 254

16.2.3. Получение сведений об узле………………………………………………………………………………. 256

16.2.4. Поиск узлов………………………………………………………………………………………………………….. 257

16.2.5. Программа, выводящая заголовки статей на веб-сайте 3DNews.ru……………….. 262

16.2.6. Программа, сохраняющая изображения с заданной веб-страницы,
версия 1.0……………………………………………………………………………………………………………… 263

16.3. Библиотека aiohttp: конкурентная загрузка файлов……………………………………………………. 266

16.3.1. Aiohttp: отправка клиентских запросов……………………………………………………………. 267

16.3.2. Aiohttp: обработка серверных ответов……………………………………………………………… 267

16.3.3. Aiohttp: загрузка больших файлов…………………………………………………………………….. 268

16.3.4. Программа, сохраняющая изображения с заданной веб-страницы,
версия 2.0……………………………………………………………………………………………………………… 269

16.4. Самостоятельные упражнения………………………………………………………………………………………. 271

Урок 17. Разработка веб-приложений, часть 1……………………………………… 272

17.1. Основы библиотеки NiceGUI………………………………………………………………………………………….. 272

17.1.1. Страницы и маршруты……………………………………………………………………………………….. 272

17.1.2. Запуск и остановка веб-приложения…………………………………………………………………. 274

17.1.3. Создание гиперссылок……………………………………………………………………………………….. 275

17.1.4. Параметризованные маршруты и URL-параметры…………………………………………. 276

17.1.5. Обработка событий…………………………………………………………………………………………….. 277

17.1.6. Функция run(), запускающая веб-приложение…………………………………………………. 279

17.2. Основные элементы страниц…………………………………………………………………………………………. 280

17.2.1. Надпись……………………………………………………………………………………………………………….. 280

17.2.2. Графический элемент…………………………………………………………………………………………. 280

17.2.3. Гиперссылка………………………………………………………………………………………………………… 280

17.2.4. Текст в формате Markdown………………………………………………………………………………… 281

17.2.5. Аудиоролик…………………………………………………………………………………………………………. 282

17.2.6. Видеоролик………………………………………………………………………………………………………….. 283

17.2.7. Фрагмент программного кода……………………………………………………………………………. 283

17.3. Разметочные элементы…………………………………………………………………………………………………… 284

17.3.1. Блок-строка…………………………………………………………………………………………………………. 284

17.3.2. Блок-колонка……………………………………………………………………………………………………….. 284

17.3.3. Разделитель…………………………………………………………………………………………………………. 285

17.3.4. Блок-сетка……………………………………………………………………………………………………………. 285

17.3.5. Спойлер……………………………………………………………………………………………………………….. 286

17.3.6. Быстрая разметка страниц…………………………………………………………………………………. 288

17.4. Если вы знаете HTML и CSS………………………………………………………………………………………….. 290

17.4.1. Создание произвольных HTML-элементов………………………………………………………. 290

17.4.2. Указание стилевых классов и встроенных CSS-стилей…………………………………… 291

17.4.3. Обработка событий DOM…………………………………………………………………………………… 292

17.5. Статические и выгруженные файлы……………………………………………………………………………… 292

17.6. Веб-приложение фотогалереи, версия 1.0…………………………………………………………………….. 293

17.7. Что еще нужно знать о NiceGUI, часть 1………………………………………………………………………. 296

17.8. Самостоятельные упражнения………………………………………………………………………………………. 297

Урок 18. Работа с базами данных…………………………………………………………. 298

18.1. Введение в реляционные базы данных…………………………………………………………………………. 298

18.2. Библиотека Tortoise ORM: удобная работа с базами данных……………………………………. 299

18.3. Модели…………………………………………………………………………………………………………………………….. 299

18.3.1. Объявление моделей…………………………………………………………………………………………… 300

18.3.2. Настройки, поддерживаемые всеми полями…………………………………………………….. 300

18.3.3. Типы полей………………………………………………………………………………………………………….. 301

18.3.4. Создание межтабличных связей………………………………………………………………………… 302

18.3.5. Настройки самой модели…………………………………………………………………………………… 303

18.4. Соединение с базой данных и инициализация схемы…………………………………………………. 304

18.5. Запись данных………………………………………………………………………………………………………………… 305

18.5.1. Создание записей………………………………………………………………………………………………… 305

18.5.2. Правка записей……………………………………………………………………………………………………. 306

18.5.3. Удаление записей……………………………………………………………………………………………….. 307

18.6. Выборка данных…………………………………………………………………………………………………………….. 307

18.6.1. Поиск записи……………………………………………………………………………………………………….. 307

18.6.2. Извлечение значений из полей записи………………………………………………………………. 308

18.6.3. Фильтрация записей. Наборы записей……………………………………………………………… 308

18.6.3.1. Модификаторы…………………………………………………………………………………….. 309

18.6.4. Сортировка записей……………………………………………………………………………………………. 311

18.6.5. Извлечение первой и последней записей………………………………………………………….. 311

18.6.6. Извлечение заданного количества записей………………………………………………………. 312

18.6.7. Извлечение всех записей…………………………………………………………………………………….. 312

18.6.8. Проверка существования записей……………………………………………………………………… 312

18.6.9. Извлечение связанных записей………………………………………………………………………….. 313

18.6.10. Извлечение записей в виде списка словарей………………………………………………….. 314

18.7. Закрытие соединения с базой данных………………………………………………………………………….. 314

18.8. Интеграция Tortoise ORM и NiceGUI…………………………………………………………………………….. 315

18.9. Веб-приложение фотогалереи, версия 2.0…………………………………………………………………….. 315

18.9.1. Модели пользователя и изображения……………………………………………………………….. 315

18.9.2. База данных веб-приложения……………………………………………………………………………. 317

18.9.3. Вывод изображений из базы данных………………………………………………………………… 317

18.10. Что еще нужно знать о библиотеке Tortoise ORM……………………………………………………… 319

18.11. Самостоятельные упражнения……………………………………………………………………………………. 320

Урок 19. Разработка веб-приложений, часть 2……………………………………… 321

19.1. Элементы управления…………………………………………………………………………………………………….. 321

19.1.1. Кнопка………………………………………………………………………………………………………………….. 321

19.1.2. Поле ввода…………………………………………………………………………………………………………… 321

19.1.3. Область редактирования……………………………………………………………………………………. 322

19.1.4. Флажок…………………………………………………………………………………………………………………. 322

19.1.5. Набор переключателей………………………………………………………………………………………. 323

19.1.6. Раскрывающийся список……………………………………………………………………………………. 323

19.1.7. Поле для ввода числа…………………………………………………………………………………………. 325

19.1.8. Регулятор……………………………………………………………………………………………………………… 326

19.1.9. Поле для выбора файлов……………………………………………………………………………………. 326

19.2. Хранилища данных NiceGUI…………………………………………………………………………………………. 328

19.3. Хеширование паролей……………………………………………………………………………………………………. 329

19.4. Веб-приложение фотогалереи, версия 3.0…………………………………………………………………….. 330

19.4.1. Верхнее меню и секретный ключ………………………………………………………………………. 330

19.4.2. Страницы входа и выхода…………………………………………………………………………………. 331

19.4.3. Страница пользовательского профиля……………………………………………………………… 333

19.4.4. Страницы добавления и удаления изображений…………………………………………….. 335

19.5. Что еще нужно знать о библиотеке NiceGUI, часть 2………………………………………………….. 338

19.6. Самостоятельное упражнение………………………………………………………………………………………. 338

Урок 20. Разработка графических приложений……………………………………. 339

20.1. Библиотека Toga: разработка графических приложений…………………………………………… 339

20.2. Основы библиотеки Toga……………………………………………………………………………………………….. 339

20.2.1. Окна и контейнеры……………………………………………………………………………………………… 339

20.2.2. Обработка событий…………………………………………………………………………………………….. 341

20.2.3. Оформление приложения. Стили……………………………………………………………………….. 342

20.2.4. Запуск и останов приложения……………………………………………………………………………. 343

20.3. Простейшие элементы окон…………………………………………………………………………………………… 344

20.3.1. Свойства и методы, поддерживаемые всеми элементами окон………………………. 344

20.3.2. Надпись……………………………………………………………………………………………………………….. 345

20.3.3. Поле ввода…………………………………………………………………………………………………………… 345

20.3.4. Область редактирования……………………………………………………………………………………. 345

20.3.5. Флажок…………………………………………………………………………………………………………………. 346

20.3.6. Кнопка………………………………………………………………………………………………………………….. 346

20.3.7. Графический элемент…………………………………………………………………………………………. 347

20.3.8. Поле для ввода целого числа…………………………………………………………………………….. 347

20.3.9. Поле для ввода пароля……………………………………………………………………………………….. 348

20.3.10. Регулятор…………………………………………………………………………………………………………… 348

20.4. Модели и списки……………………………………………………………………………………………………………… 349

20.4.1. Модели…………………………………………………………………………………………………………………. 349

20.4.2. Списковые элементы управления……………………………………………………………………… 351

20.4.2.1. Раскрывающийся список…………………………………………………………………….. 351

20.4.2.2. Таблица………………………………………………………………………………………………… 352

20.5. Контейнеры……………………………………………………………………………………………………………………… 353

20.5.1. Стопка………………………………………………………………………………………………………………….. 353

20.5.2. Блокнот с вкладками…………………………………………………………………………………………… 354

20.5.3. Панель с прокруткой…………………………………………………………………………………………… 355

20.6. Задание стилей у элементов окон…………………………………………………………………………………. 356

20.7. Управление окнами………………………………………………………………………………………………………… 358

20.7.1. Задание главного окна приложения………………………………………………………………….. 358

20.7.2. Создание вторичных окон………………………………………………………………………………….. 360

20.7.3. Вывод стандартных модальных окон………………………………………………………………. 363

20.8. Интеграция библиотек Toga и Tortoise ORM………………………………………………………………… 364

20.9. Что еще нужно знать о библиотеке Toga………………………………………………………………………. 364

20.10. Самостоятельные упражнения……………………………………………………………………………………. 365

Урок 21. Математика……………………………………………………………………………. 366

21.1. Библиотека Matplotlib: вывод графиков……………………………………………………………………….. 366

21.1.1. Основные принципы Matplotlib………………………………………………………………………….. 366

21.1.1.1. Вывод простого графика…………………………………………………………………….. 366

21.1.1.2. Вывод двух графиков на одних координатных осях……………………….. 368

21.1.1.3. Вывод двух графиков на разных координатных осях……………………… 369

21.1.1.4. Настройка графиков……………………………………………………………………………. 370

21.1.2. Создание координатных осей……………………………………………………………………………. 372

21.1.3. Рисование графиков разных типов……………………………………………………………………. 373

21.1.4. Вывод и оформление графиков………………………………………………………………………….. 377

21.2. Библиотека NumPy: обработка многомерных массивов…………………………………………….. 378

21.3. Что еще нужно знать о библиотеках Matplotlib и NumPy…………………………………………… 382

Урок 22. Искусственный интеллект……………………………………………………… 383

22.1. Регистрация в личном кабинете GigaChat API и получение ключа авторизации…….. 383

22.2. Библиотеки LangChain, langchain-community и langchain-gigachat……………………………. 384

22.3. Разработка ИИ-клиентов………………………………………………………………………………………………… 384

22.3.1. Соединение с большой языковой моделью………………………………………………………. 384

22.3.2. ИИ-клиент: отправка запросов и получение ответов………………………………………. 385

22.3.3. ИИ-клиент: хранение истории взаимодействия с языковой моделью…………….. 387

22.3.4. ИИ-клиент: очистка истории……………………………………………………………………………… 388

22.3.5. Получение ответа по частям……………………………………………………………………………… 390

22.3.6. Конкурентная работа с языковыми моделями…………………………………………………. 391

22.4. Разработка ИИ-агентов………………………………………………………………………………………………….. 392

22.4.1. Объявление инструментов………………………………………………………………………………….. 392

22.4.1.1. Инструмент для поиска в Интернете средствами DuckDuckGo………. 393

22.4.2. Создание ИИ-агента……………………………………………………………………………………………. 393

22.4.3. ИИ-агент: отправка запросов и получение ответов…………………………………………. 394

22.4.4. Обработка ответов……………………………………………………………………………………………… 396

22.4.5. ИИ-агент: хранение истории взаимодействия с языковой моделью………………. 397

22.4.6. Работа с состоянием ИИ-агента………………………………………………………………………… 399

22.4.7. ИИ-агент: очистка истории………………………………………………………………………………… 400

22.5. Что еще нужно знать о работе с искусственным интеллектом…………………………………… 401

22.6. Самостоятельное упражнение………………………………………………………………………………………. 402

Заключение………………………………………………………………………………………….. 403

Приложения…………………………………………………………………………………… 405

Приложение 1. Установка исполняющей среды Python………………………… 407

Приложение 2. Приоритет операторов Python………………………………………. 411

Приложение 3. Использование ИИ для изучения Python
и написания программного кода………………………………………………………….. 412

Приложение 4. Описание файлового архива………………………………………… 416

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

Опубликовано

Встречайте: “Python для инженерных задач”

Python для инженерных задач

Книга предназначена для изучения языка Python с ориентацией на использование его в инженерных и научных вычислениях, начиная с установки интерпретатора и изучения основ языка и до применения специализированных библиотек. Основные темы касаются встроенных типов языка, функций и аннотации типов, особенностей динамической типизации, форматирования и обработки текста, в том числе с использованием регулярных выражений, работа с файлами. Подробно рассматриваются основные идеи объектно-ориентированного программирования и его особенности в Python. Также затрагиваются темы обработки исключений, тестирования приложений, описываются некоторые модули из стандартной библиотеки, а также множество сторонних библиотек, в частности, NumPy для математических вычислений, Pandas для обработки табличных данных, Matplotlib для построения различных видов графиков, библиотеки для работы с различными форматами файлов. Рассматриваются такие инструменты, как IPython и JupyterLab, применяемые в научных и инженерных областях.

Для студентов инженерных специальностей, а также для начинающих изучать язык

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

В настоящее время Python является одним из наиболее популярных языков программирования. Благодаря легкости его изучения и удобству использования Python нашел применение в различных областях: начиная с создания веб-сервисов, приложений для ПК, маленьких скриптов, выполняющих однотипные задачи, до работы с нейронными сетями,   статистики в машинном обучении,  обработки данных. Также Python широко применяется для решения научных и инженерных задач благодаря многочисленным сторонним библиотекам. Python — лаконичный язык, он позволяет быстро писать код, реализующий требуемый алгоритм, отлаживать его и гарантировать работоспособность..  Python закрепился в научной среде и в образовании и является де-факто стандартным инструментом для решения математических задач, обработки табличных данных, построения графиков многих видов,.

Эта книга предназначена для обучения языку Python именно в таком направлении. Книга начинается с самых основ языка Python, его синтаксиса и базовых типов, затем описываются основные идеи объектно-ориентированного программирования и их реализация на Python. Наконец, рассказывается о стандартной библиотеке Python и множестве сторонних библиотек и инструментов, облегчающих работу в инженерной и научных областях.

 

  • Установка интерпретатора Python
  • Основы языка Python: описание синтаксиса и встроенных типов
  • Функции и аннотации типов
  • Объектно-ориентированное программирование
  • Обработка исключений
  • Работа с текстом и регулярные выражения
  • Установка сторонних библиотек и использование виртуальных окружений
  • Работа с файлами и файловой системой
  • Тестирование приложений
  • Библиотека NumPy для математических расчетов
  • Форматы хранения данных, используемые в научной среде
  • Построение двумерных и трехмерных графиков с помощью библиотеки Matplotlib
  • Работа с табличными данными с помощью библиотеки Pandas
  • Среды выполнения скриптов IPython и JupyterLab

Красивое лучше, чем уродливое. Явное лучше, чем неявное. Простое лучше, чем сложное. Из кодекса «Дзен Python»

 

Ильин Евгений

Евгений Ильин — кандидат технических наук, доцент кафедры «Радиофизика, антенны и микроволновая техника», входящей в состав института «Радиоэлектроника, инфокоммуникации и информационная безопасность» Московского авиационного института (национального исследовательского университета). Ведет курсы «Языки программирования в задачах радиофизики» и «Моделирование электродинамических задач численными методами». Сфера интересов и компетенций — языки программирования (Python, Rust и Java), электродинамика, антенны и устройства СВЧ, а также алгоритмы для их моделирования.

Книгу “Python для инженерных задач” можно купить в нашем интенет-магазине.

Предисловие. 13

Для кого эта книга?. 13

Структура книги. 13

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

Введение. 17

Общие сведения о Python. 17

Области применения Python. 18

Зачем Python инженеру?. 20

Типы языков программирования. 22

Компилируемые языки программирования. 22

Интерпретируемые языки программирования. 24

Языки программирования, компилируемые в байт-код. 25

Исходные коды к книге. 27

ЧАСТЬ I. Базовые понятия и встроенные типы.. 29

– ГЛАВА 1 –

Первое знакомство с Python. 31

Установка интерпретатора Python под Windows. 31

Hello, world! Работаем в интерактивном режиме. 37

Создание переменных. 39

Заключение. 43

– ГЛАВА 2 –

Простейшие типы и математика в Python. 45

Коротко о терминологии. 45

Целые числа. 46

Числа с плавающей точкой. 47

Комплексные числа. 49

Логический (булев) тип переменных. 52

Объект None. 53

Математические операторы.. 54

Приоритет операторов. 57

Инструкции присваивания. 58

Математические функции и модуль math. 59

Модуль cmath. 65

Заключение. 66

– ГЛАВА 3 –

Пишем скрипты на Python. 68

Создание скриптов. 68

Выполнение скриптов. 70

Комментарии и указание кодировки файла скрипта. 72

Инструкция ветвления if … elif … else. 74

Переносы строк. 79

Выражение if … else. 80

Цикл while. 81

Оператор :=. 84

Инструкция assert 86

Python Enhancement Proposals (PEP) 87

Заключение. 88

– ГЛАВА 4 –

Списки, кортежи и массивы.. 90

Способы хранения данных. 90

Массивы.. 90

Списки. 92

Кортежи. 93

Создание списков. 94

Создание кортежей. 95

Создание массивов. 96

Преобразование списков, кортежей и массивов друг в друга. 98

Доступ к элементам по индексу. 99

Срезы.. 101

Выполнение присваивания для сложных объектов. Операторы is и is not 104

Операторы in и not in. 109

Распаковка элементов коллекций. 109

Основные методы классов list, tuple и array. 111

Заключение. 118

– ГЛАВА 5 –

Перебор элементов коллекций. 119

Инструкция for … in. 119

Создание списков с помощью инструкции for … in. 123

Создание последовательности целых чисел. Класс range. 125

Перебор элементов с нумерацией. Класс enumerate. 127

Параллельный перебор элементов из нескольких коллекций. Класс zip. 128

Заключение. 132

– ГЛАВА 6 –

Словари. 133

Что такое «словари» и зачем они нужны?. 133

Создание словарей. 134

Основные операции со словарями. 136

Ограничения на типы ключей. 140

Обход элементов словаря с помощью цикла for. 141

Заключение. 143

– ГЛАВА 7 –

Множества. 144

Что такое множества и зачем они нужны?. 144

Создание множеств. 144

Создание неизменяемых множеств. 146

Основные операции над множествами. 146

Методы и операторы классов set и frozenset 147

Заключение. 152

– ГЛАВА 8 –

Строки. 153

Создание строк. 154

Многострочные литералы.. 154

Вставка символов Unicode. 158

«Сырые» строки. 159

Создание строкового представления чисел и других объектов. 160

Базовые операции над строками. 160

Некоторые методы класса str. 162

Заключение. 169

– ГЛАВА 9 –

Форматирование строк. 170

Использование оператора %.. 171

Использование метода format() 177

f-строки. 181

Заключение. 187

Часть II. Основные подходы.. 189

– ГЛАВА 10 –

Функции. 191

Создание функций. 191

«Утиная» типизация. 195

Именованные параметры функций. 197

Параметры со значениями по умолчанию.. 198

Функции с переменным числом позиционных параметров. 201

Функции с переменным числом именованных параметров. 202

Разделители параметров / и *. 205

Функции и глобальные переменные. 208

Заключение. 211

– ГЛАВА 11 –

Функции как объекты.. 212

Функция — это тоже объект. 212

Анонимные функции. 214

Строки документации. 218

Декораторы.. 221

Заключение. 228

– ГЛАВА 12 –

Модули и пакеты модулей. 229

Создание и импорт модулей. 229

Выполнение кода модулей при импорте. Переменные __name__ и __file__. 232

Пакеты модулей. 236

Заключение. 240

– ГЛАВА 13 –

Объектно-ориентированное программирование. Создание классов. 241

Что такое объектно-ориентированное программирование?. 241

Создание классов. 244

Видимость полей и методов классов. 248

Свойства. 251

Поля класса. 252

Методы класса. 255

Статические методы.. 257

Заключение. 259

– ГЛАВА 14 –

Объектно-ориентированное программирование.
Наследование и полиморфизм.. 260

Что такое наследование классов?. 260

Наследование классов. 260

Абстрактные базовые классы.. 267

Что такое полиморфизм?. 273

Множественное наследование. 273

Функции для определения родительских отношений классов. Класс object 280

Заключение. 282

– ГЛАВА 15 –

«Магические» методы классов и перегрузка операторов. 284

«Магические» методы классов. 284

Примеры перегрузки операторов. 286

Заключение. 296

– ГЛАВА 16 –

Сторонние библиотеки и инструменты для работы с ними. 298

Установка пакетов с помощью pip. 298

Файл зависимостей requirements.txt 304

Обновление и удаление пакетов. 305

Заключение. 307

– ГЛАВА 17 –

Виртуальные окружения. 308

Программа venv. 308

Работа с виртуальными окружениями. 311

Программа Poetry. 311

Создание проекта с помощью Poetry. Файл pyproject.toml 312

Создание виртуального окружения для проекта с помощью Poetry. 315

Менеджер пакетов и проектов uv. 319

Создание проекта с помощью uv. 320

Создание виртуального окружения для проекта с помощью uv. 322

Заключение. 326

– ГЛАВА 18 –

Аннотации типов. 328

Проблемы динамической типизации. 328

Что такое «аннотации типов» и зачем они нужны?. 329

Знакомство с Mypy. 331

Указание простейших типов и коллекций. 332

Обобщенные типы.. 338

Заключение. 342

– ГЛАВА 19 –

Обработка исключений. 344

Обработка ошибок без использования исключений. 344

Что такое исключения, как и зачем их ловить?. 345

Перехват исключений. 349

Пользовательские исключения. Наследование исключений. 352

Конструкция try except else finally. 358

Заключение. 363

– ГЛАВА 20 –

Запись и чтение файлов. 364

Открытие файла и запись текстовых данных. 364

Закрытие файлов. Инструкция with. 369

Чтение текстовых данных. 371

Двоичные строки. 373

Запись и чтение двоичных данных. 378

Коротко о сериализации и десериализации. 383

Заключение. 386

– ГЛАВА 21 –

Работа с файловой системой. 387

Проблема формирования путей до файлов. 387

Формирование путей до файлов. Модуль os.path. 388

Формирование путей до файлов. Модуль pathlib. 395

Создание, копирование, перемещение и удаление файлов и каталогов. 399

Создание пустых файлов. 399

Создание каталогов. 399

Копирование файлов. 401

Копирование каталогов. 403

Удаление файлов и каталогов. 404

Переименование и перемещение файлов и каталогов. 405

Заключение. 408

– ГЛАВА 22 –

Передача параметров через командную строку. 410

Зачем это надо?. 410

Разбор параметров командной строки без использования библиотек. 412

Разбор командной строки с помощью модуля argparse. 415

Заключение. 425

– ГЛАВА 23 –

Регулярные выражения. 427

Что такое «регулярные выражения» и когда их используют?. 427

Символы подстановки. 428

Параметры регулярных выражений. 433

Инструкции группировки. 434

Поиск и замена с помощью регулярных выражений. 440

Коротко про функции из модуля re. 444

Заключение. 444

– ГЛАВА 24 –

Тестирование приложений. 446

Зачем нужны тесты, и какие они бывают?. 446

Создание тестов с помощью модуля unittest 447

Добавим еще тесты.. 453

Подготовка данных для тестов. 456

Способы запуска тестов. 458

Тесты в строках документации. 460

Заключение. 464

ЧАСТЬ III. Python для научных вычислений. 467

– ГЛАВА 25 –

Массивы из библиотеки NumPy. 469

Массивы NumPy. 469

Способы создания массивов. 472

Основные операции над массивами. 477

Индексация, срезы и виды.. 480

Формы массивов. 484

Транслирование (broadcasting) 490

Булевы массивы и фильтрация элементов по условию.. 492

Использование целочисленных массивов в качестве индексов. 495

Заключение. 496

– ГЛАВА 26 –

Форматы файлов для хранения числовых данных. 498

Текстовые файлы, хранящие данные в столбцах. 498

Работа с данными в формате CSV.. 504

Файлы форматов NPY и NPZ. 506

Файлы формата HDF5. 508

Создание файлов в формате HDF5. 509

Сторонние приложения для работы с файлами формата HDF5. 511

Чтение файлов в формате HDF5. 513

Другие форматы данных. 514

Заключение. 515

– ГЛАВА 27 –

Основы построения графиков с помощью библиотеки Matplotlib. 517

Установка библиотеки и первые примеры графиков. 517

Настройка внешнего вида кривых на графиках. 521

Способы задания цвета. 522

Стили линий. 524

Маркеры.. 525

Краткий способ задания внешнего вида кривых. 528

Несколько графиков в одних осях. 528

Добавление легенды.. 530

Создание нескольких графиков в одном окне на разных осях. 532

Настройка осей графика. 535

Объектно-ориентированный подход к построению графиков. 540

Заключение. 545

– ГЛАВА 28 –

Построение с помощью библиотеки Matplotlib более сложных графиков. 547

Диаграммы рассеяния. 547

Графики в полярной системе координат. 550

Столбчатые диаграммы.. 553

Круговые диаграммы.. 558

Построение трехмерных графиков. 562

Линии уровня. 571

Отображение векторов. 575

Заключение. 579

– ГЛАВА 29 –

Знакомство с Pandas. 581

Установка библиотеки Pandas. 581

Чтение файлов в формате CSV.. 582

Создание экземпляров класса DataFrame. 589

Выбор элементов и фильтрация данных из DataFrame. 591

Обработка данных с помощью DataFrame. 598

Группировка. 607

Заключение. 611

– ГЛАВА 30 –

Библиотека SciPy: решение сложных научных и инженерных задач. 613

Физические константы и специальные математические функции. 613

Преобразование Фурье. 619

Заключение. 640

– ГЛАВА 31 –

Интерактивные среды IPython и JupyterLab. 642

IPython — более удобный REPL. 642

От IPython к JupyterLab. 648

Заключение. 659

Заключение ко всей книге. 661

Литература. 662

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

Опубликовано

Встречайте: “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python”

Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python

Практическое руководство по анализу данных, раскрывающее полный цикл работы с информацией: от сбора и обработки до построения моделей машинного обучения. Рассмотрена работа с инструментами pandas и SQL, методы выявления закономерностей и очистки данных. Описаны различные источники информации, включая текстовые, бинарные и веб-данные. Подробно изложены статистические методы: доверительные интервалы, проверка гипотез, конструирование признаков. Приведены практические примеры на языке Python из разных областей: анализ транспортных систем, экологические исследования, ветеринарная аналити-ка. Заключительные разделы посвящены логистической регрессии и оптимизации моделей с применением к задачам классификации текстов.

Для начинающих специалистов в области Data Science , аналитиков данных и широкого круга ИТ-специалистов

Именно такой книги нам не хватало, когда мы впервые ввели термин «data scientist» для описания своей профессии. Если вы планируете заниматься наукой о данных, инженерией данных, искусственным интеллектом или машинным обучением, то вам непременно следует начать с нее.
 Ди Джей Патил, PhD, первый в США ведущий data scientist

Как начинающий специалист в области науки о данных (Data Science), вы понимаете, почему в процессе принятия ключевых решений организации полагаются на данные – будь то компании, занимающиеся разработкой веб-сайтов, местные администрации, работающие над повышением качества муниципальных услуг, или научно-исследовательские институты, борющиеся с распространением заболеваний.

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

Перед вами первая книга, в которой рассматриваются базовые навыки программирования и статистики, охватывающие весь жизненный цикл. Она адресована всем желающим работать в области Data Science или любой другой смежной области, а также аналитикам данных, преодолевающим разрыв между техническими и нетехническими областями. Если вы обладаете базовыми знаниями программирования на Python, вы научитесь работать с данными при помощи стандартных инструментов вроде pandas.

Прочитав книгу, вы сможете:

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

Книгу “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python” можно купить в нашем интенет-магазине.

Отзывы на книгу…………………………………………………………………………………… 13

Предисловие…………………………………………………………………………………………… 14

Требуемые базовые знания……………………………………………………………………………………………………….. 15

Структура книги………………………………………………………………………………………………………………………… 15

Принятые условные обозначения…………………………………………………………………………………………….. 16

Примеры применения кода……………………………………………………………………………………………………….. 16

Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 17

Наши контакты………………………………………………………………………………………………………………………….. 17

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

Часть I. Жизненный цикл Data Science………………………………….. 19

Глава 1. Жизненный цикл Data Science………………………………………………….. 21

Этапы жизненного цикла………………………………………………………………………………………………………….. 21

Примеры жизненного цикла……………………………………………………………………………………………………… 24

Краткие выводы…………………………………………………………………………………………………………………………. 25

Глава 2. Постановка вопроса и охват данных……………………………………….. 26

Большие данные и новые возможности…………………………………………………………………………………… 26

Пример: Google Flu Trends……………………………………………………………………………………………… 27

Целевая совокупность, фрейм доступных данных, выборка…………………………………………………. 29

Пример: что побуждает к активности участников онлайн-сообщества?………………….. 31

Пример: кто победит на выборах?………………………………………………………………………………… 31

Пример: связь экологических угроз со здоровьем человека……………………………………….. 32

Инструменты и протоколы……………………………………………………………………………………………………….. 34

Измерение параметров природных явлений……………………………………………………………………………. 34

Пример: определение содержания CO2 в воздухе……………………………………………………….. 35

Точность……………………………………………………………………………………………………………………………………… 36

Виды смещения……………………………………………………………………………………………………………….. 38

Виды дисперсии……………………………………………………………………………………………………………… 40

Краткие выводы…………………………………………………………………………………………………………………………. 41

Глава 3. Структура данных и моделирование………………………………………… 43

Урновая модель………………………………………………………………………………………………………………………….. 44

Схемы выборки……………………………………………………………………………………………………………….. 46

Выборочное распределение статистики………………………………………………………………………. 48

Моделирование выборочного распределения…………………………………………………………….. 49

Моделирование при помощи гипергеометрического распределения……………………….. 50

Пример: моделирование смещения и дисперсии опросов избирателей……………………………….. 52

Урновая модель опросов в Пенсильвании……………………………………………………………………. 53

Урновая модель со смещением……………………………………………………………………………………… 55

Проведение более масштабных опросов……………………………………………………………………… 56

Пример: моделирование рандомизированного испытания вакцины……………………………………. 58

Охват……………………………………………………………………………………………………………………………….. 58

Урновая модель случайного распределения……………………………………………………………….. 60

Пример: измерение качества воздуха………………………………………………………………………………………. 61

Краткие выводы…………………………………………………………………………………………………………………………. 64

Глава 4. Моделирование при помощи сводной статистики……………………. 66

Константная модель………………………………………………………………………………………………………………….. 66

Минимизация потерь…………………………………………………………………………………………………………………. 68

Средняя абсолютная ошибка………………………………………………………………………………………… 69

Среднеквадратичная ошибка………………………………………………………………………………………… 72

Выбор функции потерь…………………………………………………………………………………………………… 74

Краткие выводы…………………………………………………………………………………………………………………………. 74

Глава 5. Пример из практики: почему мой автобус всегда опаздывает?… 76

Постановка вопроса и охват данных………………………………………………………………………………………. 76

Первичная обработка данных………………………………………………………………………………………………….. 77

Изучение расписания автобусов………………………………………………………………………………………………. 80

Моделирование времени ожидания…………………………………………………………………………………………. 83

Краткие выводы…………………………………………………………………………………………………………………………. 87

Часть II. Табличные данные………………………………………………………. 89

Глава 6. Работа с датафреймами с помощью pandas………………………………. 91

Подмножество……………………………………………………………………………………………………………………………. 92

Охват данных и постановка вопроса……………………………………………………………………………. 92

Датафрейм и индекс……………………………………………………………………………………………………….. 93

Срез………………………………………………………………………………………………………………………………….. 94

Фильтрация строк…………………………………………………………………………………………………………… 98

Пример: когда стало популярным имя Luna?……………………………………………………………. 100

Агрегирование………………………………………………………………………………………………………………………….. 102

Агрегирование и базовая группировка………………………………………………………………………. 103

Пример: использование функции .value_counts()………………………………………………. 104

Группировка по нескольким столбцам………………………………………………………………………. 105

Пользовательские агрегатные функции……………………………………………………………………… 106

Поворот…………………………………………………………………………………………………………………………. 109

Соединение………………………………………………………………………………………………………………………………. 110

Внутренние соединения……………………………………………………………………………………………….. 111

Левые, правые и внешние соединения………………………………………………………………………… 113

Пример: популярность категорий имен из статьи New York Times…………………………… 114

Преобразование……………………………………………………………………………………………………………………….. 116

Метод apply…………………………………………………………………………………………………………………… 117

Пример: популярность имен на букву “L”………………………………………………………………….. 118

Цена метода apply………………………………………………………………………………………………………… 120

Отличие датафрейма от других представлений данных……………………………………………………… 121

Датафрейм и электронная таблица…………………………………………………………………………….. 121

Датафрейм и матрица………………………………………………………………………………………………….. 121

Датафрейм и отношение………………………………………………………………………………………………. 122

Краткие выводы……………………………………………………………………………………………………………………….. 123

Глава 7. Работа с отношениями с помощью SQL………………………………….. 124

Подмножество………………………………………………………………………………………………………………………….. 124

Основы SQL: SELECT и FROM…………………………………………………………………………………….. 125

Что такое отношение?………………………………………………………………………………………………….. 126

Срез………………………………………………………………………………………………………………………………… 126

Фильтрация строк…………………………………………………………………………………………………………. 128

Пример: когда стало популярным имя Luna?……………………………………………………………. 129

Агрегирование………………………………………………………………………………………………………………………….. 131

Базовая группировка и агрегирование с помощью GROUP BY………………………………… 131

Группировка по нескольким столбцам………………………………………………………………………. 132

Другие агрегатные функции………………………………………………………………………………………… 133

Соединение………………………………………………………………………………………………………………………………. 134

Внутренние соединения……………………………………………………………………………………………….. 135

Левые и правые соединения………………………………………………………………………………………… 136

Пример: популярность категорий имен из статьи NYT……………………………………………… 137

Преобразование и обобщенные табличные выражения………………………………………………………. 138

Функции SQL…………………………………………………………………………………………………………………. 139

Многошаговые запросы с использованием оператора WITH…………………………………… 141

Пример: популярность имен на букву “L”………………………………………………………………….. 142

Краткие выводы……………………………………………………………………………………………………………………….. 142

Часть III. Осмысление данных……………………………………………….. 145

Глава 8. Первичная обработка файлов…………………………………………………. 147

Примеры источников данных…………………………………………………………………………………………………. 148

Исследование DAWN……………………………………………………………………………………………………. 148

Безопасность пищевых продуктов в ресторанах Сан-Франциско…………………………… 149

Форматы файлов……………………………………………………………………………………………………………………… 150

Формат с разделителями……………………………………………………………………………………………… 150

Формат с фиксированной шириной…………………………………………………………………………….. 152

Иерархические форматы……………………………………………………………………………………………… 153

Свободно форматированный текст…………………………………………………………………………….. 153

Кодировка файла…………………………………………………………………………………………………………………….. 154

Размер файла……………………………………………………………………………………………………………………………. 156

Командная оболочка и инструменты командной строки…………………………………………………….. 159

Форма и гранулярность таблицы…………………………………………………………………………………………… 163

Гранулярность данных о проверках и нарушениях в ресторанах………………………….. 164

Форма и гранулярность исследования DAWN…………………………………………………………… 166

Краткие выводы……………………………………………………………………………………………………………………….. 168

Глава 9. Первичная обработка датафрейма………………………………………….. 170

Пример: первичная обработка результатов измерений содержания CO2
в обсерватории Мауна-Лоа……………………………………………………………………………………………………. 171

Проверка качества……………………………………………………………………………………………………….. 174

Обработка недостающих данных………………………………………………………………………………. 176

Изменение формы таблицы данных……………………………………………………………………………. 177

Проверка качества данных…………………………………………………………………………………………………….. 178

Качество в плане охвата……………………………………………………………………………………………… 179

Качество измерений и регистрируемых значений…………………………………………………….. 179

Качество в плане связанных признаков……………………………………………………………………… 180

Проверка качества на пригодность к исследованию………………………………………………… 181

Выяснение необходимости в исправлении данных…………………………………………………… 182

Пропущенные значения и записи…………………………………………………………………………………………… 183

Преобразования и временне метки………………………………………………………………………………………. 185

Преобразование временнх меток……………………………………………………………………………… 186

Конвейеризация в преобразованиях…………………………………………………………………………… 188

Изменение структуры………………………………………………………………………………………………………………. 190

Пример: первичная обработка данных о нарушениях правил безопасности в ресторанах 192

Сужение фокуса……………………………………………………………………………………………………………. 193

Агрегирование данных о нарушениях……………………………………………………………………….. 194

Извлечение информации из описания нарушений…………………………………………………….. 196

Краткие выводы……………………………………………………………………………………………………………………….. 199

Глава 10. Разведочный анализ данных………………………………………………… 201

Типы признаков данных………………………………………………………………………………………………………….. 202

Пример: породы собак…………………………………………………………………………………………………. 204

Преобразование качественных признаков…………………………………………………………………. 210

Переразметка категорий……………………………………………………………………………………… 210

Сворачивание категорий…………………………………………………………………………………….. 211

Преобразование количественных значений в порядковые………………………………. 212

Роль типов признаков…………………………………………………………………………………………………… 213

На что обратить внимание в распределении………………………………………………………………………… 214

Что необходимо выяснить во взаимосвязи…………………………………………………………………………….. 218

Два количественных признака……………………………………………………………………………………. 218

Один качественный и один количественный признак……………………………………………….. 219

Два качественных признака………………………………………………………………………………………… 221

Сравнения в многомерных системах……………………………………………………………………………………… 223

Руководящие принципы разведочного анализа……………………………………………………………………. 226

Пример: цены на жилую недвижимость………………………………………………………………………………… 227

Изучение цен…………………………………………………………………………………………………………………. 228

Дальнейшие шаги…………………………………………………………………………………………………………. 230

Изучение прочих признаков………………………………………………………………………………………… 231

Углубленный анализ взаимосвязей…………………………………………………………………………….. 234

Фиксация местоположения………………………………………………………………………………………….. 236

Результаты EDA……………………………………………………………………………………………………………. 238

Краткие выводы……………………………………………………………………………………………………………………….. 239

Глава 11. Визуализация данных…………………………………………………………… 240

Выбор масштаба для выяснения структуры…………………………………………………………………………. 240

Заполнение области данных……………………………………………………………………………………….. 241

Учет нулевого значения……………………………………………………………………………………………….. 242

Выяснение формы данных с помощью преобразований………………………………………….. 244

Кренение для расшифровки взаимосвязей…………………………………………………………………. 246

Выявление взаимосвязей с помощью спрямления……………………………………………………… 247

Сглаживание и агрегирование данных………………………………………………………………………………….. 249

Методы сглаживания для определения формы данных……………………………………………. 250

Методы сглаживания для выявления взаимосвязей и тенденций…………………………….. 252

Настройка методов сглаживания……………………………………………………………………………….. 254

Сведение распределений к квантилям………………………………………………………………………… 255

Случаи, когда сглаживание нежелательно………………………………………………………………… 257

Упрощение значимых сравнений…………………………………………………………………………………………… 259

Подчеркивание важного различия……………………………………………………………………………… 259

Упорядочивание групп………………………………………………………………………………………………… 261

Отказ от стекинга………………………………………………………………………………………………………….. 263

Выбор цветовой палитры…………………………………………………………………………………………….. 265

Принципы проведения сравнений на графиках…………………………………………………………. 266

Учет особенностей исходных данных при визуализации……………………………………………………. 267

Данные, собранные с течением времени……………………………………………………………………. 268

Исследования по данным наблюдений………………………………………………………………………. 269

Неравномерная выборка……………………………………………………………………………………………… 271

Географические данные………………………………………………………………………………………………. 272

Добавление контекста…………………………………………………………………………………………………………….. 273

Пример: результаты 100-метрового спринта…………………………………………………………….. 273

Создание графиков с помощью plotly……………………………………………………………………………………. 275

Объекты Figure и Trace………………………………………………………………………………………………… 276

Изменение макета…………………………………………………………………………………………………………. 277

Функции построения графиков……………………………………………………………………………………. 279

Аннотации к изображению………………………………………………………………………………………….. 281

Другие инструменты визуализации……………………………………………………………………………………….. 282

Matplotlib………………………………………………………………………………………………………………………. 282

Грамматика графики……………………………………………………………………………………………………. 282

Краткие выводы……………………………………………………………………………………………………………………….. 283

Глава 12. Тематическое исследование: проверка точности показателей качества воздуха         285

Постановка вопроса, структура и охват данных…………………………………………………………………. 286

Поиск близко расположенных датчиков……………………………………………………………………………….. 288

Первичная обработка списка локаций AQS………………………………………………………………. 288

Первичная обработка списка локаций PurpleAir……………………………………………………….. 291

Сопоставление датчиков AQS и PurpleAir………………………………………………………………….. 292

Первичная обработка и очистка данных датчиков AQS……………………………………………………… 294

Проверка гранулярности……………………………………………………………………………………………… 295

Удаление ненужных столбцов…………………………………………………………………………………….. 296

Проверка достоверности дат………………………………………………………………………………………. 297

Проверка качества показателей PM2.5………………………………………………………………………. 298

Первичная обработка показаний датчиков PurpleAir…………………………………………………………… 299

Проверка гранулярности……………………………………………………………………………………………… 300

Визуализация временнх меток…………………………………………………………………………. 302

Проверка частоты выборки…………………………………………………………………………………. 303

Обработка пропущенных значений……………………………………………………………………………. 305

Разведочный анализ показаний PurpleAir и AQS…………………………………………………………………… 306

Создание модели для корректировки показаний PurpleAir………………………………………………….. 312

Краткие выводы……………………………………………………………………………………………………………………….. 314

Часть IV. Другие источники данных…………………………………….. 317

Глава 13. Операции с текстом………………………………………………………………. 319

Примеры текстов и заданий……………………………………………………………………………………………………. 319

Преобразование текста в стандартный формат………………………………………………………… 319

Извлечение фрагмента текста для создания признака……………………………………………… 320

Преобразование текста в признаки…………………………………………………………………………….. 320

Анализ текста……………………………………………………………………………………………………………….. 321

Манипуляции со строками……………………………………………………………………………………………………… 322

Преобразование текста в стандартный формат с помощью строковых методов Python           322

Строковые методы в pandas………………………………………………………………………………………… 323

Извлечение фрагментов текста с помощью разделения строк…………………………………. 324

Регулярные выражения……………………………………………………………………………………………………………. 325

Конкатенация литералов…………………………………………………………………………………………….. 325

Классы символов………………………………………………………………………………………………….. 326

Символ подстановки……………………………………………………………………………………………. 327

Инвертированные классы символов…………………………………………………………………… 327

Сокращения классов символов…………………………………………………………………………… 327

Анкоры и границы………………………………………………………………………………………………… 327

Исключение метасимволов………………………………………………………………………………….. 328

Квантификаторы…………………………………………………………………………………………………………… 328

Создание признаков при помощи чередования и группировки……………………………….. 330

Справочные таблицы…………………………………………………………………………………………………… 331

Анализ текста…………………………………………………………………………………………………………………………… 333

Краткие выводы……………………………………………………………………………………………………………………….. 338

Глава 14. Обмен данными……………………………………………………………………. 339

Формат NetCDF………………………………………………………………………………………………………………………… 339

Формат JSON……………………………………………………………………………………………………………………………. 344

HTTP…………………………………………………………………………………………………………………………………………. 348

REST………………………………………………………………………………………………………………………………………….. 352

XML, HTML, XPath………………………………………………………………………………………………………………….. 356

Пример: веб-скрапинг результатов забегов из Википедии……………………………………….. 359

XPath……………………………………………………………………………………………………………………………… 361

Пример: доступ к курсам валют ЕЦБ…………………………………………………………………………. 363

Краткие выводы……………………………………………………………………………………………………………………….. 366

Часть V. Линейное моделирование………………………………………. 369

Глава 15. Линейные модели…………………………………………………………………. 371

Простая линейная модель……………………………………………………………………………………………………….. 372

Пример: простая линейная модель оценки качества воздуха……………………………………………… 375

Интерпретация линейных моделей…………………………………………………………………………….. 377

Оценка качества подгонки…………………………………………………………………………………………… 378

Подгонка простой линейной модели……………………………………………………………………………………… 379

Модель множественной линейной регрессии……………………………………………………………………….. 381

Подбор параметров модели множественной линейной регрессии……………………………………… 386

Пример: где находится страна возможностей?…………………………………………………………………….. 389

Объяснение восходящей мобильности на основе времени в пути на работу…………. 391

Связь восходящей мобильности с использованием нескольких переменных…………. 393

Конструирование признаков для числовых измерений……………………………………………………….. 397

Конструирование признаков для категориальных измерений……………………………………………. 401

Краткие выводы……………………………………………………………………………………………………………………….. 408

Глава 16. Выбор модели……………………………………………………………………….. 410

Переобучение…………………………………………………………………………………………………………………………… 411

Пример: энергопотребление………………………………………………………………………………………… 411

Метод train_test_split………………………………………………………………………………………………………………. 416

Перекрестная проверка…………………………………………………………………………………………………………… 420

Регуляризация………………………………………………………………………………………………………………………….. 425

Смещение и дисперсия модели……………………………………………………………………………………………….. 426

Краткие выводы……………………………………………………………………………………………………………………….. 429

Глава 17. Теория логического вывода и прогнозирования…………………… 431

Распределения: популяционное, эмпирическое, выборочное……………………………………………… 431

Принципы проверки гипотез…………………………………………………………………………………………………… 433

Пример: ранговый критерий сравнения продуктивности соавторов Википедии…… 435

Пример: проверка эффективности вакцины с помощью пропорций………………………… 439

Бутстрап-процедура построения выводов……………………………………………………………………………. 441

Доверительный интервал………………………………………………………………………………………………………… 446

Интервал прогнозирования…………………………………………………………………………………………………….. 449

Пример: прогнозирование опоздания автобуса………………………………………………………… 449

Пример: прогнозирование размера краба………………………………………………………………….. 450

Пример: прогнозирование прироста краба……………………………………………………………….. 451

Вероятность выводов и прогнозов…………………………………………………………………………………………. 454

Формализация теории для статистик средних рангов………………………………………………. 454

Общие свойства случайных величин………………………………………………………………………….. 457

Вероятность в основе интервалов и тестирования……………………………………………………. 459

Вероятность в основе выбора модели………………………………………………………………………… 462

Краткие выводы……………………………………………………………………………………………………………………….. 464

Глава 18. Тематическое исследование: как взвесить осла……………………. 466

Постановка вопроса и охват данных…………………………………………………………………………………….. 466

Первичная обработка и преобразование данных………………………………………………………………… 467

Разведочный анализ данных………………………………………………………………………………………………….. 472

Моделирование веса осла………………………………………………………………………………………………………. 475

Функция потерь при назначении анестетиков…………………………………………………………… 475

Построение простой линейной модели………………………………………………………………………. 476

Подгонка множественной линейной модели……………………………………………………………… 478

Добавление в модель качественных признаков…………………………………………………………. 479

Оценка модели………………………………………………………………………………………………………………. 482

Краткие выводы……………………………………………………………………………………………………………………….. 484

Часть VI. Классификация………………………………………………………….. 487

Глава 19. Классификация…………………………………………………………………….. 489

Пример: поваленные ураганом деревья………………………………………………………………………………… 489

Моделирование и классификация………………………………………………………………………………………….. 492

Константная модель…………………………………………………………………………………………………….. 492

Исследование взаимосвязи между буреломом и размером деревьев………………………. 493

Моделирование долей (и вероятностей)……………………………………………………………………………….. 495

Логистическая модель………………………………………………………………………………………………….. 496

Логарифм отношения шансов……………………………………………………………………………………… 497

Применение логистической кривой…………………………………………………………………………….. 498

Функция потерь для логистической модели………………………………………………………………………….. 499

От вероятностей к классификации…………………………………………………………………………………………. 502

Матрица несоответствий…………………………………………………………………………………………….. 504

Точность и полнота……………………………………………………………………………………………………… 505

Краткие выводы……………………………………………………………………………………………………………………….. 508

Глава 20. Численная оптимизация……………………………………………………….. 509

Основы градиентного спуска………………………………………………………………………………………………….. 510

Минимизация потери Хубера…………………………………………………………………………………………………. 512

Выпуклые и дифференцируемые функции потерь………………………………………………………………… 514

Варианты градиентного спуска……………………………………………………………………………………………… 515

Стохастический градиентный спуск…………………………………………………………………………… 516

Мини-пакетный градиентный спуск…………………………………………………………………………… 517

Метод Ньютона……………………………………………………………………………………………………………. 517

Краткие выводы……………………………………………………………………………………………………………………….. 518

Глава 21. Тематическое исследование: распознавание
фейковых новостей………………………………………………………………………………. 520

Уточнение вопроса и выяснение охвата данных………………………………………………………………….. 521

Получение и “выпас” данных…………………………………………………………………………………………………. 522

Разведочный анализ данных………………………………………………………………………………………………….. 526

Разведочный анализ источников публикаций…………………………………………………………… 527

Разведочный анализ даты публикации………………………………………………………………………. 529

Разведочный анализ слов в статье……………………………………………………………………………… 530

Моделирование……………………………………………………………………………………………………………………….. 532

Однословная модель…………………………………………………………………………………………………….. 532

Многословная модель………………………………………………………………………………………………….. 534

Прогнозирование с помощью преобразования TF-IDF…………………………………………….. 536

Краткие выводы……………………………………………………………………………………………………………………….. 539

Приложение 1. Дополнительный материал…………………………………………… 541

Приложение 2. Источники данных………………………………………………………. 548

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

Об авторах……………………………………………………………………………………………. 558

Об изображении на обложке………………………………………………………………… 559

Опубликовано

Встречайте: “Django 5. Практика создания веб-сайтов на Python”

Django 5. Практика создания веб-сайтов на Python

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др.  Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

Электронное приложение-архив на сайте издательства содержит коды всех примеров.

Для веб-программистов

Python и Django — веб-разработка на современном уровне

Что такое веб-фреймворк?

Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

Книгу “Django 5. Практика создания веб-сайтов на Python” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………… 19

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 5.1 и этой книге?……………………………………………………………………………………… 21

Использованные программные продукты……………………………………………………………………………….. 22

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 26

1.1. Установка фреймворка……………………………………………………………………………………………………….. 26

1.2. Проект Django……………………………………………………………………………………………………………………… 27

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 28

1.4. Приложения…………………………………………………………………………………………………………………………. 29

1.5. Контроллеры……………………………………………………………………………………………………………………….. 31

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 32

1.7. Модели…………………………………………………………………………………………………………………………………. 35

1.8. Миграции…………………………………………………………………………………………………………………………….. 37

1.9. Консоль Django…………………………………………………………………………………………………………………… 39

1.10. Работа с моделями……………………………………………………………………………………………………………. 39

1.11. Шаблоны……………………………………………………………………………………………………………………………. 43

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 44

1.13. Административный веб-сайт Django………………………………………………………………………………. 46

1.14. Параметры полей и моделей……………………………………………………………………………………………. 51

1.15. Редактор модели……………………………………………………………………………………………………………….. 52

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 54

2.1. Связи между моделями……………………………………………………………………………………………………….. 54

2.2. Строковое представление модели…………………………………………………………………………………….. 56

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 57

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 61

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 63

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 63

2.7. Наследование шаблонов……………………………………………………………………………………………………. 66

2.8. Статические файлы…………………………………………………………………………………………………………….. 69

Часть II. Базовые инструменты Django………………………………… 73

Глава 3. Создание и настройка проекта…………………………………………………. 74

3.1. Подготовка к работе…………………………………………………………………………………………………………… 74

3.2. Создание проекта Django…………………………………………………………………………………………………… 76

3.3. Настройки проекта……………………………………………………………………………………………………………… 76

3.3.1. Основные настройки…………………………………………………………………………………………………….. 76

3.3.2. Параметры баз данных………………………………………………………………………………………………… 77

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 79

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 80

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 82

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 85

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 85

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 86

3.4.1. Создание приложений………………………………………………………………………………………………….. 86

3.4.2. Настройки приложений………………………………………………………………………………………………… 86

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 87

3.5. Средства отладки……………………………………………………………………………………………………………….. 88

3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 88

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 89

3.6. Работа с несколькими базами данных………………………………………………………………………………. 91

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 91

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 92

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………….. 92

3.6.2.2. Указание базы данных в административных командах………………………………….. 95

3.6.2.3. Ручная диспетчеризация данных………………………………………………………………………. 96

Глава 4. Модели: базовые инструменты…………………………………………………. 97

4.1. Объявление моделей…………………………………………………………………………………………………………… 97

4.2. Объявление полей модели………………………………………………………………………………………………….. 98

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………… 98

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 101

4.2.3. Создание полей со списком……………………………………………………………………………………….. 105

4.3. Создание связей между моделями…………………………………………………………………………………… 109

4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 109

4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 113

4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 114

4.4. Параметры самой модели………………………………………………………………………………………………… 116

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 123

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 132

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 142

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

Глава 6. Запись данных……………………………………………………………………….. 145

6.1. Правка записей………………………………………………………………………………………………………………….. 145

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 150

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 151

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 152

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 154

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 155

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

6.8. Массовые добавление, правка и удаление записей………………………………………………………. 157

6.9. Выполнение валидации модели………………………………………………………………………………………. 160

6.10. Асинхронная запись данных…………………………………………………………………………………………. 161

Глава 7. Выборка данных…………………………………………………………………….. 162

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 162

7.1.1. Извлечение значений из полей разных типов…………………………………………………………… 162

7.2. Доступ к связанным записям……………………………………………………………………………………………. 163

7.3. Выборка записей………………………………………………………………………………………………………………. 165

7.3.1. Выборка всех записей………………………………………………………………………………………………… 165

7.3.2. Извлечение одной записи…………………………………………………………………………………………… 166

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 167

7.3.4. Поиск записи……………………………………………………………………………………………………………….. 168

7.3.5. Фильтрация записей……………………………………………………………………………………………………. 169

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 170

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей….. 173

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………… 174

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……… 176

7.3.6.4. Сложные условия фильтрации. Выражения сравнения…………………………………. 177

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 179

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 179

7.3.9. Экономная выборка записей……………………………………………………………………………………… 179

7.4. Сортировка записей………………………………………………………………………………………………………….. 180

7.5. Агрегатные вычисления……………………………………………………………………………………………………. 182

7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 182

7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 183

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 185

7.6. Оконные вычисления………………………………………………………………………………………………………… 187

7.6.1. Выполнение оконных вычислений……………………………………………………………………………. 187

7.6.2. Использование кадров………………………………………………………………………………………………… 191

7.6.3. Оконные функции………………………………………………………………………………………………………… 194

7.7. Вычисляемые поля уровня запроса………………………………………………………………………………… 196

7.8. Функциональные выражения: расширенные инструменты………………………………………….. 197

7.8.1. Функции СУБД……………………………………………………………………………………………………………. 197

7.8.1.1. Функции для работы со строками……………………………………………………………………. 197

7.8.1.2. Функции для работы с числами……………………………………………………………………….. 200

7.8.1.3. Функции для работы с датой и временем……………………………………………………….. 202

7.8.1.4. Функции для сравнения и преобразования значений…………………………………….. 204

7.8.2. Условные выражения СУБД………………………………………………………………………………………. 206

7.8.3. Вложенные запросы……………………………………………………………………………………………………. 207

7.8.4. Извлечение значений из полей типа JSON………………………………………………………………… 208

7.9. Объединение наборов записей………………………………………………………………………………………… 209

7.10. Извлечение значений только из заданных полей…………………………………………………………. 210

7.11. Указание базы данных для выборки записей………………………………………………………………. 213

7.12. Асинхронная выборка данных………………………………………………………………………………………. 213

Глава 8. Маршрутизация……………………………………………………………………… 215

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 215

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 216

8.2. Объявление маршрутов……………………………………………………………………………………………………. 217

8.3. Передача данных в контроллеры……………………………………………………………………………………. 219

8.4. Именованные маршруты………………………………………………………………………………………………….. 220

8.5. Имена приложений……………………………………………………………………………………………………………. 220

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 221

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 222

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 223

Глава 9. Контроллеры-функции…………………………………………………………… 224

9.1. Написание контроллеров-функций…………………………………………………………………………………. 224

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 225

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 226

9.2. Получение сведений о запросе………………………………………………………………………………………… 227

9.3. Формирование ответа………………………………………………………………………………………………………. 230

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 230

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 231

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 233

9.4. Перенаправление………………………………………………………………………………………………………………. 234

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 235

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 237

9.7. Специальные ответы………………………………………………………………………………………………………… 238

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 238

9.7.2. Файловый ответ…………………………………………………………………………………………………………… 239

9.7.3. JSON-ответ…………………………………………………………………………………………………………………… 240

9.8. Сокращения Django………………………………………………………………………………………………………….. 240

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 242

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 243

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 244

9.11.1. Преобразование синхронных функций в асинхронные и наоборот…………………….. 245

9.11.2. Обработка прерываний……………………………………………………………………………………………. 247

9.12. Асинхронные инструменты для формирования ответов…………………………………………….. 247

Глава 10. Контроллеры-классы……………………………………………………………. 249

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 249

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 250

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 250

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 252

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 252

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 253

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 254

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 254

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 255

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 256

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 257

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 258

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 260

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 261

10.5. Классы, работающие с формами…………………………………………………………………………………… 261

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 262

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………… 262

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы…………………………. 263

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………….. 264

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 265

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………… 265

10.5.2.2. Контроллер CreateView: создание новой записи…………………………………………. 266

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………….. 267

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………… 268

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением……………………. 268

10.6. Классы для вывода хронологических списков…………………………………………………………….. 270

10.6.1. Вывод последних записей………………………………………………………………………………………… 270

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………… 270

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………….. 271

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………….. 272

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 273

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………….. 273

10.6.2.2. Контроллер YearArchiveView: вывод записей за год……………………………………. 274

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 275

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………… 275

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц……………………………. 275

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 276

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………….. 276

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………… 277

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 277

10.6.5.1. Примесь DayMixin: извлечение заданного числа…………………………………………. 278

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………….. 278

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 279

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 279

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 280

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 282

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 283

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 285

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 285

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 290

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 291

11.4. Фильтры…………………………………………………………………………………………………………………………… 300

11.5. Наследование шаблонов……………………………………………………………………………………………….. 310

11.6. Включение шаблонов…………………………………………………………………………………………………….. 312

11.7. Обработка статических файлов…………………………………………………………………………………….. 312

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 312

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 314

11.8. Вывод значений в «человеческом» представлении……………………………………………………… 316

Глава 12. Пагинатор…………………………………………………………………………….. 318

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 318

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 321

Глава 13. Формы, связанные с моделями……………………………………………… 323

13.1. Создание форм, связанных с моделями………………………………………………………………………… 323

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 323

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 326

13.1.3. Создание форм путем полного объявления……………………………………………………………. 327

13.1.3.1. Как выполняется полное объявление?………………………………………………………….. 327

13.1.3.2. Параметры, поддерживаемые всеми типами полей формы………………………… 329

13.1.3.3. Классы полей форм…………………………………………………………………………………………. 330

13.1.3.4. Классы полей форм, применяемые по умолчанию………………………………………. 334

13.1.4. Задание элементов управления……………………………………………………………………………….. 335

13.1.4.1. Классы элементов управления………………………………………………………………………. 335

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………….. 338

13.2. Обработка форм……………………………………………………………………………………………………………… 339

13.2.1. Добавление записи посредством формы………………………………………………………………… 339

13.2.1.1. Создание формы для добавления записи……………………………………………………… 339

13.2.1.2. Повторное создание формы……………………………………………………………………………. 339

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………… 340

13.2.1.4. Сохранение данных, занесенных в форму……………………………………………………. 341

13.2.1.5. Доступ к данным, занесенным в форму…………………………………………………………. 342

13.2.2. Правка записи посредством формы………………………………………………………………………… 342

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 343

13.3. Вывод форм на экран……………………………………………………………………………………………………… 344

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 344

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 346

13.3.2.1. Расширенный вывод форм: высокоуровневые инструменты………………………. 346

13.3.2.2. Расширенный вывод форм: низкоуровневые инструменты…………………………. 347

13.4. Валидация в формах………………………………………………………………………………………………………. 350

13.4.1. Валидация полей формы………………………………………………………………………………………….. 350

13.4.1.1. Валидация с применением валидаторов………………………………………………………. 350

13.4.1.2. Валидация путем переопределения методов формы…………………………………… 351

13.4.2. Валидация формы…………………………………………………………………………………………………….. 351

Глава 14. Наборы форм, связанные с моделями……………………………………. 353

14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 353

14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 357

14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 357

14.2.2. Повторное создание набора форм…………………………………………………………………………… 357

14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 358

14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 358

14.2.5. Реализация переупорядочивания записей……………………………………………………………… 359

14.3. Вывод наборов форм на экран………………………………………………………………………………………. 361

14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 361

14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 362

14.4. Валидация в наборах форм……………………………………………………………………………………………. 363

14.5. Встроенные наборы форм……………………………………………………………………………………………… 364

14.5.1. Создание встроенных наборов форм………………………………………………………………………. 364

14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 365

Глава 15. Разграничение доступа: базовые инструменты…………………….. 367

15.1. Как работает подсистема разграничения доступа?……………………………………………………. 367

15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 368

15.2.1. Настройка подсистемы разграничения доступа……………………………………………………. 368

15.2.2. Создание суперпользователя…………………………………………………………………………………… 369

15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 370

15.3. Работа со списками пользователей и групп…………………………………………………………………. 370

15.3.1. Список пользователей………………………………………………………………………………………………. 370

15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 372

15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 373

15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 373

15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 375

15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 377

15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 378

15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 378

15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля              380

15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 381

15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 382

15.5. Получение сведений о пользователях…………………………………………………………………………… 383

15.5.1. Получение сведений о текущем пользователе……………………………………………………….. 383

15.5.2. Получение пользователей, обладающих заданным правом………………………………… 386

15.6. Авторизация…………………………………………………………………………………………………………………….. 387

15.6.1. Авторизация на уровне всего веб-сайта…………………………………………………………………. 387

15.6.2. Авторизация в контроллерах…………………………………………………………………………………… 389

15.6.2.1. Авторизация в контроллерах-функциях: непосредственные проверки……… 389

15.6.2.2. Авторизация в контроллерах-функциях: применение декораторов…………… 390

15.6.2.3. Авторизация в контроллерах-классах………………………………………………………….. 392

15.6.3. Авторизация в шаблонах…………………………………………………………………………………………. 394

15.7. Асинхронные инструменты для разграничения доступа……………………………………………. 395

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 397

Глава 16. Модели: расширенные инструменты…………………………………….. 398

16.1. Управление выборкой полей…………………………………………………………………………………………. 398

16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 402

16.3. Полиморфные связи………………………………………………………………………………………………………… 405

16.4. Наследование моделей…………………………………………………………………………………………………… 411

16.4.1. Прямое наследование моделей………………………………………………………………………………… 411

16.4.2. Абстрактные модели………………………………………………………………………………………………… 414

16.4.3. Прокси-модели………………………………………………………………………………………………………….. 416

16.5. Создание своих диспетчеров записей…………………………………………………………………………… 416

16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 416

16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 418

16.6. Создание своих наборов записей………………………………………………………………………………….. 419

16.7. Управление транзакциями……………………………………………………………………………………………… 422

16.7.1. Автоматическое управление транзакциями…………………………………………………………… 422

16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………… 422

16.7.1.2. Режим атомарных запросов…………………………………………………………………………… 423

16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………… 423

16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………… 424

16.7.2. Ручное управление транзакциями…………………………………………………………………………… 426

16.7.3. Обработка подтверждений транзакций………………………………………………………………….. 427

16.8. Отправка SQL-запросов, написанных вручную…………………………………………………………… 428

16.8.1. Отправка SQL-запросов на выборку записей из заданной модели………………………. 428

16.8.2. Отправка произвольных SQL-запросов………………………………………………………………….. 429

Глава 17. Формы и наборы форм: расширенные инструменты и дополнительная библиотека  432

17.1. Формы, не связанные с моделями………………………………………………………………………………….. 432

17.2. Наборы форм, не связанные с моделями………………………………………………………………………. 433

17.3. Расширенные средства для вывода форм и наборов форм…………………………………………. 435

17.3.1. Указание CSS-стилей у форм…………………………………………………………………………………… 435

17.3.2. Настройка выводимых форм……………………………………………………………………………………. 435

17.3.3. Настройка наборов форм…………………………………………………………………………………………. 436

17.3.4. Шаблоны форм, наборов форм и элементов управления……………………………………… 438

17.3.4.1. Шаблоны форм………………………………………………………………………………………………… 438

17.3.4.2. Шаблоны наборов форм…………………………………………………………………………………. 440

17.3.4.3. Шаблон поля формы……………………………………………………………………………………….. 441

17.3.4.4. Шаблоны элементов управления…………………………………………………………………… 441

17.4. Библиотека Django Simple Captcha: поддержка CAPTCHA……………………………………….. 443

17.4.1. Установка Django Simple Captcha…………………………………………………………………………… 443

17.4.2. Использование Django Simple Captcha…………………………………………………………………… 444

17.4.3. Настройка Django Simple Captcha………………………………………………………………………….. 445

17.4.4. Дополнительная команда captcha_clean……………………………………………………………….. 447

17.5. Дополнительные настройки проекта, имеющие отношение к формам……………………… 447

Глава 18. Поддержка баз данных PostgreSQL и библиотека
django-localflavor………………………………………………………………………………….. 448

18.1. Дополнительные инструменты для работы с PostgreSQL…………………………………………… 448

18.1.1. Объявление моделей для работы с PostgreSQL………………………………………………………. 448

18.1.1.1. Поля, специфичные для PostgreSQL……………………………………………………………….. 448

18.1.1.2. Индексы PostgreSQL………………………………………………………………………………………… 451

18.1.1.3. Операционные выражения……………………………………………………………………………… 453

18.1.1.4. Условие ExclusionConstraint………………………………………………………………………….. 453

18.1.1.5. Расширения PostgreSQL………………………………………………………………………………….. 455

18.1.1.6. Валидаторы PostgreSQL…………………………………………………………………………………. 457

18.1.2. Запись и выборка данных в PostgreSQL………………………………………………………………….. 459

18.1.2.1. Запись и выборка значений полей в PostgreSQL…………………………………………… 459

18.1.2.2. Фильтрация записей в PostgreSQL…………………………………………………………………. 461

18.1.3. Агрегатные функции PostgreSQL……………………………………………………………………………… 467

18.1.4. Функции СУБД, специфичные для PostgreSQL……………………………………………………….. 470

18.1.5. Вложенные запросы PostgreSQL……………………………………………………………………………… 470

18.1.6. Полнотекстовая фильтрация PostgreSQL………………………………………………………………… 471

18.1.6.1. Модификатор search……………………………………………………………………………………….. 472

18.1.6.2. Функции СУБД для полнотекстовой фильтрации………………………………………… 472

18.1.6.3. Функции СУБД для фильтрации по похожим словам………………………………….. 477

18.1.7. Создание форм для работы с PostgreSQL……………………………………………………………….. 479

18.1.7.1. Поля форм, специфичные для PostgreSQL……………………………………………………… 479

18.1.7.2. Элементы управления, специфичные для PostgreSQL………………………………….. 481

18.2. Библиотека django-localflavor: дополнительные поля для моделей и форм……………… 481

18.2.1. Установка django-localflavor……………………………………………………………………………………. 482

18.2.2. Поля модели, предоставляемые django-localflavor………………………………………………… 482

18.2.3. Поля формы, предоставляемые django-localflavor…………………………………………………. 483

18.2.4. Элементы управления, предоставляемые django-localflavor………………………………… 483

Глава 19. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 484

19.1. Библиотека django-precise-bbcode: поддержка BBCode……………………………………………… 484

19.1.1. Установка django-precise-bbcode…………………………………………………………………………….. 484

19.1.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 485

19.1.3. Обработка BBCode…………………………………………………………………………………………………… 486

19.1.3.1. Обработка BBCode при выводе…………………………………………………………………….. 486

19.1.3.2. Хранение BBCode в модели…………………………………………………………………………… 487

19.1.4. Создание дополнительных BBCode-тегов……………………………………………………………… 488

19.1.5. Создание графических смайликов…………………………………………………………………………… 490

19.1.6. Настройка django-precise-bbcode…………………………………………………………………………….. 490

19.2. Библиотека django-bootstrap5: интеграция с Bootstrap 5……………………………………………. 491

19.2.1. Установка django-bootstrap5……………………………………………………………………………………. 492

19.2.2. Использование django-bootstrap5……………………………………………………………………………. 492

19.2.3. Настройка django-bootstrap5…………………………………………………………………………………… 497

19.3. Написание своих фильтров и тегов……………………………………………………………………………….. 498

19.3.1. Организация исходного кода…………………………………………………………………………………… 499

19.3.2. Написание фильтров………………………………………………………………………………………………… 499

19.3.2.1. Написание и использование простейших фильтров……………………………………. 499

19.3.2.2. Управление заменой недопустимых символов HTML………………………………… 501

19.3.3. Написание тегов……………………………………………………………………………………………………….. 502

19.3.3.1. Написание тегов, выводящих элементарные значения……………………………….. 502

19.3.3.2. Написание шаблонных тегов…………………………………………………………………………. 504

19.3.4. Регистрация фильтров и тегов………………………………………………………………………………….. 505

19.4. Переопределение шаблонов………………………………………………………………………………………….. 506

Глава 20. Обработка выгруженных файлов…………………………………………. 509

20.1. Подготовка подсистемы обработки выгруженных файлов………………………………………… 509

20.1.1. Настройка подсистемы обработки выгруженных файлов……………………………………. 509

20.1.2. Указание маршрута для выгруженных файлов……………………………………………………… 511

20.2. Хранение файлов в моделях…………………………………………………………………………………………… 512

20.2.1. Типы полей модели, предназначенные для хранения файлов……………………………… 512

20.2.2. Поля форм, валидаторы и элементы управления, служащие для указания файлов 514

20.2.3. Обработка выгруженных файлов……………………………………………………………………………. 516

20.2.4. Вывод выгруженных файлов……………………………………………………………………………………. 518

20.2.5. Удаление выгруженного файла……………………………………………………………………………….. 519

20.3. Хранение путей к файлам в моделях…………………………………………………………………………….. 520

20.4. Низкоуровневые средства для сохранения выгруженных файлов…………………………….. 520

20.4.1. Класс UploadedFile: выгруженный файл. Сохранение выгруженных файлов……. 521

20.4.2. Вывод выгруженных файлов низкоуровневыми средствами………………………………… 522

20.5. Библиотека django-cleanup: автоматическое удаление ненужных файлов………………. 523

20.6. Библиотека easy-thumbnails: вывод миниатюр……………………………………………………………. 525

20.6.1. Установка easy-thumbnails………………………………………………………………………………………. 525

20.6.2. Настройка easy-thumbnails………………………………………………………………………………………. 526

20.6.2.1. Пресеты миниатюр………………………………………………………………………………………….. 526

20.6.2.2. Остальные настройки библиотеки………………………………………………………………… 528

20.6.3. Вывод миниатюр в шаблонах………………………………………………………………………………….. 530

20.6.4. Хранение миниатюр в моделях……………………………………………………………………………….. 531

20.6.5. Дополнительная команда thumbnail_cleanup………………………………………………………… 532

Глава 21. Разграничение доступа: расширенные инструменты……………. 534

21.1. Настройки проекта, касающиеся разграничения доступа…………………………………………. 534

21.2. Работа с пользователями……………………………………………………………………………………………….. 535

21.2.1. Создание пользователей………………………………………………………………………………………….. 535

21.2.2. Работа с паролями……………………………………………………………………………………………………. 535

21.3. Вход и выход…………………………………………………………………………………………………………………… 536

21.4. Валидация паролей………………………………………………………………………………………………………… 537

21.4.1. Стандартные валидаторы паролей………………………………………………………………………… 538

21.4.2. Написание своих валидаторов паролей…………………………………………………………………. 539

21.4.3. Выполнение валидации паролей…………………………………………………………………………….. 540

21.5. Обращение к модели пользователя……………………………………………………………………………….. 541

21.6. Создание своей модели пользователя…………………………………………………………………………… 542

21.7. Создание своих прав пользователя………………………………………………………………………………. 543

21.8. Асинхронные расширенные инструменты для разграничения доступа……………………. 544

Глава 22. Посредники и обработчики контекста………………………………….. 545

22.1. Посредники……………………………………………………………………………………………………………………… 545

22.1.1. Стандартные посредники………………………………………………………………………………………… 545

22.1.2. Порядок выполнения посредников………………………………………………………………………….. 547

22.1.3. Написание своих посредников………………………………………………………………………………… 547

22.1.3.1. Посредники-функции………………………………………………………………………………………. 548

22.1.3.2. Посредники-классы…………………………………………………………………………………………. 549

22.1.3.3. Асинхронные и универсальные посредники………………………………………………… 551

22.2. Обработчики контекста………………………………………………………………………………………………….. 554

Глава 23. Cookie, сессии, всплывающие сообщения
и подписывание данных………………………………………………………………………. 555

23.1. Cookie………………………………………………………………………………………………………………………………. 555

23.2. Сессии………………………………………………………………………………………………………………………………. 558

23.2.1. Настройка сессий……………………………………………………………………………………………………… 558

23.2.2. Использование сессий………………………………………………………………………………………………. 560

23.2.3. Сохранение сессий……………………………………………………………………………………………………. 562

23.2.4. Дополнительная команда clearsessions………………………………………………………………….. 562

23.2.5. Асинхронные инструменты для работы с сессиями………………………………………………. 563

23.3. Всплывающие сообщения……………………………………………………………………………………………… 563

23.3.1. Настройка всплывающих сообщений…………………………………………………………………….. 563

23.3.2. Уровни всплывающих сообщений…………………………………………………………………………… 564

23.3.3. Создание всплывающих сообщений……………………………………………………………………….. 564

23.3.4. Вывод всплывающих сообщений……………………………………………………………………………. 566

23.3.4.1. Задание минимального уровня выводимых всплывающих сообщений…….. 567

23.3.5. Объявление своих уровней всплывающих сообщений………………………………………….. 568

23.4. Подписывание данных…………………………………………………………………………………………………… 568

Глава 24. Сигналы……………………………………………………………………………….. 572

24.1. Обработка сигналов……………………………………………………………………………………………………….. 572

24.1.1. Объявление обработчиков сигналов……………………………………………………………………….. 572

24.1.2. Привязка обработчиков к сигналам: первый способ…………………………………………….. 573

24.1.3. Привязка обработчиков к сигналам: второй способ……………………………………………… 575

24.1.4. Отмена привязки обработчиков к сигналам…………………………………………………………… 575

24.2. Встроенные сигналы Django………………………………………………………………………………………….. 576

24.3. Объявление и отправка своих сигналов……………………………………………………………………….. 580

24.3.1. Асинхронные инструменты для отправки сигналов……………………………………………… 582

Глава 25. Поддержка нескольких веб-сайтов, простые веб-страницы и статичные перенаправления…………………………………………………………………………………………………………….. 583

25.1. Поддержка нескольких веб-сайтов……………………………………………………………………………….. 583

25.1.1. Подготовка подсистемы поддержки нескольких веб-сайтов к работе…………………. 583

25.1.2. Регистрация веб-сайтов в проекте…………………………………………………………………………… 584

25.1.3. Модель веб-сайта……………………………………………………………………………………………………… 584

25.1.4. Получение веб-сайта, к которому был выполнен запрос……………………………………… 585

25.1.5. Специфические случаи использования подсистемы поддержки
нескольких веб-сайтов………………………………………………………………………………………………………….. 586

25.2. Простые веб-страницы…………………………………………………………………………………………………… 587

25.2.1. Подготовка подсистемы простых веб-страниц………………………………………………………. 587

25.2.2. Создание простых веб-страниц……………………………………………………………………………….. 588

25.2.3. Вывод простых веб-страниц……………………………………………………………………………………. 588

25.2.3.1. Прямой вывод простых веб-страниц……………………………………………………………… 588

25.2.3.2. Использование встроенного списка маршрутов………………………………………….. 589

25.2.3.3. Написание отдельных маршрутов для конкретных простых веб-страниц.. 589

25.2.4. Шаблоны простых веб-страниц………………………………………………………………………………. 590

25.2.5. Вывод гиперссылок на простые веб-страницы………………………………………………………. 591

25.3. Статичные перенаправления…………………………………………………………………………………………. 592

25.3.1. Подготовка подсистемы статичных перенаправлений…………………………………………. 592

25.3.2. Создание статичных перенаправлений………………………………………………………………….. 592

25.3.3. Выполнение статичных перенаправлений…………………………………………………………….. 593

Глава 26. Отправка электронных писем………………………………………………. 594

26.1. Настройка подсистемы отправки электронных писем……………………………………………….. 594

26.2. Низкоуровневые инструменты для отправки писем……………………………………………………. 596

26.2.1. Класс EmailMessage: обычное электронное письмо……………………………………………… 596

26.2.2. Формирование писем на основе шаблонов…………………………………………………………….. 598

26.2.3. Использование соединений. Массовая рассылка писем……………………………………….. 598

26.2.4. Класс EmailMultiAlternatives: составное письмо…………………………………………………… 599

26.3. Высокоуровневые инструменты для отправки писем…………………………………………………. 600

26.3.1. Отправка писем по произвольным адресам……………………………………………………………. 600

26.3.2. Отправка писем зарегистрированным пользователям………………………………………….. 601

26.3.3. Отправка писем администраторам и редакторам сайта………………………………………. 602

26.4. Отправка тестового электронного письма……………………………………………………………………. 603

26.5. Использование отладочного SMTP-сервера aiosmtpd………………………………………………… 603

Глава 27. Кеширование………………………………………………………………………… 605

27.1. Кеширование на стороне сервера…………………………………………………………………………………. 605

27.1.1. Подготовка подсистемы кеширования на стороне сервера………………………………….. 605

27.1.1.1. Настройка подсистемы кеширования на стороне сервера…………………………. 605

27.1.1.2. Создание таблицы для хранения кеша…………………………………………………………. 610

27.1.2. Высокоуровневые средства кеширования……………………………………………………………… 611

27.1.2.1. Кеширование всего веб-сайта………………………………………………………………………… 611

27.1.2.2. Кеширование на уровне отдельных контроллеров……………………………………… 612

27.1.2.3. Управление кешированием…………………………………………………………………………….. 613

27.1.3. Низкоуровневые средства кеширования………………………………………………………………… 614

27.1.3.1. Кеширование фрагментов веб-страниц…………………………………………………………. 614

27.1.3.2. Кеширование произвольных значений…………………………………………………………. 616

27.1.3.3. Асинхронные инструменты для кеширования произвольных значений……. 619

27.2. Кеширование на стороне клиента…………………………………………………………………………………. 619

27.2.1. Автоматическая обработка заголовков………………………………………………………………….. 619

27.2.2. Управление кешированием в контроллерах…………………………………………………………… 621

27.2.2.1. Условная обработка запросов……………………………………………………………………….. 621

27.2.2.2. Прямое указание параметров кеширования…………………………………………………. 622

27.2.2.3. Запрет кеширования……………………………………………………………………………………….. 623

27.2.3. Управление кешированием в посредниках…………………………………………………………….. 623

Глава 28. Локализация…………………………………………………………………………. 625

28.1. Локализация строк………………………………………………………………………………………………………….. 625

28.1.1. Пометка локализуемых строк………………………………………………………………………………….. 625

28.1.1.1. Пометка локализуемых строк в коде шаблонов…………………………………………… 626

28.1.1.2. Пометка локализуемых строк в Python-коде………………………………………………… 629

28.1.2. Создание языковых модулей……………………………………………………………………………………. 631

28.1.2.1. Генерирование языковых модулей………………………………………………………………… 631

28.1.2.2. Перевод локализуемых строк………………………………………………………………………… 632

28.1.2.3. Компиляция языковых модулей…………………………………………………………………….. 635

28.1.3. Переключение веб-сайта на требуемый язык…………………………………………………………. 636

28.1.3.1. Автоматическое переключение на требуемый язык…………………………………….. 636

28.1.3.2. Вывод сведений о поддерживаемых языках…………………………………………………. 637

28.1.3.3. Создание языковых редакций веб-сайта………………………………………………………. 639

28.1.3.4. Переключение на требуемый язык без создания языковых редакций
веб-сайта…………………………………………………………………………………………………………………………. 640

28.1.4. Дополнительные инструменты для локализации строк………………………………………… 642

28.1.5. Настройка локализации строк………………………………………………………………………………… 643

28.2. Локализация форматов…………………………………………………………………………………………………… 645

28.3. Локализация временнх зон………………………………………………………………………………………….. 646

28.3.1. Реализация переключения веб-сайта на требуемую временнýю зону…………………. 646

28.3.2. Вывод значений времени и временнх отметок в разных временнх зонах………. 649

Глава 29. Административный веб-сайт Django…………………………………….. 651

29.1. Подготовка административного веб-сайта к работе…………………………………………………… 651

29.2. Регистрация моделей на административном веб-сайте………………………………………………. 652

29.3. Редакторы моделей…………………………………………………………………………………………………………. 653

29.3.1. Параметры списка записей………………………………………………………………………………………. 653

29.3.1.1. Параметры списка записей: состав выводимого списка……………………………… 653

29.3.1.2. Параметры списка записей: фильтрация и сортировка………………………………. 658

29.3.1.3. Параметры списка записей: прочие………………………………………………………………. 663

29.3.2. Параметры страниц добавления и правки записей……………………………………………….. 665

29.3.2.1. Параметры страниц добавления и правки записей: набор выводимых полей 665

29.3.2.2. Параметры страниц добавления и правки записей:
элементы управления…………………………………………………………………………………………………….. 668

29.3.2.3. Параметры страниц добавления и правки записей: прочие……………………….. 671

29.3.3. Регистрация редакторов на административном веб-сайте…………………………………… 672

29.4. Встроенные редакторы………………………………………………………………………………………………….. 673

29.4.1. Объявление встроенного редактора……………………………………………………………………….. 673

29.4.2. Параметры встроенного редактора………………………………………………………………………… 674

29.4.3. Регистрация встроенного редактора………………………………………………………………………. 676

29.5. Действия…………………………………………………………………………………………………………………………… 676

Глава 30. Разработка веб-служб REST. Библиотека Django REST framework…….. 679

30.1. Установка и подготовка к работе Django REST framework………………………………………… 680

30.2. Введение в Django REST framework. Вывод данных…………………………………………………… 682

30.2.1. Сериализаторы…………………………………………………………………………………………………………. 682

30.2.2. Веб-представление JSON………………………………………………………………………………………….. 683

30.2.3. Вывод данных на стороне клиента…………………………………………………………………………. 685

30.2.4. Первый принцип REST: идентификация ресурса по интернет-адресу………………… 686

30.3. Ввод и правка данных……………………………………………………………………………………………………. 688

30.3.1. Второй принцип REST: идентификация действия по HTTP-методу…………………….. 688

30.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 692

30.4. Контроллеры-классы Django REST framework……………………………………………………………. 693

30.4.1. Контроллер-класс низкого уровня………………………………………………………………………….. 693

30.4.2. Контроллеры-классы высокого уровня: комбинированные и простые……………….. 694

30.5. Метаконтроллеры…………………………………………………………………………………………………………… 696

30.6. Разграничение доступа в Django REST framework……………………………………………………… 697

30.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента.
Основная аутентификация…………………………………………………………………………………………………… 697

30.6.2. Классы разграничения доступа………………………………………………………………………………. 698

30.6.3. Жетонная аутентификация. Библиотека Simple JWT…………………………………………….. 699

30.6.3.1. Подготовка Simple JWT к работе…………………………………………………………………… 700

30.6.3.2. Контроллеры Simple JWT и написание маршрутов…………………………………….. 701

30.6.3.3. Использование Simple JWT на стороне клиента…………………………………………… 703

30.6.3.4. Настройка Simple JWT……………………………………………………………………………………. 705

Глава 31. Средства журналирования и отладки……………………………………. 707

31.1. Средства журналирования Django……………………………………………………………………………….. 707

31.1.1. Настройка подсистемы журналирования………………………………………………………………. 707

31.1.2. Объект сообщения…………………………………………………………………………………………………….. 708

31.1.3. Форматировщики………………………………………………………………………………………………………. 709

31.1.4. Фильтры…………………………………………………………………………………………………………………….. 710

31.1.5. Обработчики……………………………………………………………………………………………………………… 712

31.1.6. Регистраторы…………………………………………………………………………………………………………….. 717

31.1.7. Пример настройки подсистемы журналирования…………………………………………………. 719

31.1.8. Предотвращение попадания персональных данных в отчеты об ошибках………… 721

31.2. Панель Django Debug Toolbar………………………………………………………………………………………… 722

31.2.1. Подготовка Django Debug Toolbar к работе……………………………………………………………. 722

31.2.2. Работа с Django Debug Toolbar………………………………………………………………………………… 723

31.3. Отправка электронных писем с сообщениями об отсутствующих веб-страницах…… 726

Глава 32. Публикация веб-сайта………………………………………………………….. 727

32.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 727

32.1.1. Написание шаблонов веб-страниц с сообщениями об ошибках………………………….. 727

32.1.2. Удаление ненужных данных……………………………………………………………………………………. 728

32.1.3. Настройка эксплуатационного режима…………………………………………………………………. 729

32.1.4. Настройка параметров безопасности…………………………………………………………………….. 730

32.1.5. Настройка веб-сайта для работы по протоколу HTTPS……………………………………….. 733

32.1.6. Настройка веб-сайта для работы через обратный прокси-сервер………………………. 735

32.1.7. Окончательная проверка веб-сайта………………………………………………………………………… 736

32.2. Публикация веб-сайта……………………………………………………………………………………………………. 737

32.2.1. Публикация посредством Uvicorn……………………………………………………………………………. 737

32.2.1.1. Подготовка веб-сайта к публикации посредством Uvicorn…………………………. 738

32.2.1.2. Запуск и остановка Uvicorn……………………………………………………………………………. 739

32.2.2. Публикация посредством Apache HTTP Server………………………………………………………. 739

32.2.2.1. Подготовка веб-сайта к публикации посредством Apache HTTP Server……. 740

32.2.2.2. Подготовка платформы для публикации посредством
Apache HTTP Server……………………………………………………………………………………………………….. 741

32.2.2.3. Конфигурирование веб-сайта для работы под Apache HTTP Server………….. 742

32.2.3. Другие варианты публикации…………………………………………………………………………………. 744

Часть IV. Практическое занятие: разработка веб-сайта.. 745

Глава 33. Дизайн. Вспомогательные веб-страницы………………………………. 746

33.1. План веб-сайта………………………………………………………………………………………………………………… 746

33.2. Подготовка проекта и приложения main………………………………………………………………………. 747

33.2.1. Создание и настройка проекта………………………………………………………………………………… 747

33.2.2. Создание и настройка приложения main………………………………………………………………… 748

33.3. Базовый шаблон……………………………………………………………………………………………………………… 748

33.4. Главная веб-страница…………………………………………………………………………………………………….. 755

33.5. Вспомогательные веб-страницы……………………………………………………………………………………. 757

Глава 34. Работа с посетителями и разграничение доступа………………….. 760

34.1. Модель пользователя……………………………………………………………………………………………………… 760

34.2. Основные веб-страницы: входа, профиля и выхода……………………………………………………. 761

34.2.1. Веб-страница входа………………………………………………………………………………………………….. 761

34.2.2. Веб-страница пользовательского профиля…………………………………………………………….. 764

34.2.3. Реализация выхода…………………………………………………………………………………………………… 765

34.3. Веб-страницы правки личных данных посетителя……………………………………………………… 766

34.3.1. Веб-страница правки основных сведений………………………………………………………………. 766

34.3.2. Веб-страница правки пароля…………………………………………………………………………………… 768

34.4. Веб-страницы регистрации и активации посетителей………………………………………………… 770

34.4.1. Веб-страницы регистрации нового посетителя……………………………………………………… 770

34.4.1.1. Форма для занесения сведений о новом посетителе……………………………………. 770

34.4.1.2. Средства для регистрации посетителя………………………………………………………….. 772

34.4.1.3. Средства для отправки писем с требованиями активации………………………….. 774

34.4.2. Веб-страницы активации посетителя……………………………………………………………………… 775

34.5. Веб-страница удаления посетителя……………………………………………………………………………… 778

34.6. Инструменты для администрирования посетителей…………………………………………………… 779

Глава 35. Рубрики………………………………………………………………………………… 782

35.1. Модели рубрик……………………………………………………………………………………………………………….. 782

35.1.1. Базовая модель рубрик…………………………………………………………………………………………….. 782

35.1.2. Модель надрубрик……………………………………………………………………………………………………. 783

35.1.3. Модель подрубрик……………………………………………………………………………………………………. 784

35.2. Инструменты для администрирования рубрик……………………………………………………………. 785

35.3. Вывод списка рубрик в вертикальной панели навигации…………………………………………… 786

Глава 36. Объявления………………………………………………………………………….. 789

36.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 789

36.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 790

36.2.1. Модель самих объявлений……………………………………………………………………………………….. 790

36.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 793

36.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 793

36.3. Инструменты для администрирования объявлений…………………………………………………….. 794

36.4. Вывод объявлений………………………………………………………………………………………………………….. 794

36.4.1. Вывод списка объявлений………………………………………………………………………………………… 795

36.4.1.1. Форма поиска и контроллер списка объявлений…………………………………………. 795

36.4.1.2. Реализация корректного возврата…………………………………………………………………. 796

36.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………… 798

36.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 801

36.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 805

36.5. Работа с объявлениями…………………………………………………………………………………………………… 805

36.5.1. Вывод объявлений, оставленных текущим посетителем………………………………………. 805

36.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 806

Глава 37. Комментарии………………………………………………………………………… 811

37.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 811

37.2. Модель комментариев……………………………………………………………………………………………………. 812

37.3. Вывод и добавление комментариев………………………………………………………………………………. 813

37.4. Отправка уведомлений о новых комментариях…………………………………………………………… 816

Глава 38. Бэкенд REST…………………………………………………………………………. 818

38.1. Бэкенд………………………………………………………………………………………………………………………………. 818

38.1.1. Подготовка к разработке бэкенда…………………………………………………………………………… 818

38.1.2. Список объявлений…………………………………………………………………………………………………… 819

38.1.3. Сведения о выбранном объявлении………………………………………………………………………… 820

38.1.4. Вывод и добавление комментариев………………………………………………………………………… 821

38.2. Тестовый фронтенд…………………………………………………………………………………………………………. 823

38.2.1. Введение в Angular……………………………………………………………………………………………………. 823

38.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 824

38.2.3. Ключевые файлы и модули Angular-проекта…………………………………………………………. 825

38.2.3.1. Стартовая веб-страница…………………………………………………………………………………. 825

38.2.3.2. Стартовый модуль………………………………………………………………………………………….. 826

38.2.3.3. Конфигурационный модуль…………………………………………………………………………… 826

38.2.4. Модуль списка маршрутов………………………………………………………………………………………. 828

38.2.5. Компонент приложения AppComponent………………………………………………………………….. 828

38.2.6. Компонент списка объявлений BbListComponent………………………………………………….. 830

38.2.7. Компонент сведений об объявлении BbDetailComponent……………………………………… 835

Заключение………………………………………………………………………………………….. 842

Приложение. Описание файлового архива, сопровождающего книгу….. 844

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

Опубликовано

Новинка: “Мастер веб-разработки на Python, Django и Bootstrap”

Мастер веб-разработки на Python, Django и Bootstrap

Книга представляет собой практическое руководство по интеграции фреймворка Bootstrap 5 с шаблонами Django для разработки на языке Python современных и динамичных веб-приложений. Рассматриваются основы макетирования HTML-страниц, создание статичных элементов (кнопки, панели, модальные окна, аккордеоны) и разработка динамичных компонентов, управляемых через административную панель Django или интерфейс личного кабинета администратора. Описаны технологии работы с древовидными структурами, создание модальных окон с использованием библиотеки HTMX, а также базовые модули для разработки интернет-магазина, включая корзину, заказы и оплату. Приведены полезные советы по работе с файлами PDF, анимацией, переводами на другие языки и почтовыми сообщениями. Отдельное внимание уделено визуализации данных с помощью библиотек Plotly.py и Plotly.js для создания интерактивных 2D- и 3D-графиков.
Книга имеет интерактивный цифровой аналог, позволяющий запускать на выполнение программные модули всех примеров, скачивать листинги программ, озвучивать текст и переводить его на различные языки, а также смотреть цветные иллюстрации.

Для программистов

ЭФФЕКТИВНЫЙ СОВРЕМЕННЫЙ ИНСТРУМЕНТАРИЙ ДЛЯ СОЗДАНИЯ ВЕБ-ПРИЛОЖЕНИЙ

  • Макетирование HTML страниц с использованием новых элементов Bootstrap
  • Модальные окна в шаблонах Django и на основе библиотеки HTMX
  • Динамичные элементы Bootstrap в шаблонах Django
  • Древовидные структуры пользовательского интерфейса с библиотекой Django-MPTT
  • Интернет-магазин с управлением каталогом продуктов и сменой интерфейса без изменения программного кода
  • Статичные и интерактивные 2D- и 3D-графики с библиотекой Plotly.py
  • Анимированные 2D- и 3D-графики с библиотекой Plotly.js

Книгу “Мастер веб-разработки на Python, Django и Bootstrap” можно приобрести в нашем интернет-магазине.

Предисловие…………………………………………………………………………………………… 11

Структура книги………………………………………………………………………………………………………………………… 12

О примерах кода……………………………………………………………………………………………………………………….. 14

Глава 1. Макетирование HTML-страниц с фреймворком Bootstrap 5…….. 15

1.1. Что нового в Bootstrap 5?……………………………………………………………………………………………………. 16

1.1.1. Наиболее важные изменения…………………………………………………………………………………… 16

Библиотека jQuery больше не является зависимостью…………………………………………. 16

Изменение поддержки браузеров……………………………………………………………………………. 17

Изменение атрибутов данных…………………………………………………………………………………. 17

Что было удалено?…………………………………………………………………………………………………… 18

1.1.2. Наиболее важные дополнения………………………………………………………………………………… 19

Адаптивные размеры шрифтов теперь включены по умолчанию……………………….. 19

Поддержка написания справа налево……………………………………………………………………. 19

Новая точка останова……………………………………………………………………………………………… 19

Темная и светлая тема……………………………………………………………………………………………… 19

Создание модальных окон через атрибуты данных…………………………………………….. 20

1.1.3. Новые компоненты……………………………………………………………………………………………………. 20

Аккордеон…………………………………………………………………………………………………………………. 20

Offcanvas……………………………………………………………………………………………………………………. 20

Плавающая этикетка……………………………………………………………………………………………….. 20

1.1.4. Прочие улучшения и изменения………………………………………………………………………………. 20

1.2. Получение файлов фреймворка Bootstrap………………………………………………………………………… 21

1.2.1. Использование сети CDN…………………………………………………………………………………………. 22

1.2.2. Скачивание файлов Bootstrap………………………………………………………………………………….. 24

1.3. Контейнеры и сетка Bootstrap……………………………………………………………………………………………. 24

1.3.1. Адаптивные контейнеры………………………………………………………………………………………….. 25

Адаптивно-фиксированный контейнер…………………………………………………………………… 26

Адаптивно-подвижный, или «резиновый», контейнер…………………………………………… 27

1.3.2. Ряды, или строки (row)……………………………………………………………………………………………… 27

1.3.3. Адаптивные блоки (col)……………………………………………………………………………………………. 28

1.3.4. Адаптивные блоки без указания числа колонок……………………………………………………. 29

1.3.5. Расположение адаптивных блоков…………………………………………………………………………. 30

1.4. Верстка макета HTML-страниц………………………………………………………………………………………… 30

1.4.1. Выравнивание адаптивных блоков…………………………………………………………………………. 31

Вертикальное выравнивание адаптивных блоков………………………………………………… 31

Горизонтальное выравнивание адаптивных блоков…………………………………………….. 31

1.4.2. Смещение адаптивных блоков………………………………………………………………………………… 32

Смещение с помощью классов offset………………………………………………………………………. 32

Смещение с помощью классов margin……………………………………………………………………. 33

1.5. Простейшая HTML-страница с подключением фреймворка Bootstrap…………………………. 36

1.6. Задание цвета элементам HTML-страниц……………………………………………………………………….. 38

1.7. Задание отступов элементам макета HTML-страниц…………………………………………………….. 41

1.8. Выравнивание содержимого в адаптивных блоках HTML-страниц……………………………… 45

1.9. Обозначение границ элементов макета HTML-страниц…………………………………………………. 47

1.10. Пример использования адаптивных контейнеров…………………………………………………………. 53

1.11. Таблицы Bootstrap……………………………………………………………………………………………………………. 56

1.12. Адаптивные таблицы в Bootstrap (с полосами прокрутки)…………………………………………… 64

1.13. Краткие итоги……………………………………………………………………………………………………………………. 69

Глава 2. Статичные элементы Bootstrap в шаблонах Django………………….. 71

2.1. Задание произвольного цвета элементам Bootstrap………………………………………………………… 71

2.2. Тег include для встраивания шаблонов Django………………………………………………………………… 75

2.3. Подключение значков к элементам Bootstrap………………………………………………………………….. 77

2.4. Разделение страницы на вкладки компонентом Tabs………………………………………………………. 81

2.4.1. Традиционные горизонтальные вкладки Tabs фреймворка Bootstrap…………………. 81

2.4.2. Традиционные вертикальные вкладки Tabs фреймворка Bootstrap…………………….. 85

2.4.3. Горизонтальные вкладки Tabs с использованием тега Django
для организации циклов…………………………………………………………………………………………………….. 88

2.4.4. Вертикальные кнопки для навигации по вкладкам Tabs фреймворка
Bootstrap………………………………………………………………………………………………………………………………. 90

2.5. Компонент Bootstrap Ofcanvas…………………………………………………………………………………………… 92

2.6. Компонент для выдачи подсказок Tooltip………………………………………………………………………… 97

2.7. Использование атрибута href в шаблонах Django для создания ссылок
на URL-адреса…………………………………………………………………………………………………………………….. 98

2.7.1. Ссылки на внешние URL-адреса……………………………………………………………………………… 99

2.7.2. Ссылки на внутренние URL-адреса………………………………………………………………………. 101

2.7.3. Ссылки на внутренние динамичные URL-адреса………………………………………………… 103

2.7.4. Использование атрибута href для обмена параметрами между шаблонами и представлениями     108

2.8. Всплывающие модальные окна………………………………………………………………………………………. 115

2.8.1. Простое модальное окно………………………………………………………………………………………… 119

2.8.2. Модальное окно с полосой прокрутки…………………………………………………………………. 121

2.8.3. Широкое модальное окно………………………………………………………………………………………. 124

2.9. Компонент Bootstrap Accordion («Аккордеон»)……………………………………………………………… 126

2.9.1. Класс accordion………………………………………………………………………………………………………. 126

2.9.2. Класс accordion-flush……………………………………………………………………………………………… 130

2.10. Компонент Bootstrap card («Карточки»)………………………………………………………………………. 134

2.10.1. Карточка с параметрами по умолчанию……………………………………………………………. 134

2.10.2. Карточка с параметрами цвета…………………………………………………………………………… 135

2.10.3. Группы карточек…………………………………………………………………………………………………… 138

2.11. Компонент Bootstrap Carousel («Карусель»)……………………………………………………………….. 140

2.11.1. Статичная карусель с фиксированным контентом……………………………………………. 140

2.12. Краткие итоги………………………………………………………………………………………………………………….. 145

Глава 3. Динамичные элементы Bootstrap в шаблонах Django……………… 147

3.1. Динамичный «Аккордеон» с заполнением вкладок через административную
панель Django……………………………………………………………………………………………………………………. 147

3.2. Динамичный аккордеон с заполнением вкладок через интерфейс пользователя……….. 151

3.2.1. Программные модули для создания динамичных элементов «Аккордеон»………. 156

3.2.2. Модули для вывода динамичных аккордеонов на страницы сайта………………….. 168

3.2.3. Пример создания динамичного аккордеона через интерфейс пользователя…….. 174

3.2.4. Пример вывода динамичного аккордеона на страницу сайта…………………………… 177

3.3. Динамичные карточки с заполнением контента через административную панель…… 181

3.4. Динамичные карточки с заполнением контента через интерфейс пользователя……….. 186

3.4.1. Программные модули для создания динамичных карточек……………………………….. 190

3.4.2. Пример формирования динамичных карточек через интерфейс пользователя… 198

3.4.3. Модули для вывода динамичных карточек на страницы сайта………………………… 200

3.4.4. Пример отображения динамичных карточек на страницах сайта…………………….. 205

3.5. Динамичная карусель с заполнением контента через административную панель……. 207

3.6. Динамичная карусель с заполнением контента через интерфейс пользователя………… 212

3.6.1. Программные модули для создания слайдов динамичной карусели………………… 214

3.6.2. Пример формирования слайдов динамичной карусели через интерфейс пользователя      221

3.6.3. Модули для вывода динамичных каруселей на страницы сайта………………………. 222

3.6.4. Примеры отображения динамичных каруселей на страницах сайта……………….. 225

3.7. Краткие итоги……………………………………………………………………………………………………………………. 226

Глава 4. Древовидные структуры в шаблонах Django………………………….. 227

4.1. Использование Django-mptt для создания древовидных структур………………………………. 227

4.2. Формирование дерева категорий продуктов с использованием административной панели Django           231

4.2.1. Отображение статичного дерева категорий продуктов в шаблонах Django……. 233

4.2.2. Отображение динамичного дерева категорий продуктов в шаблонах Django…. 236

4.3. Формирование дерева категорий продуктов с использованием интерфейса пользователя           239

4.3.1. Модель для категорий продуктов…………………………………………………………………………. 240

4.3.2. Модули для отображения дерева категорий продуктов…………………………………….. 241

4.3.3. Модули для добавления корня к дереву категорий продуктов………………………….. 245

4.3.4. Модули для добавления дочерних категорий продуктов…………………………………… 249

4.3.5. Модули для обновления категорий продуктов……………………………………………………. 255

4.3.6. Модули для удаления категорий продуктов………………………………………………………… 256

4.4. Создание списков объектов с фильтрацией через древовидные каталоги………………….. 258

4.4.1. Модель для хранения категорий продуктов………………………………………………………… 258

4.4.2. Модель для хранения сведений о продуктах……………………………………………………….. 260

4.4.3. Форма для ввода сведений о продуктах……………………………………………………………….. 262

4.4.4. Редактор продуктов………………………………………………………………………………………………… 262

4.4.5. Модули для добавления в БД продуктов (товара)………………………………………………. 268

4.4.6. Модули для обновления сведений о продуктах…………………………………………………… 271

4.4.7. Модули для удаления продукта из БД…………………………………………………………………. 273

4.4.8. Модули для показа подробностей о продуктах………………………………………………….. 274

4.5. Фильтрация сведений о продуктах с использованием статичного древовидного каталога категорий продуктов 276

4.6. Фильтрация сведений о продуктах с использованием динамичного древовидного каталога категорий продуктов     284

4.7. Создание древовидных меню с использованием плагина megamenu-js……………………… 293

4.7.1. Плагин megamenu-js: подготовка к работе………………………………………………………….. 293

4.7.2. Создание мегаменю на основе плагина megamenu-js…………………………………………. 295

4.8. Фильтрация продуктов с использованием панели инструментов и древовидного каталога категорий     300

4.9. Краткие итоги……………………………………………………………………………………………………………………. 314

Глава 5. Библиотека HTMX: модальные окна для ввода
и корректировки данных……………………………………………………………………… 315

5.1. Библиотека HTMX……………………………………………………………………………………………………………. 315

5.2. Ввод и редактирования сведений о клиентах сайта с модальными окнами
на основе библиотеки HTMX…………………………………………………………………………………………… 317

5.2.1. Модель и форма для ввода данных………………………………………………………………………. 317

5.2.2. Модули для создания редактора списка клиентов……………………………………………… 319

5.2.3. Модули для добавления клиентов в БД………………………………………………………………… 325

5.2.4. Программируем кнопку Изменить — для корректировки в БД сведений о клиентах……….. 327

5.2.5. Программируем кнопку Удалить — для удаления из БД сведений
о клиентах…………………………………………………………………………………………………………………………. 328

5.2.6. Программируем модули для показа подробных сведений о клиентах……………… 330

5.2.7. Испытание программных модулей для редактирования сведений
о клиентах в модальных окнах……………………………………………………………………………………….. 332

5.3. Краткие итоги……………………………………………………………………………………………………………………. 338

Глава 6. Интернет-магазин…………………………………………………………………… 339

6.1. Обмен данными между представлениями и шаблонами……………………………………………….. 340

6.1.1. Обмен данными через сессии…………………………………………………………………………………. 340

6.1.2. Обмен данными через контекстный процессор……………………………………………………. 341

6.2. Модели для корзины и заказов клиентов магазина электронной торговли………………… 342

6.3. Контекстный процессор для магазина электронной торговли…………………………………….. 344

6.4. Создаем магазин пользователя……………………………………………………………………………………….. 347

6.4.1. Вывод категорий продуктов в левой боковой панели магазина
(дерево свернуто)……………………………………………………………………………………………………………… 350

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

6.4.3. Вывод категорий продуктов в левой боковой панели магазина
(дерево раскрыто)…………………………………………………………………………………………………………….. 361

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

6.4.5. Вывод категорий продуктов в центральной панели в виде мегаменю………………. 368

6.4.6. Проверка работы модулей магазина пользователя с фильтрацией данных по дереву категорий продуктов в виде мегаменю…………………………………………………………………………………………………………………………… 371

6.5. Модули формирования корзины (предварительного заказа)……………………………………….. 375

6.5.1. Добавление продуктов (товаров) в корзину…………………………………………………………. 375

6.5.2. Вывод содержимого корзины (предварительного заказа)………………………………….. 378

6.5.3. Корректировка количества товара в корзине………………………………………………………. 382

6.5.4. Удаление товара из корзины…………………………………………………………………………………. 387

6.5.5. Формирование заказа для оплаты на основе набора продуктов,
помещенных в корзину…………………………………………………………………………………………………….. 389

6.5.6. Удаление корзины или активного заказа……………………………………………………………… 395

6.5.7. Проверка работы модулей для перевода корзины в предварительный заказ…… 397

6.5.8. Интеграция интернет-магазина с платежной платформой Robokassa………………. 402

6.5.9. Обработка сбоя оплаты заказа пластиковой картой………………………………………….. 406

6.5.10. Обработка успешной оплаты заказа банковской картой…………………………………. 407

6.5.11. Обработка реальной оплаты заказа банковской картой на платежной платформе Robokassa     409

6.6. Проверка работы модулей оплаты предварительного заказа……………………………………… 410

6.7. Модули для показа оплаченных заказов (покупок)………………………………………………………. 414

6.8. Проверка работы модулей для показа оплаченных заказов (покупок)……………………….. 418

6.9. Краткие итоги……………………………………………………………………………………………………………………. 420

Глава 7. Полезные советы……………………………………………………………………. 421

7.1. Показываем на сайте документ PDF……………………………………………………………………………….. 421

7.1.1. Создание документа в формате PDF……………………………………………………………………… 422

7.1.2. Вывод документа формата PDF из представления………………………………………………. 424

7.1.3. Вывод документа формата PDF из шаблона Django…………………………………………… 426

7.1.4. Вывод PDF-документа в формате флеш-анимации……………………………………………… 428

7.2. Переводим страницы сайта на другие языки…………………………………………………………………. 434

7.3. Отправляем с сайта почтовые сообщения……………………………………………………………………… 437

7.3.1. Регистрация в почтовом сервисе Timeweb……………………………………………………………. 438

7.3.2. Программные модули для отправки почтовых сообщений………………………………… 440

7.3.3. Проверка работы модулей отправки почтовых сообщений……………………………….. 443

7.4. Используем скрипты в шаблонах Django……………………………………………………………………….. 445

7.4.1. Скрипты для придания страницам сайта новогоднего стиля…………………………….. 446

7.4.2. Скрипты для анимации кнопок……………………………………………………………………………… 453

7.5. Используем фреймворк PyScript в шаблонах Django…………………………………………………….. 456

7.5.1. PyScript: отображение в шаблоне Django содержимого символьной переменной и списка                457

7.5.2. PyScript: импорт дополнительных библиотек, создание функции
и выполнение обращений к ним………………………………………………………………………………………. 459

7.5.3. PyScript: работа с пакетами NumPy и pandas………………………………………………………. 461

7.5.4. PyScript: работа с внешними библиотеками для обработки и визуализации данных           463

7.6. Используем пакет Brython для создания программ на Python для HTML-страниц……. 466

7.6.1. Brython: вывод на HTML-страницу обычной символьной строки…………………….. 467

7.6.2. Brython: игра «Змейка» (создание окон, функций и обращений к ним)……………… 468

7.7. Откатываем миграцию……………………………………………………………………………………………………… 474

7.8. Краткие итоги……………………………………………………………………………………………………………………. 475

Глава 8. Визуализация данных в Django………………………………………………. 477

8.1. Визуализация данных с библиотекой plotly.py: двумерная графика (2D)…………………… 477

8.1.1. Создание статичных графиков (одна линия)……………………………………………………….. 481

8.1.2. Создание статичных графиков (несколько линий)………………………………………………. 484

8.1.3. Отображение двух графиков в одном окне макета………………………………………………. 487

8.1.4. Отображение четырех графиков в одном окне макета………………………………………… 489

8.1.5. Создание 2D-диаграммы рассеяния……………………………………………………………………… 492

8.1.6. Создание круговой диаграммы……………………………………………………………………………… 495

8.1.7. Создание столбчатой гистограммы………………………………………………………………………. 497

8.1.8. Создание столбчатой гистограммы и сглаживающей кривой……………………………. 500

8.1.9. Создание графиков с тепловой картой…………………………………………………………………. 502

8.1.10. Создание пузырьковой диаграммы…………………………………………………………………….. 505

8.1.11. Пузырьковая диаграмма с цветными маркерами………………………………………………. 507

8.1.12. Пузырьковая диаграмма с масштабируемыми маркерами………………………………. 509

8.1.13. Пузырьковая диаграмма с поясняющим текстом на маркерах………………………… 512

8.1.14. Пузырьковая диаграмма с тепловой картой………………………………………………………. 514

8.1.15. Отображение статичных элементов на географических картах……………………… 516

8.2. Визуализация данных с библиотекой plotly.py: трехмерная графика (3D)…………………. 520

8.2.1. Создание 3D-графика линии по точкам………………………………………………………………… 520

8.2.2. Создание 3D-графика с указанием параметров линии……………………………………….. 522

8.2.3. Создание 3D-графика плавной витой линии………………………………………………………… 525

8.2.4. Создание 3D-графика линии с ключевыми точками……………………………………………. 527

8.2.5. Создание 3D-графика плоской поверхности………………………………………………………… 530

8.2.6. Создание 3D-графика изогнутой поверхности с использованием функций………. 533

8.2.7. Создание 3D-графика изогнутой поверхности с контурами
по вертикальной оси…………………………………………………………………………………………………………. 536

8.2.8. Создание 3D-графика поверхности с контурами по всем осям………………………….. 539

8.2.9. Создание 3D-графика поверхности с указанием параметров сцены и положения камеры 542

8.2.10. Создание 3D-графика поверхности с контурной сеткой…………………………………… 546

8.2.11. Создание 3D-диаграммы рассеяния точек…………………………………………………………. 549

8.3. Визуализация интерактивных графиков с библиотекой plotly.py………………………………… 551

8.3.1. Создание интерактивного 2D-графика со слайдером…………………………………………. 552

8.3.2. Комбинирование интерактивного графика с анимированными
изображениями…………………………………………………………………………………………………………………. 556

8.3.3. Вывод двух интерактивных графиков в одну координатную сетку…………………… 562

8.3.4. Вывод статичных и интерактивных графиков в одну координатную сетку……… 567

8.3.5. Анимация графиков с исчезновением элементов…………………………………………………. 571

8.3.6. Анимация графиков с появлением элементов………………………………………………………. 576

8.3.7. Анимация графиков с использованием фреймов и кнопок………………………………….. 583

8.3.8. Анимация графиков с использованием фреймов, кнопок и слайдера………………… 587

8.3.9. Анимация пузырьковой диаграммы………………………………………………………………………. 591

8.3.10. Анимация объемных 3D-срезов на примере снимков МРТ……………………………….. 598

8.3.11. Географические карты с анимацией данных пользовательских форм……………. 602

8.3.12. Географические карты с анимацией данных кнопками и слайдером……………… 608

8.4. Краткие итоги……………………………………………………………………………………………………………………. 612

Глава 9. Визуализация данных в Django с анимацией на JavaScript…….. 613

9.1. Включение JavaScript в шаблон Django………………………………………………………………………….. 613

9.1.1. Анимация диаграмм формата 2D………………………………………………………………………….. 614

Подключение библиотеки plotly.js………………………………………………………………………… 620

Тег <style>………………………………………………………………………………………………………………. 620

Теги для визуализации объектов…………………………………………………………………………… 620

Тег для кода на языке Java…………………………………………………………………………………….. 621

9.1.2. Анимация трехмерной диаграммы формата 3D…………………………………………………… 625

Подключение библиотеки plotly.js………………………………………………………………………… 631

Тег <style>………………………………………………………………………………………………………………. 631

Теги для визуализации объектов…………………………………………………………………………… 631

Тег для кода на языке Java…………………………………………………………………………………….. 632

9.2. Краткие итоги……………………………………………………………………………………………………………………. 635

Послесловие…………………………………………………………………………………………. 637

Приложение 1. Порядок работы с интерактивной цифровой платформой 639

Просмотр карточек с загруженными книгами………………………………………………………………………. 640

Просмотр вкладок цифровой книги………………………………………………………………………………………… 643

Вкладка Текст PDF………………………………………………………………………………………………………….. 645

Вкладка Листинги……………………………………………………………………………………………………………. 646

Вкладка Показ примеров…………………………………………………………………………………………………. 647

Приложение 2. Регистрация интернет-магазина на сайте платформы Robokassa  651

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

Опубликовано

Встречайте: “Байесовская оптимизация с примерами из библиотек Python”

Байесовская оптимизация с примерами из библиотек Python

Книга рассказывает об оптимизации моделей машинного обучения на основе байесовского метода и теории вероятностей. Примеры составлены на языке Python с использованием библиотек PyTorch, GPyTorch и BoTorch.  Описаны приёмы настройки гиперпараметров, гауссовское распределение, использование политик машинного обучения, в частности на основе задачи о многоруких бандитах, повышение производительности вычислений, многовариантная оптимизация с учётом полезности и затрат, а также применение байесовского метода в специализированных сценариях.

Для специалистов по машинному обучению и математическим алгоритмам

Книга предназначена для практикующих специалистов по машинному обучению, уверенно ориентирующихся в математических методах и статистике.

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

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

Что внутри:

  • Гауссовские процессы для малых и больших наборов данных
  • Стратегии настройки гиперпараметров в моделях машинного обучения
  • Определение высокоэффективных регионов
  • Решение задач с использованием библиотек PyTorch, GPyTorch и BoTorch

Книгу “Байесовская оптимизация с примерами из библиотек PythonReact 19. Разработка веб-приложений на JavaScript” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение…………………………………………………………………………………………………………………………………… 11

Пролог……………………………………………………………………………………………………………………………………….. 13

Благодарности…………………………………………………………………………………………………………………………. 15

О книге……………………………………………………………………………………………………………………………………….. 17

Кому следует прочитать эту книгу?………………………………………………………………………………………………….. 17

Как организована эта книга: дорожная карта……………………………………………………………………………………. 17

О коде……………………………………………………………………………………………………………………………………………. 20

Дискуссионный форум liveBook………………………………………………………………………………………………………… 21

Архив с иллюстрациями к книге……………………………………………………………………………………………………….. 21

Об авторе………………………………………………………………………………………………………………………………….. 22

О техническом редакторе……………………………………………………………………………………………………………….. 22

Об изображении на обложке………………………………………………………………………………………………… 23

Глава 1. Введение в байесовскую оптимизацию……………………………………………………………. 24

1.1. Нахождение оптимума дорогостоящей функции «черного ящика»………………………………………………. 25

1.1.1. Настройка гиперпараметров как пример дорогостоящей задачи оптимизации
«черного ящика»……………………………………………………………………………………………………………………… 25

1.1.2. Проблема дорогостоящей оптимизации «черного ящика»…………………………………………………. 27

1.1.3. Другие реальные примеры дорогостоящих задач оптимизации «черного ящика»……………….. 28

1.2. Введение в байесовскую оптимизацию……………………………………………………………………………………… 30

1.2.1. Моделирование с помощью гауссовского процесса…………………………………………………………… 31

1.2.2. Принятие решений с помощью политики БО…………………………………………………………………….. 34

1.2.3. Объединение ГП и политики БО для формирования цикла оптимизации……………………………. 35

1.2.4. Байесовская оптимизация в действии………………………………………………………………………………. 37

1.3. Что вы узнаете в этой книге?……………………………………………………………………………………………………. 43

Заключение……………………………………………………………………………………………………………………………………. 44

Часть I. Моделирование с помощью гауссовских процессов………………….. 45

Глава 2. Гауссовский процесс как распределение по функциям…………………………………. 47

2.1. Как продать свой дом по методу Байеса……………………………………………………………………………………. 49

2.2. Моделирование корреляций с помощью многомерных гауссовских распределений и байесовских обновлений             51

2.2.1. Использование многомерных распределений Гаусса для совместного моделирования нескольких переменных 51

2.2.2. Обновление нормальных распределений…………………………………………………………………………. 55

2.2.3. Моделирование множества переменных с помощью многомерных гауссовских распределений 58

2.3. Переход от конечной гауссианы к бесконечной………………………………………………………………………….. 60

2.4. Реализация ГП в Python……………………………………………………………………………………………………………. 65

2.4.1. Настройка обучающих данных…………………………………………………………………………………………. 65

2.4.2. Реализация класса ГП……………………………………………………………………………………………………… 67

2.4.3. Создание прогнозов с помощью ГП………………………………………………………………………………….. 69

2.4.4. Визуализация прогнозов ГП…………………………………………………………………………………………….. 70

2.4.5. Выход за рамки одномерных целевых функций…………………………………………………………………. 73

2.5. Упражнение……………………………………………………………………………………………………………………………… 75

Заключение……………………………………………………………………………………………………………………………………. 77

Глава 3. Настройка ГП с помощью функций среднего значения и ковариации……….. 78

3.1. Важность априорных знаний в байесовских моделях………………………………………………………………….. 79

3.2. Включение предварительных знаний в ГП………………………………………………………………………………… 82

3.3. Определение поведения целевой функции с помощью функции среднего значения……………………. 83

3.3.1. Использование функции нулевого среднего в качестве базовой стратегии………………………… 84

3.3.2. Использование постоянной функции с градиентным спуском…………………………………………….. 86

3.3.3. Использование линейной функции с градиентным спуском……………………………………………….. 90

3.3.4. Использование квадратичной функции с помощью реализации пользовательской функции среднего  92

3.4. Определение изменчивости и гладкости с помощью ковариационной функции…………………………… 95

3.4.1. Настройка масштабов функции ковариации……………………………………………………………………… 95

3.4.2. Управление гладкостью с помощью различных ковариационных функций…………………………. 99

3.4.3. Моделирование различных уровней изменчивости с помощью
множественных масштабов длины…………………………………………………………………………………………… 101

3.5. Упражнение……………………………………………………………………………………………………………………………. 104

Заключение………………………………………………………………………………………………………………………………….. 106

Часть II. Принятие решений с помощью байесовской оптимизации…… 107

Глава 4. Достижение наилучшего результата с помощью политик,
основанных на улучшениях………………………………………………………………………………………………… 109

4.1. Навигация по пространству поиска в БО………………………………………………………………………………….. 110

4.1.1. Цикл БО и политики……………………………………………………………………………………………………….. 110

4.1.2. Баланс между исследованием и эксплуатацией……………………………………………………………….. 120

4.2. Поиск улучшений в БО……………………………………………………………………………………………………………. 122

4.2.1. Измерение улучшения с помощью ГП…………………………………………………………………………….. 123

4.2.2. Вычисление вероятности улучшения……………………………………………………………………………… 127

4.2.3. Запуск политики PoI……………………………………………………………………………………………………….. 131

4.3. Оптимизация ожидаемого значения улучшения……………………………………………………………………….. 135

4.4. Упражнения……………………………………………………………………………………………………………………………. 139

4.4.1. Упражнение 1: поощрение исследования с помощью PoI………………………………………………… 139

4.4.2. Упражнение 2: БО для настройки гиперпараметров………………………………………………………… 140

Заключение………………………………………………………………………………………………………………………………….. 142

Глава 5. Исследование пространства поиска с помощью «многорукого бандита». 143

5.1. Введение в задачу многорукого бандита………………………………………………………………………………….. 144

5.1.1. Как найти наилучший игровой автомат в казино……………………………………………………………… 144

5.1.2. От MAB к БО………………………………………………………………………………………………………………….. 147

5.2. Как быть оптимистом в условиях неопределенности с помощью политики
верхней доверительной границы…………………………………………………………………………………………….. 149

5.2.1. Оптимизм в условиях неопределенности………………………………………………………………………… 149

5.2.2. Баланс между исследованием и эксплуатацией……………………………………………………………….. 152

5.2.3. Реализация с помощью BoTorch…………………………………………………………………………………….. 154

5.3. Интеллектуальная выборка с помощью политики выборки Томпсона……………………………………….. 157

5.3.1. Одна выборка для представления неизвестного……………………………………………………………… 157

5.3.2. Реализация с помощью BoTorch…………………………………………………………………………………….. 160

5.4. Упражнения……………………………………………………………………………………………………………………………. 166

5.4.1. Упражнение 1: Настройка плана эксплуатации для UCB………………………………………………….. 167

5.4.2. Упражнение 2: БО для настройки гиперпараметров………………………………………………………… 167

Заключение………………………………………………………………………………………………………………………………….. 168

Глава 6. Использование теории информации с политиками на основе энтропии.. 170

6.1. Измерение знаний с помощью теории информации…………………………………………………………………. 171

6.1.1. Измерение неопределенности с помощью энтропии……………………………………………………….. 171

6.1.2. Поиск пульта дистанционного управления с помощью энтропии………………………………………. 174

6.1.3. Бинарный поиск с применением энтропии………………………………………………………………………. 177

6.2. Энтропийный поиск в БО………………………………………………………………………………………………………… 183

6.2.1. Поиск оптимума с помощью теории информации…………………………………………………………….. 183

6.2.2. Реализация энтропийного поиска с помощью BoTorch…………………………………………………….. 187

6.3. Упражнения……………………………………………………………………………………………………………………………. 190

6.3.1. Упражнение 1: Включение предварительных (априорных) знаний в энтропийный поиск…… 190

6.3.2. Упражнение 2: Байесовская оптимизация для настройки гиперпараметров……………………… 192

Заключение………………………………………………………………………………………………………………………………….. 193

Часть III. Расширение байесовской оптимизации на специализированные сценарии               195

Глава 7. Максимизация производительности за счет оптимизации
пакетной обработки……………………………………………………………………………………………………………… 197

7.1. Одновременное выполнение нескольких оценок функций………………………………………………………… 198

7.1.1. Параллельное использование всех доступных ресурсов………………………………………………….. 198

7.1.2. Почему нельзя использовать обычные политики БО в пакетном режиме?……………………….. 201

7.2. Вычисление улучшения и верхней доверительной границы для набора точек…………………………… 203

7.2.1. Расширение эвристик оптимизации для пакетного режима………………………………………………. 203

7.2.2. Реализация пакетных политик PoI, EI и UCB…………………………………………………………………… 210

7.3. Упражнение 1: Расширение TS до пакетной оптимизации с помощью повторной выборки………… 216

7.4. Вычисление ценности пакета точек с помощью теории информации………………………………………… 217

7.4.1. Нахождение наиболее информативного пакета точек с помощью цикличного уточнения….. 217

7.4.2. Реализация пакетного энтропийного поиска с помощью BoTorch…………………………………….. 220

7.5. Упражнение 2: Оптимизация конструкции самолета…………………………………………………………………. 222

Заключение………………………………………………………………………………………………………………………………….. 225

Глава 8. Удовлетворение особых ограничений с помощью
ограниченной оптимизации………………………………………………………………………………………………… 227

8.1. Учет ограничений в задаче ограниченной оптимизации…………………………………………………………… 228

8.1.1. Ограничения могут изменить решение задачи оптимизации……………………………………………. 228

8.1.2. Структура БО, учитывающая ограничения……………………………………………………………………… 231

8.2. Принятие решений с учетом ограничений в БО……………………………………………………………………….. 232

8.3. Упражнение 1: Ручное вычисление ограниченной EI………………………………………………………………… 238

8.4. Реализация ограниченной EI с помощью BoTorch……………………………………………………………………. 239

8.5. Упражнение 2: Ограниченная оптимизация при конструировании самолета………………………………. 243

Заключение………………………………………………………………………………………………………………………………….. 245

Глава 9. Балансирование между полезностью и затратами
с помощью многовариантной оптимизации…………………………………………………………………… 246

9.1. Использование приближений с низкой точностью для изучения дорогостоящих явлений…………… 248

9.2. Разноточное моделирование с помощью ГП……………………………………………………………………………. 251

9.2.1. Форматирование разноточного набора данных……………………………………………………………….. 251

9.2.2. Обучение разноточного ГП…………………………………………………………………………………………….. 255

9.3. Баланс между информацией и затратами в разноточной оптимизации……………………………………… 260

9.3.1. Моделирование затрат на запросы различной точности………………………………………………….. 260

9.3.2. Оптимизация количества информации для управления оптимизацией…………………………….. 262

9.4. Измерение производительности в разноточной оптимизации…………………………………………………… 267

9.5. Упражнение 1: Визуализация средней производительности в разноточной оптимизации…………… 272

9.6. Упражнение 2: Разноточная оптимизация с использованием нескольких
низкоточных приближений………………………………………………………………………………………………………. 273

Заключение………………………………………………………………………………………………………………………………….. 275

Глава 10. Обучение на парных сравнениях с помощью оптимизации
предпочтений…………………………………………………………………………………………………………………………. 277

10.1. Оптимизация «черного ящика» с помощью парных сравнений……………………………………………….. 279

10.2. Формулировка задачи оптимизации предпочтений и форматирование данных
парного сравнения………………………………………………………………………………………………………………… 282

10.3. Обучение ГП, основанного на предпочтениях………………………………………………………………………… 286

10.4. Оптимизация предпочтений с помощью игры «Царь горы»…………………………………………………….. 290

Заключение………………………………………………………………………………………………………………………………….. 294

Глава 11. Оптимизация нескольких целевых функций одновременно……………………. 296

11.1. Балансирование нескольких целей оптимизации с помощью БО…………………………………………….. 297

11.2. Нахождение границы наиболее оптимальных точек данных……………………………………………………. 299

11.3. Стремление к улучшению оптимальной границы данных………………………………………………………… 307

11.4. Упражнение: Многоцелевая оптимизация для конструирования самолета………………………………. 313

Заключение………………………………………………………………………………………………………………………………….. 314

Часть IV. Специальные модели гауссовского процесса……………………………. 315

Глава 12. Масштабирование гауссовского процесса для больших наборов
данных……………………………………………………………………………………………………………………………………… 317

12.1. Обучение ГП на большом наборе данных………………………………………………………………………………. 319

12.1.1. Постановка задачи обучения……………………………………………………………………………………… 319

12.1.2. Обучение обычного ГП………………………………………………………………………………………………. 322

12.1.3. Проблемы с обучением обычного ГП………………………………………………………………………….. 324

12.2. Автоматический выбор репрезентативных точек из большого набора данных………………………… 327

12.2.1. Минимизация различий между двумя ГП…………………………………………………………………….. 327

12.2.2. Обучение модели небольшими пакетами……………………………………………………………………. 329

12.2.3. Реализация приближенной модели…………………………………………………………………………….. 332

12.3. Достижение лучшей оптимизации с учетом геометрии поверхности потерь……………………………… 338

12.4. Упражнение………………………………………………………………………………………………………………………….. 344

Заключение………………………………………………………………………………………………………………………………….. 346

Глава 13. Комбинирование гауссовских процессов с нейросетями………………………… 347

13.1. Данные, имеющие структуру………………………………………………………………………………………………….. 348

13.2. Нахождение сходства в структурированных данных……………………………………………………………….. 351

13.2.1. Использование ядра с GPyTorch………………………………………………………………………………… 352

13.2.2. Работа с изображениями в PyTorch…………………………………………………………………………….. 352

13.2.3. Вычисление ковариации двух изображений………………………………………………………………… 354

13.2.4. Обучение ГП на изображениях…………………………………………………………………………………… 355

13.3. Использование нейросетей для обработки сложных структурированных данных……………………… 359

13.3.1. Зачем использовать нейросети для моделирования?………………………………………………….. 359

13.3.2. Реализация комбинированной модели в GPyTorch………………………………………………………. 361

Заключение………………………………………………………………………………………………………………………………….. 368

ПРИЛОЖЕНИЕ. Решения для упражнений………………………………………………………………………… 369

П.1. Глава 2: Гауссовский процесс как распределение по функциям……………………………………………….. 369

П.2. Глава 3: Объединение предварительных знаний с функциями среднего и ковариации……………… 372

П.3. Глава 4: Достижение наилучшего результата с помощью политик,
основанных на улучшениях…………………………………………………………………………………………………….. 374

П.3.1. Упражнение 1: Поощрение исследований с помощью вероятности улучшения……………….. 375

П.3.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 376

П.4. Глава 5: Исследование пространства поиска с помощью политик «многорукого бандита»…………. 382

П.4.1. Упражнение 1: Настройка плана исследования для верхней доверительной границы……… 383

П.4.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 384

П.5. Глава 6: Использование теории информации с политиками, основанными на энтропии……………. 387

П.5.1. Упражнение 1: Включение предварительных знаний в энтропийный поиск…………………….. 388

П.5.2. Упражнение 2: БО для настройки гиперпараметров……………………………………………………….. 391

П.6. Глава 7: Увеличение пропускной способности с помощью пакетной оптимизации…………………….. 392

П.6.1. Упражнение 1: Расширение TS для пакетного режима с помощью повторной выборки…… 392

П.6.2. Упражнение 2: Оптимизация конструкции самолета……………………………………………………….. 393

П.7. Глава 8: Удовлетворение дополнительных ограничений с помощью ограниченной оптимизации. 397

П.7.1. Упражнение 1: Ручное вычисление ограниченной политики EI……………………………………….. 397

П.7.2. Упражнение 2: Ограниченная оптимизация конструкции самолета…………………………………. 400

П.8. Глава 9: Баланс между полезностью и затратами с помощью разноточной оптимизации…………… 402

П.8.1. Упражнение 1: Визуализация средней производительности при разноточной оптимизации 403

П.8.2. Упражнение 2: Разноточная оптимизация с использованием нескольких
низкоточных приближений……………………………………………………………………………………………………… 405

П.9. Глава 11: Оптимизация нескольких целевых функций одновременно……………………………………….. 407

П.10. Глава 12: Масштабирование гауссовских процессов на большие наборы данных……………………. 409

Предметный указатель………………………………………………………………………………………………………… 414

Опубликовано

Новинка: “Python. Красивые задачи для начинающих”

Python. Красивые задачи для начинающих

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

Для начинающих программистов

Python — это красиво!

Главная причина популярности языка Python — его лаконичность, простота и выразительность. Один и тот же алгоритм на этом языке можно запрограммировать по-разному – так, что будет казаться, будто программа написана на разных языках. В этой книге приводятся алгоритмы решения задач на Python, которые автор считает красивыми — все они имеют несколько вариантов решений и формируют алгоритмическое мышление. Эти алгоритмы – часть хорошего IT-образования. Рассмотрев предложенные задачи, знакомый с основами Python читатель сможет проверить, действительно ли он умеет программировать, а изучив их решения, значительно улучшит свои алгоритмические навыки. Ценность книги состоит в том, что в ней приводится детальное пошаговое описание процесса написания программы для решения каждой поставленной задачи.

  • Структурное программирование
  • Динамическое программирование
  • Объектно-ориентированное программирование
  • Функциональное программирование

Книгу “Python. Красивые задачи для начинающих” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 7

На кого рассчитана эта книга?………………………………………………………………………………………………… 10

Структура книги………………………………………………………………………………………………………………………… 11

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

Глава 1. Условия……………………………………………………………………………………. 13

1.1. Квадратное уравнение, комплексные корни…………………………………………………………………….. 13

Задача………………………………………………………………………………………………………………………………….. 13

1.2. Кирпич и дыра в стене………………………………………………………………………………………………………… 18

Задача………………………………………………………………………………………………………………………………….. 18

Версия 1……………………………………………………………………………………………………………………… 19

Версия 2……………………………………………………………………………………………………………………… 20

Версия 3……………………………………………………………………………………………………………………… 21

Глава 2. Структурное программирование………………………………………………. 23

2.1. Полупроходной балл………………………………………………………………………………………………………….. 23

Задача 1………………………………………………………………………………………………………………………………. 23

Версия 1……………………………………………………………………………………………………………………… 24

Версия 2……………………………………………………………………………………………………………………… 25

Задача 2………………………………………………………………………………………………………………………………. 28

Версия 3……………………………………………………………………………………………………………………… 28

Версия 4……………………………………………………………………………………………………………………… 29

Задача 3………………………………………………………………………………………………………………………………. 31

Версия 5……………………………………………………………………………………………………………………… 32

2.2. Метеостанция……………………………………………………………………………………………………………………… 33

Задача………………………………………………………………………………………………………………………………….. 33

Версия 1……………………………………………………………………………………………………………………… 34

Версия 2……………………………………………………………………………………………………………………… 37

2.3. Седловина матрицы……………………………………………………………………………………………………………. 40

Задача………………………………………………………………………………………………………………………………….. 40

2.4. Максимальный квадрат в матрице, заполненный нулями………………………………………………. 43

Задача………………………………………………………………………………………………………………………………….. 43

2.5. Чемпионат по игре в тетрис……………………………………………………………………………………………….. 46

Задача………………………………………………………………………………………………………………………………….. 46

2.6. Проверка правильности расстановки скобок…………………………………………………………………… 51

Задача………………………………………………………………………………………………………………………………….. 51

Глава 3. Функции………………………………………………………………………………….. 57

3.1. Решето Эратосфена и числа-близнецы…………………………………………………………………………….. 57

Задача………………………………………………………………………………………………………………………………….. 57

3.2. Решето Сундарама……………………………………………………………………………………………………………… 65

Задача………………………………………………………………………………………………………………………………….. 65

3.3. Лесенка………………………………………………………………………………………………………………………………… 67

Задача………………………………………………………………………………………………………………………………….. 67

3.4. Линейный и медианный фильтры………………………………………………………………………………………. 73

Задача 1………………………………………………………………………………………………………………………………. 73

Задача 2………………………………………………………………………………………………………………………………. 84

3.5. Алгоритм Евклида………………………………………………………………………………………………………………. 85

Задача………………………………………………………………………………………………………………………………….. 85

3.6. Гипероператоры…………………………………………………………………………………………………………………. 91

Задача………………………………………………………………………………………………………………………………….. 91

3.7. Ханойские башни……………………………………………………………………………………………………………… 102

Задача……………………………………………………………………………………………………………………………….. 102

3.8. Отображения списков……………………………………………………………………………………………………….. 109

Задача……………………………………………………………………………………………………………………………….. 109

Глава 4. Поиск в длину и ширину, бэктрекинг,
динамическое программирование………………………………………………………… 119

4.1. Лабиринт……………………………………………………………………………………………………………………………. 119

Задача 1…………………………………………………………………………………………………………………………….. 120

Версия 1…………………………………………………………………………………………………………………… 120

Версия 2…………………………………………………………………………………………………………………… 125

Версия 3…………………………………………………………………………………………………………………… 130

Версия 4…………………………………………………………………………………………………………………… 134

Задача 2…………………………………………………………………………………………………………………………….. 139

4.2. Задача о восьми ферзях……………………………………………………………………………………………………. 143

Задача……………………………………………………………………………………………………………………………….. 143

Версия 1…………………………………………………………………………………………………………………… 143

Версия 2…………………………………………………………………………………………………………………… 156

4.3. Поиск индекса элемента в списке……………………………………………………………………………………. 161

Задача……………………………………………………………………………………………………………………………….. 161

Версия 1…………………………………………………………………………………………………………………… 161

Версия 2…………………………………………………………………………………………………………………… 162

Версия 3…………………………………………………………………………………………………………………… 163

4.4. Сжатие строки…………………………………………………………………………………………………………………… 167

Задача……………………………………………………………………………………………………………………………….. 167

4.5. Укладка рюкзака………………………………………………………………………………………………………………. 176

Задача……………………………………………………………………………………………………………………………….. 176

4.6. Подпоследовательность максимальной длины……………………………………………………………… 180

Задача……………………………………………………………………………………………………………………………….. 181

Версия 1…………………………………………………………………………………………………………………… 181

Версия 2…………………………………………………………………………………………………………………… 184

Версия 3…………………………………………………………………………………………………………………… 186

Версия 4…………………………………………………………………………………………………………………… 191

4.7. Палиндром наибольшей длины……………………………………………………………………………………….. 199

Задача……………………………………………………………………………………………………………………………….. 199

4.8. Гиперсфера………………………………………………………………………………………………………………………… 208

Задача……………………………………………………………………………………………………………………………….. 209

Глава 5. Объектно-ориентированное программирование…………………….. 219

5.1. Графы с помощью словарей…………………………………………………………………………………………….. 219

Задача 1…………………………………………………………………………………………………………………………….. 220

Задача 2…………………………………………………………………………………………………………………………….. 220

Задача 3…………………………………………………………………………………………………………………………….. 224

Задача 4…………………………………………………………………………………………………………………………….. 225

Задача 5…………………………………………………………………………………………………………………………….. 226

Задача 6…………………………………………………………………………………………………………………………….. 227

Задача 7…………………………………………………………………………………………………………………………….. 228

Задача 8…………………………………………………………………………………………………………………………….. 228

5.2. Родословное древо……………………………………………………………………………………………………………. 230

Задача 1…………………………………………………………………………………………………………………………….. 230

Задача 2…………………………………………………………………………………………………………………………….. 238

Задача 3…………………………………………………………………………………………………………………………….. 243

5.3. Период в числовой последовательности………………………………………………………………………… 252

Задача……………………………………………………………………………………………………………………………….. 252

Версия 1…………………………………………………………………………………………………………………… 252

Версия 2…………………………………………………………………………………………………………………… 253

Версия 3…………………………………………………………………………………………………………………… 254

5.4. Треугольник Паскаля и сочетания………………………………………………………………………………….. 257

Задача 1…………………………………………………………………………………………………………………………….. 257

Задача 2…………………………………………………………………………………………………………………………….. 259

Отступление про функторы……………………………………………………………………………………. 262

5.5. Гиперкуб в многомерном пространстве………………………………………………………………………….. 266

Задача……………………………………………………………………………………………………………………………….. 266

Глава 6. Функциональное программирование……………………………………… 287

6.1. Интеграл…………………………………………………………………………………………………………………………….. 288

Задача……………………………………………………………………………………………………………………………….. 288

6.2. Отображения, сохраняющие внутреннюю структуру…………………………………………………… 298

Общая задача……………………………………………………………………………………………………………………. 298

Задача 1…………………………………………………………………………………………………………………………….. 299

Задача 2…………………………………………………………………………………………………………………………….. 302

Задача 3…………………………………………………………………………………………………………………………….. 304

6.3. Цепочки функций………………………………………………………………………………………………………………. 305

Задача……………………………………………………………………………………………………………………………….. 305

6.4. Монады……………………………………………………………………………………………………………………………… 309

Задача……………………………………………………………………………………………………………………………….. 309

6.5. Карринг……………………………………………………………………………………………………………………………… 319

Задача……………………………………………………………………………………………………………………………….. 319

6.6. Функторы…………………………………………………………………………………………………………………………… 331

Задача……………………………………………………………………………………………………………………………….. 331

Выводы по главам 3, 4 и 6……………………………………………………………………………………………………….. 342

Глава 7. Сюрреализм……………………………………………………………………………. 345

7.1. Фрактальные списки…………………………………………………………………………………………………………. 345

7.2. Фрактальный словарь………………………………………………………………………………………………………. 346

7.3. Бесконечные вызовы функции…………………………………………………………………………………………. 346

7.4. Функтор с бесконечными вызовами………………………………………………………………………………… 347

Заключение………………………………………………………………………………………….. 349

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

Добряк Павел Вадимович

Добряк Павел Вадимович — кандидат технических наук, преподаватель Уральского федерального университета. Проводит занятия по различным языкам программирования, базам данных, искусственному интеллекту и проектированию информационных систем. Репетитор по математике и информатике.

Опубликовано

Вышла книга Дуга Фаррелла “Python. Как стать профессионалом”

Python. Как стать профессионалом

Книга ориентирована на читателей, имеющих базовый опыт программирования на языке Python и желающих быстро научиться применять его в реальных проектах или изучить Python в качестве второго языка. Рассмотрен широкий круг тем от соблюдения чистоты кода и грамотного именования функций и переменных, до проектирования API, правил объектно-ориентированного программирования, обеспечения безопасности (аутентификация, авторизация) и взаимодействия с базами данных. Затронут широкий круг вопросов, связанных с программированием модулей на Python, автоматизацией задач, использования веб-фреймворков, в частности Flask.

Для программистов на Python

Разработка приложений с Python и Flask

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

Эта книга поможет вам пройти путь от начинающего Python-программиста до уверенного Python-разработчика.

Книга помогает понять, почему Python – самый популярный язык в мире – необыкновенно хорош для профессиональной разработки. Работая с этим языком, легко приобрести важные профессиональные навыки – научиться именовать переменные, функции и классы, продумывать и писать качественные API, пользоваться объектами. Также в ней объяснено, как справляться с неизбежными отказами, в особенности сетевыми, соблюдать ключевые правила обеспечения безопасности, подключаться к базам данных и научиться профессионально решать конкретные задачи в рамках больших проектов на Python.

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

Книгу “Python. Как стать профессионалом” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 13

Введение. 15

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

Об этой книге. 19

Для кого предназначена данная книга. 19

Структура книги: ее дорожная карта. 20

О коде. 22

Об авторе. 23

Глава 1. Становление питониста. 25

1.1. Стремление к обучению.. 26

1.2. Достижение целей. 27

1.2.1. Стиль мышления разработчика. 27

1.2.2. Создание приложений. 28

1.3. Использование языка Python. 28

1.3.1. Парадигмы программирования. 28

1.3.2. Создание сопровождаемого кода. 29

1.3.3. Производительность. 30

1.3.4. Сообщество приверженцев языка. 32

1.3.5. Инструментарий разработчика. 33

1.4. Выбор используемой версии Python. 34

1.5. Заключительные размышления. 35

1.6. Резюме. 35

Часть I. Закладка фундамента. 37

Глава 2. Подходящие имена. 39

2.1. Имена. 39

2.1.1. Присвоение имен. 41

2.1.2. Эксперимент по присвоению имен. 44

2.2. Пространства имен. 46

2.3. Пространства имен в языке Python. 47

2.3.1. Уровень встроенных модулей. 48

2.3.2. Уровень модуля. 49

2.3.3. Уровень функций. 53

2.3.4. Область видимости пространства имен. 54

2.3.5. Эксперимент с пространством имен. 56

2.4. Резюме. 60

Глава 3. API: давайте пообщаемся. 61

3.1. Начало разговора. 62

3.1.1. Соглашение, заключаемое между частями кода. 63

3.1.2. Что передается в качестве входных данных. 64

3.1.3. Что ожидается на выходе. 66

3.2. Работа API 69

3.2.1. Именование. 69

3.2.2. Параметры. 70

3.2.3. Возвращаемое значение. 73

3.2.4. Единственная ответственность. 73

3.2.5. Длина функции. 74

3.2.6. Идемпотентность. 75

3.2.7. Побочные эффекты. 75

3.3. Документация. 77

3.4. Заключительные размышления. 78

3.5. Резюме. 78

Глава 4. Объект разговора. 80

4.1. Объектно-ориентированное программирование. 80

4.1.1. Определение класса. 81

4.1.2. Рисование с помощью класса. 83

4.1.3. Наследование. 94

4.1.4. Полиморфизм. 102

4.1.5. Композиция. 103

4.2. Заключительные размышления. 107

4.3. Резюме. 107

Глава 5. Исключительные события. 109

5.1. Исключения. 111

5.2. Обработка исключений. 113

5.2.1. Обработка исключения, если код способен как-то исправить ситуацию.. 114

5.2.2. Предоставление исключениям возможности перемещаться вверх
по коду ваших программ. 114

5.2.3. Информирование пользователя. 115

5.2.4. Не стоит замалчивать исключения. 115

5.3. Выдача исключений. 120

5.4. Создание пользовательских исключений. 121

5.5. Заключительные размышления. 124

5.6. Резюме. 124

Часть II. Работа над конкретным заданием.. 125

Глава 6. Обмен информацией по Интернету. 127

6.1. Делитесь своей работой с другими. 127

6.1.1. Преимущества веб-приложений. 128

6.1.2. Сложности, связанные с использованием веб-приложений. 128

6.2. Серверы. 129

6.2.1. Модель “запрос — ответ”. 130

6.3. Веб-серверы. 131

6.4. Flask. 134

6.4.1. Почему именно Flask?. 134

6.4.2. Ваш первый веб-сервер. 135

6.4.3. Обслуживание содержимого. 138

6.4.4. Дополнительные функции Jinja2. 141

6.5. Запуск веб-сервера. 153

6.5.1. Gunicorn. 154

6.5.2. Коммерческий хостинг. 154

6.6. Заключительные размышления. 155

6.7. Резюме. 155

Глава 7. Работа со стилем.. 157

7.1. Стилизация приложения. 157

7.1.1. Создание привлекательных стилей. 158

7.1.2. Согласованность стилей. 158

7.1.3. Нормализация стилей. 159

7.1.4. Адаптивный дизайн. 159

7.2. Встраивание Bootstrap. 160

7.2.1. Предыдущий пример, теперь с Bootstrap. 160

7.3. Помощь в развитии приложения MyBlog. 169

7.3.1. Экземпляр приложения Flask. 169

7.4. Пространства имен. 174

7.4.1. Flask Blueprints 174

7.4.2. Добавление Blueprints в MyBlog. 175

7.4.3. Создание страницы “О сайте”. 179

7.4.4. Реструктуризированный app-экземпляр. 181

7.5. Навигация. 181

7.5.1. Создание навигационной информации. 182

7.5.2. Отображение навигационной информации. 183

7.5.3. Текущий вид MyBlog. 184

7.6. Конфигурация приложения. 186

7.6.1. Файлы конфигурации. 186

7.6.2. Закрытая информация. 186

7.7. Панель инструментов отладки Flask. 187

7.7.1. FlaskDynaConf 187

7.8. Регистрационная информация. 192

7.8.1. Конфигурация. 192

7.9. Добавление фавикона. 196

7.10. Заключительные размышления. 198

7.11. Резюме. 198

Глава 8. А я тебя знаю? Аутентификация. 200

8.1. Протокол HTTP, не имеющий состояния. 200

8.1.1. Сессии. 201

8.2. Запоминание пользователя. 202

8.2.1. Аутентификация. 203

8.2.2. Вход в систему. 213

8.3. Экстренные сообщения. 219

8.3.1. Усовершенствование формы входа. 220

8.4. Расширение круга друзей. 223

8.4.1. Blueprint-схема аутентификации. 224

8.4.2. Новая форма для пользователя. 225

8.4.3. Ах да: выход из системы. 228

8.5. Что дальше. 229

8.6. Резюме. 229

Глава 9. Какие действия вам разрешены? Авторизация. 230

9.1. Переход ко входу и выходу. 230

9.2. Подтверждение новых друзей. 232

9.2.1. Отправка электронной почты. 233

9.3. Сброс паролей. 239

9.4. Профили пользователей. 243

9.5. Безопасность. 246

9.5.1. Защита маршрутов. 246

9.6. Роли пользователей, задаваемые авторизацией. 247

9.6.1. Создание ролей. 247

9.6.2. Авторизация маршрутов. 250

9.7. Защита форм. 253

9.8. Заключительные размышления. 253

9.9. Резюме. 254

Глава 10. Выгоды от постоянства: базы данных. 255

10.1. Вторая половина дела. 255

10.1.1. Долговременное хранение информации. 256

10.2. Доступ к данным. 256

10.3. Системы управления базами данных. 262

10.3.1. Таблицы. 262

10.3.2. Отношения. 263

10.3.3. База данных транзакций. 266

10.3.4. Язык структурированных запросов SQL. 268

10.4. Использование SQLite в качестве базы данных. 271

10.5. SQLAlchemy. 271

10.5.1. Преимущества. 272

10.6. Моделирование базы данных. 272

10.6.1. Определение классов. 273

10.7. Создание и использование базы данных. 277

10.7.1. Добавление данных. 277

10.7.2. Использование данных. 280

10.8. Заключительные размышления. 283

10.9. Резюме. 283

Глава 11. Мне есть что сказать. 285

11.1. Публикации в MyBlog. 285

11.1.1. Моделирование баз данных. 286

11.2. Изменение порядка изложения материала. 289

11.3. Blueprint-схема контента. 289

11.4. Отображение и создание публикаций. 290

11.4.1. Обработчик отображения. 290

11.4.2. Шаблон отображения. 291

11.5. Создание публикаций. 292

11.5.1. Обработчик создания. 292

11.5.2. Форма создания. 293

11.5.3. Шаблон создания. 294

11.6. Отображение и редактирование публикации. 295

11.6.1. Обработчик отображения. 295

11.6.2. Шаблон отображения. 296

11.6.3. Обработчик обновления. 298

11.6.4. Форма обновления. 299

11.6.5. Шаблон обновления. 300

11.7. Иерархия контента для комментариев. 301

11.7.1. Изменение класса сообщения. 304

11.7.2. Обработчик отображения. 305

11.7.3. Шаблон отображения. 308

11.8. Создание комментариев. 310

11.8.1. Шаблон создания. 310

11.8.2. Форма создания. 311

11.8.3. Обработчик создания. 311

11.9. Уведомление пользователей. 312

11.10. Обработка ошибок сайта. 314

11.11. Заключительные размышления. 317

11.12. Резюме. 317

Глава 12. И что, на этом всё?. 319

12.1. Тестирование. 319

12.1.1. Модульное тестирование. 320

12.1.2. Функциональное тестирование. 321

12.1.3. Сквозное тестирование. 321

12.1.4. Интеграционное тестирование. 321

12.1.5. Нагрузочное тестирование. 321

12.1.6. Тестирование производительности. 321

12.1.7. Регрессионное тестирование. 322

12.1.8. Тестирование доступности. 322

12.1.9. Приемочное тестирование. 322

12.2. Отладка. 323

12.2.1. Воспроизведение ошибок. 323

12.2.2. Точки останова. 323

12.2.3. Ведение журнала. 324

12.2.4. Неприемлемые результаты. 324

12.2.5. Процесс исключения. 325

12.2.6. Проговаривание проблемы. 325

12.3. Инструменты. 325

12.3.1. Управление исходным кодом. 325

12.3.2. Оптимизация. 326

12.3.3. Контейнеры. 327

12.3.4. Базы данных. 327

12.3.5. Языки. 328

12.4. Среды операционных систем. 329

12.5. Облачные вычисления. 329

12.6. Сеть. 330

12.7. Сотрудничество. 330

12.8. Заключительные размышления. 331

12.9. Резюме. 331

Приложение. Ваша среда разработки. 333

П1. Установка Python. 333

П1.1. Windows 334

П1.2. Mac. 334

П1.3. Linux. 335

П2. Виртуальная среда Python. 336

П2.1. Windows 337

П2.2. Mac и Linux. 338

П3. Настройка Visual Studio Code. 339

П3.1. Установка Visual Studio Code. 339

П3.2. Установка Python-расширения. 340

П3.3. Другие полезные расширения. 340

П3.4. Запуск из командной строки. 341

П3.5. Запуск проекта. 341

П4. Ряд полезных советов. 343

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

Doug Farrell

Дуг Фаррелл (Doug Farrell) занимается разработкой программных средств с 1983 года, хотя имеет степени бакалавра по двум явно смежным областям — по физике и по прикладному искусству. Дуг — программист-самоучка, на протяжении многих лет использовавший немало языков во многих отраслях: Pascal, Fortran, C/C++, PHP, Python и JavaScript. С Python он работает с 2000 года, а с 2006 года Python стал его основным языком. Дуг написал множество статей для RealPython.com. Он также преподавал в центре STEM, где использовалась существенная часть материалов разработанного им обучающего курса.

Опубликовано

Новинка: “Обработка данных на Python. Data Wrangling и Data Quality”

Обработка данных на Python. Data Wrangling и Data Quality

Книга посвящена первичной обработке данных (Data Wrangling) на Python  и  оценке их качества (Data Quality). Материал содержит основополагающие концепции, экспертные советы и  ресурсы, необходимые для первичной обработки, извлечения, оценки и анализа данных. Все темы раскрыты на простых и наглядных примерах из практики. Даны необходимые и достаточные сведения о языке программирования  Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также  для обработки данных в больших масштабах. Приведены лучшие практики  документирования и структурирования кода. Описан сбор данных из файлов, веб-страниц и API. Рассмотрены приемы проведения базового статистического анализа наборов данных, а также наглядные и убедительные способы визуализации и представления  данных. Изложение рассчитано как на новичков по обработке данных, так и на профессионалов. Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для специалистов по обработке данных

Начните работу с чтения, очистки и анализа данных

Мир вокруг нас полон данных, которые содержат уникальные и ценные сведения, но полезную информацию из этих «сырых» данных нужно уметь извлечь!

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

В этой книге ярко проявляется опыт Сьюзан Макгрегор в преподавании журналистики данных (data journalism) студентам всех уровней. Она приводит примеры из реальной жизни и объясняет, как подходить к поиску, проверке и анализу данных доступным способом.
 Джоанна С. Као , технический руководитель журналистики данных в газете Файнэншл Таймс

  • Применяйте Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также для обработки данных в больших масштабах.
  • Организуйте, документируйте и структурируйте свой код, используя лучшие практики
  • Собирайте данные из файлов, веб-страниц и API
  • Проводите базовый статистический анализ, чтобы осмыслить наборы данных
  • Визуализируйте и представляйте данные наглядным и убедительным образом

Книгу “Обработка данных на Python. Data Wrangling и Data Quality” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 11

Для кого предназначена эта книга?. 12

Поедете сами или возьмете такси?. 12

Кому не следует читать эту книгу?. 13

Что ожидать от этой книги. 13

Типографские соглашения. 14

Использование примеров кода. 15

Цветные иллюстрации. 16

Возможности онлайнового обучения от компании O’Reilly. 16

Как связаться с нами. 16

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

ГЛАВА 1. Введение в первичную обработку (выпас) и качество данных. 19

Что такое выпас данных?. 20

Что такое качество данных?. 22

Целостность данных. 23

Соответствие данных. 23

Почему мы выбрали Python?. 25

Универсальность. 25

Доступность. 25

Удобочитаемость. 26

Сообщество. 26

Альтернативы языку Python. 27

Написание и исполнение программ на языке Python. 27

Работа с кодом Python на локальном устройстве. 30

Введение в работу с командной строкой. 30

Установка языка Python, среды Jupyter Notebook и редактора кода. 33

Работа с кодом Python в режиме онлайн. 39

Hello World! 39

Создание файла автономного сценария Python при помощи Atom.. 39

Создание блокнота кода Python в Jupyter Notebook. 41

Создание блокнота кода Python в Google Colab. 42

Создаем программу. 43

В файле автономного сценария. 43

В блокноте. 43

Исполняем программу. 43

В файле автономного сценария. 43

В блокноте. 44

Документирование, сохранение и управление версиями своего кода. 44

Документирование. 44

Сохранение. 46

Управление версиями. 46

Заключение. 56

ГЛАВА 2. Введение в Python. 57

“Части речи” языков программирования. 58

Существительные ≈ переменные. 59

Важно ли конкретное имя?. 61

Наилучшие практики для именования переменных. 62

Глаголы ≈ функциям. 62

Применение пользовательских функций. 67

Библиотеки: занимаем пользовательские функции у других программистов. 68

Структуры управления: циклы и условные операторы. 69

Циклы. 69

Условные операторы. 72

Понимание ошибок. 77

Синтаксические ошибки. 78

Ошибки времени исполнения. 79

Логические ошибки. 83

Отправляемся в путь с данными Citi Bike. 85

Начинаем с создания псевдокода. 86

Масштабирование. 92

Заключение. 93

ГЛАВА 3. Понимание качества данных. 95

Оценка соответствия данных. 97

Достоверность данных. 98

Надежность данных. 100

Репрезентативность данных. 101

Оценка целостности данных. 104

Необходимые, но недостаточные. 106

Важные. 108

Достижимость. 111

Улучшение качества данных. 114

Очистка данных. 115

Аугментация данных. 115

Заключение. 116

ГЛАВА 4. Работа с файловыми и канальными данными
на языке Python. 117

Структурированные и неструктурированные данные. 119

Работа со структурированными данными. 123

Файловые табличные форматы данных. 124

Выпас табличных данных посредством языка Python. 126

Выпас реальных данных: понимание безработицы. 133

XLSX, ODS и все остальные. 136

Данные фиксированной ширины. 143

Канальные данные — интерактивные обновления через Интернет. 147

Выпас канальных данных средствами языка Python. 150

Формат JSON: данные следующего поколения. 160

Работа с неструктурированными данными. 165

Текст на основе изображений: доступ к данным в формате PDF. 165

Выпас PDF-данных, используя Python. 166

Обращение к таблицам PDF посредством Tabula. 171

Заключение. 171

ГЛАВА 5. Доступ к интернет-данным.. 173

Доступ к веб-данным XML и JSON.. 175

Знакомство с API-интерфейсами. 178

Базовые API-интерфейсы на примере поисковой системы. 179

Специализированные API-интерфейсы: добавление простой
аутентификации. 181

Получение ключа для API-интерфейса FRED.. 181

Использование ключа API для запроса данных. 182

Чтение документации по API-интерфейсу. 183

Защита своего ключа API при использовании сценариев Python. 186

Создание файла учетных данных. 188

Использование учетных данных в отдельном сценарии. 189

Основы работы с файлом .gitignore. 190

Специализированные API-интерфейсы: работа с протоколом OAuth. 193

Получение учетной записи разработчика Twitter 194

Создание приложения и учетных данных Twitter 196

Кодирование ключа API и ключа секрета API 201

Запрос токена доступа и данных из API-интерфейса Twitter 202

Этические нормы при работе с API-интерфейсами. 206

Извлечение веб-данных: источник данных последней надежды. 207

Осторожно извлекаем данные с веб-сайта УГПТ. 210

Использование средств инспектирования браузера. 211

Решение Python для извлечения данных из веб-страницы:
библиотека Beautiful Soup. 214

Заключение. 218

ГЛАВА 6. Оценка качества данных. 219

Пандемия и программа PPP. 221

Оценка целостности данных. 222

Имеют ли данные известное происхождение?. 223

Актуальны ли данные?. 223

Полные ли данные?. 224

Хорошо ли данные аннотированы?. 236

Являются ли данные крупномасштабными?. 242

Непротиворечивы ли данные?. 244

Многомерны ли наши данные?. 248

Атомарны ли данные?. 250

Понятны ли данные?. 250

Размерностно структурированы ли данные?. 252

Оценка соответствия данных. 253

Достоверность данных. 253

Надежность данных. 257

Репрезентативность данных. 258

Заключение. 259

ГЛАВА 7. Очистка, преобразование и дополнение данных. 261

Выбор подмножества данных системы Citi Bike. 262

Простое разбиение. 263

Регулярные выражения: супермощное средство сопоставления строк. 265

Создание дат. 270

Удаление хлама из файлов данных. 272

Декодирование дат Excel 276

Создание настоящих данных CSV из данных фиксированной ширины. 279

Исправление разнообразности написаний. 282

Тернистый путь к “простым” решениям. 288

Опасные подводные камни. 290

Дополнение данных. 292

Заключение. 294

ГЛАВА 8. Структурирование и рефакторинг кода. 296

Обзор пользовательских функций. 296

Многократное использование кода. 297

Аккуратное и понятное документирование. 297

Недостаточная функциональность по умолчанию.. 298

Область видимости. 298

Определение параметров функции. 301

Доступные опции. 302

Предоставление аргументов. 303

Возвращаемые значения. 303

Работа со стеком. 305

Рефакторинг для получения удовольствия и прибыли. 306

Функция для определения рабочих дней. 306

Опрятные метаданные. 309

Использование pydoc для документирования сценариев и пользовательских функций. 317

О полезности аргументов командной строки. 321

Отличия во взаимодействии со сценариями в автономных файлах и блокнотах. 325

Заключение. 325

ГЛАВА 9. Введение в анализ данных. 327

Вся суть — в контексте. 328

Одинаковые, но не совсем. 329

Что типично? Оценка центральной тенденции. 329

Что это значит?. 330

Поразмыслим нестандартно: выявляем выбросы. 332

Визуализация для анализа данных. 332

Какова форма наших данных? Учимся понимать гистограммы. 336

Вопрос за $2 миллиона. 346

Пропорциональный ответ. 359

Заключение. 362

ГЛАВА 10. Представление данных. 364

Основы визуального красноречия. 365

Сформулируйте свои данные. 367

Диаграммы, графики и картограммы — вот это да! 368

Круговые диаграммы. 369

Линейчатые и столбчатые диаграммы. 372

Линейные диаграммы. 377

Диаграмма рассеяния. 380

Картограммы. 383

Элементы красноречивых визуальных эффектов. 386

“Мелкие” детали действительно имеют значение. 386

Доверяйте своим глазам (и экспертам) 387

Выбор масштаба. 388

Выбор цветовой гаммы. 389

Прежде всего делайте аннотации! 389

От базового к красивому: настройка визуализации с помощью seaborn и matplotlib. 390

Выйдите за рамки основ. 395

Заключение. 396

ГЛАВА 11. За пределами Python. 397

Дополнительные инструменты для анализа данных. 398

Программы для работы с электронными таблицами. 398

OpenRefine. 399

Дополнительные инструменты для обмена и представления данных. 402

Редактирование изображений в форматах JPG, PNG и GIF. 402

Программное обеспечение для редактирования SVG и других векторных форматов. 402

Размышления об этике. 404

Заключение. 405

Приложение А. Другие ресурсы по программированию на Python. 406

Официальная документация Python. 406

Установка ресурсов Python. 407

Где искать библиотеки. 407

Следите за остротой своих инструментов. 408

Где получить больше информации. 409

Приложение Б. Еще несколько слов о Git 410

Вы запускаете команду git push/pull и оказываетесь в странном текстовом редакторе. 410

Ваша команда git push/pull отклоняется. 412

Выполните команду git pull 412

Краткое руководство по Git 414

приложение В. Поиск данных. 416

Репозитории данных и API 416

Эксперты по предметным вопросам. 417

Запросы FOIA/L. 418

Кастомные методы сбора данных. 419

приложение Г. Ресурсы для визуализации и информационного дизайна. 421

Основополагающие книги по визуализации информации. 421

Краткое руководство, за которым вы потянетесь. 422

Источники вдохновения. 422

Об авторе. 423

Колофон. 424

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

Susan McGregor

Сьюзен Макгрегор (Susan McGregor) — исследователь Института науки о данных Колумбийского университета. На протяжении более десяти лет она применяет свой успешный подход к преподаванию программирования и анализа данных для студентов нетехнических специальностей.

Опубликовано

Встречайте: Сетевое программирование на Python

Сетевое программирование на Python

Книга посвящена разработке серверных приложений и клиент-серверных архитектур на Python. Рассказано о поддержке SSL в Python 3, представлены примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC, взаимодействия с сервисами DNS. Освещена работа с электронной почтой в приложениях. Описаны цели протокола TLS и методы их достижения на Python. Подробно описаны возможности модуля asyncio, входящего в состав Python 3.4, даны рекомендации по разработке сетевых приложений с использованием веб-фреймворков Flask и Django.

Для программистов

ПОДРОБНОЕ РУКОВОДСТВО ПО СЕТЕВОМУ ПРОГРАММИРОВАНИЮ НА PYTHON

Книга рассказывает о разработке на языке Python клиент-серверных проектов, взаимодействующих с сетью и веб-приложениями. Всесторонне рассматривается поддержка SSL, показаны примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC и взаимодействия с сервисами DNS. Рассказано об использовании входящего в состав Python 3.4 модуля asyncio, о сетевых возможностях веб-фреймворков Flask и Django.

В книге описаны
ключевые возможности SSL в Python 3,
цели протокола TLS и методы их достижения на Python,
архитектура серверов и создание серверных приложений,
работа с электронной почтой в приложениях,
применение Flask и Django для создания сетевых веб-приложений.

Книгу “Сетевое программирование на Python” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 14

О рецензенте. 15

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

Предисловие. 17

Пакет кода. 19

ГЛАВА 1. Введение в сетевое взаимодействие между клиентом и сервером.. 21

Содержание главы. 21

Цель  22

Основы: стеки и библиотеки. 22

Уровни приложения. 25

Что такое протокол. 26

Сетевое взаимодействие. 28

Слой за слоем. 30

Кодирование и декодирование. 32

Протокол IP. 33

IP-адреса. 34

Маршрутизация. 35

Фрагментация пакетов. 37

Подробно об IP. 38

Резюме. 38

ГЛАВА 2. Протокол UDP. 41

Содержание главы. 42

Цель  42

Множество сервисов в одной системе. 42

Сокет — точка соединения. 44

Клиенты, принимающие любые пакеты. 48

Отсрочка, блокировка и время ожидания. 50

UDP-сокеты. 54

Идентификаторы запросов. 56

От привязки до интерфейсов. 57

Фрагментация UDP. 59

Параметры сокетов. 61

Широковещание. 62

Сценарии применения UDP. 64

Резюме. 64

ГЛАВА 3. Протокол TCP. 67

Содержание главы. 67

Цель  68

Как работает TCP. 68

Когда использовать TCP. 69

Сокеты TCP. 70

TCP-клиент и TCP-сервер. 71

Одно взаимодействие — один сокет. 75

Адрес. 77

От привязки до интерфейсов. 78

Взаимоблокировка. 79

Полуоткрытые соединения, закрытые соединения. 84

Потоки TCP для передачи файлов. 86

Резюме. 86

ГЛАВА 4. DNS и имена сокетов. 89

Содержание главы. 89

Цель  89

Имена сокетов и хостов. 90

Пять координат сокетов. 91

IPv6  92

Современное разрешение адресов. 93

Привязка сервера к порту с помощью getaddrinfo() 94

Метод getaddrinfo() для привязки к сервису. 95

Получение канонического имени хоста с помощью getaddrinfo() 96

Другие флаги getaddrinfo() 98

Примитивные процедуры службы имен. 99

Метод getsockaddr() 100

Протокол DNS. 101

Почему не стоит использовать DNS напрямую.. 104

Python для DNS-запросов. 105

Разрешение почтовых доменов. 106

Резюме. 109

ГЛАВА 5. Данные и ошибки в Интернете. 111

Содержание главы. 111

Цель  111

Строки и байты. 111

Строки символов. 113

Сетевой порядок байтов и двоичные числа. 116

Кадрирование. 119

Pickle и форматы с разделителями. 125

JSON и XML. 126

Сжатие. 127

Исключения в сети. 128

Специфические исключения. 130

Исключения в сети: обнаружение и сообщение об ошибках. 131

Резюме. 133

ГЛАВА 6. Протокол SSL/TLS. 135

Содержание главы. 135

Цель  136

От чего не защищает TLS. 136

Что худшее может случиться?. 137

Создание сертификатов. 139

TLS Offloading. 141

Контексты по умолчанию в Python 3.4. 142

Подходы к обертке сокетов. 146

Выбор шифров вручную и Perfect Forward Security. 147

Поддержка протокола TLS. 149

Дальнейшее изучение. 151

Резюме. 157

ГЛАВА 7. Архитектура сервера. 159

Содержание главы. 159

Цель  160

Несколько слов о развертывании. 160

Базовый протокол. 162

Однопоточный сервер. 166

Многопроцессорный и многопоточный серверы. 169

Фреймворк SocketServer из прошлого. 171

Асинхронные серверы. 172

Фреймворк asyncio с обратными вызовами. 177

Фреймворк asyncio с сопрограммами. 179

Устаревший модуль asyncore. 181

Комбинированный подход. 182

Под влиянием inetd. 183

Резюме. 185

ГЛАВА 8. Очереди сообщений и кеши. 187

Содержание главы. 187

Цель  188

Использование Memcached (кеширование в памяти) 188

Хеширование и сегментирование. 191

Очереди сообщений. 194

Очереди сообщений в Python. 196

Резюме. 201

ГЛАВА 9. HTTP-клиенты.. 203

Содержание главы. 203

Цель  204

Библиотеки клиентов Python. 204

Кадрирование, шифрование и порты. 206

Методы. 208

Хосты и пути. 209

Коды состояний. 210

Валидация и кеширование. 213

Кодирование содержимого. 216

Согласование содержимого. 216

Тип содержимого. 218

Аутентификация по HTTP. 219

Файлы cookie. 221

Поддержание соединения и httplib. 222

Резюме. 223

ГЛАВА 10. Серверы для работы с HTTP. 225

Содержание главы. 225

Цель  226

Стандарт WSGI 226

Серверные фреймворки для асинхронной обработки. 228

Прямые и обратные прокси. 229

Четыре архитектурных стиля. 230

Python на Apache. 232

HTTP-серверы на Python. 232

Преимущество обратных прокси. 233

Платформа как услуга. 234

REST и паттерны GET и POST. 236

WSGI без фреймворка. 238

Резюме. 242

ГЛАВА 11. Всемирная паутина. 245

Содержание главы. 245

Цель  246

URL и гипермедиа. 246

Создание и парсинг URL. 247

Относительные URL. 250

Язык гипертекстовой разметки HTML. 251

Чтение и запись с использованием базы данных. 253

Ужасное веб-приложение на Flask. 255

Методы и формы HTTP. 261

Когда формы используют неподходящие методы. 263

Опасные и безопасные сookie. 264

Непостоянный межсайтовый скриптинг. 266

Постоянный межсайтовый скриптинг. 268

Подделка межсайтовых запросов. 269

Улучшенная программа. 270

Приложение для оплаты на Django. 273

Выбор фреймворка для веб-сайта. 277

Веб-сокеты. 279

Веб-скрейпинг. 279

Получение страниц. 281

Страницы для веб-скрейпинга. 285

Рекурсивный веб-скрейпинг. 287

Резюме. 291

ГЛАВА 12. Составление и парсинг сообщений электронной почты.. 293

Содержание главы. 293

Цель  294

Форматирование электронного письма. 294

Составление электронного письма. 296

HTML и мультимедиа. 298

Создание контента. 303

Парсинг электронного письма. 305

Использование MIME. 307

Кодирование заголовков. 309

Парсинг дат. 311

Резюме. 312

ГЛАВА 13. Протокол SMTP. 313

Содержание главы. 313

Цель  314

Веб-сервисы электронной почты и почтовые клиенты. 314

Все началось с командной строки. 314

Развитие клиентов. 315

Переход на веб-сервисы электронной почты. 317

Функции SMTP. 318

Передача электронной почты. 319

Получатель на конверте и заголовки. 320

Несколько прыжков. 320

Библиотека для работы с протоколом SMTP. 322

Обработка ошибок и отладка. 323

EHLO для сбора информации. 326

SSL и TLS. 329

Аутентификация SMTP. 332

Советы по SMTP. 333

Резюме. 334

ГЛАВА 14. Протокол POP. 335

Содержание главы. 335

Цель  336

Серверы POP и стандарты. 336

Аутентификация и подключение. 336

Получение информации о почтовом ящике. 339

Загрузка и удаление писем. 340

Резюме. 343

ГЛАВА 15. Протокол IMAP. 345

Содержание главы. 346

Цель  347

Реализация IMAP в Python. 347

Клиент IMAP. 349

Просмотр папок. 351

UID и номера писем. 351

Интервалы между письмами. 352

Общая информация. 352

Получение всего почтового ящика. 354

Загрузка отдельных писем. 356

Добавление и удаление флагов. 363

Удаление писем. 364

Поиск. 364

Работа с папками. 366

Асинхронность. 367

Резюме. 367

ГЛАВА 16. Протоколы SSH и Telnet 369

Содержание главы. 369

Цель  370

Автоматизация с помощью командной строки. 370

Раскрытие выражения и экранирование в командной строке. 371

Аргументы в командах UNIX.. 372

Экранирование символов. 374

Ужасная командная строка Windows 376

Терминал. 377

Терминалы и буферизация. 380

Telnet 381

SSH: безопасная оболочка. 386

SSH: краткий обзор. 386

Ключи хоста для SSH.. 387

Аутентификация в SSH.. 390

Отдельные команды и сеансы. 391

Протокол SFTP. 396

Дополнительные возможности. 399

Резюме. 399

ГЛАВА 17. Протокол FTP. 401

Содержание главы. 402

Цель  402

Что делать, если невозможно использовать FTP. 402

Каналы коммуникации. 403

FTP в Python. 404

Двоичные файлы и файлы ASCII 405

Расширенная загрузка двоичных файлов с сервера. 407

Отправка данных на удаленный компьютер. 409

Расширенная отправка двоичных данных. 410

Обработка ошибок. 411

Поиск по каталогам. 412

Обнаружение каталогов и загрузка в рекурсивном режиме. 414

Создание и удаление каталогов. 416

Безопасное использование FTP. 416

Резюме. 416

ГЛАВА 18. RPC — удаленный вызов процедур. 419

Содержание главы. 420

Цель  421

Характеристики RPC. 421

XML-RPC. 422

JSON-RPC. 429

Самодокументируемые данные. 432

Объекты: Pyro и RPyC. 434

Пример RPyC. 435

Очереди сообщений, RPC и веб-фреймворки. 438

Восстановление после ошибок в сети. 438

Резюме. 439

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