- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему Python?
- •План книги
- •Версия Python, платформа и IDE
- •Установка Python
- •Запуск Python
- •Использование виртуальной среды
- •Вперед!
- •Глава 1. Спасение моряков с помощью теоремы Байеса
- •Теорема Байеса
- •Проект #1. Поиск и спасение
- •Стратегия
- •Установка библиотек Python
- •Код для теоремы Байеса
- •Время сыграть
- •Итоги
- •Дополнительная литература
- •Усложняем проект. Более грамотный поиск
- •Усложняем проект. Поиск лучшей стратегии с помощью MCS
- •Усложняем проект. Вычисление вероятности обнаружения
- •Глава 2. Установление авторства с помощью стилометрии
- •Проект #2: «Собака Баскервилей», «Война миров» и «Затерянный мир»
- •Стратегия
- •Установка NLTK
- •Корпусы текстов
- •Код стилометрии
- •Итоги
- •Дополнительная литература
- •Практический проект: охота на собаку Баскервилей с помощью распределения
- •Практический проект: тепловая карта пунктуации
- •Усложняем проект: фиксирование частотности
- •Глава 3. Суммаризация текста с помощью обработки естественного языка
- •Стратегия
- •Веб-скрапинг
- •Код для «У меня есть мечта»
- •Установка gensim
- •Код для суммаризации речи «Заправляйте свою кровать»
- •Проект #5. Суммаризация речи с помощью облака слов
- •Модули Word Cloud и PIL
- •Код для создания облака слов
- •Итоги
- •Дополнительная литература
- •Усложняем проект: ночные игры
- •Усложняем проект: суммаризация суммаризаций
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Одноразовый блокнот
- •Шифр «Ребекка»
- •Проект #6. Цифровой ключ к «Ребекке»
- •Стратегия
- •Код для шифрования
- •Отправка сообщений
- •Итоги
- •Дополнительная литература
- •Глава 5. Поиск Плутона
- •Проект #7. Воссоздание блинк-компаратора
- •Стратегия
- •Данные
- •Код блинк-компаратора
- •Использование блинк-компаратора
- •Проект #8. Обнаружение астрономических транзиентов путем дифференцирования изображений
- •Стратегия
- •Код для детектора транзиентов
- •Использование детектора транзиентов
- •Итоги
- •Дополнительная литература
- •Практический проект: представление орбитальной траектории
- •Практический проект: найди отличия
- •Усложняем проект: сосчитаем звезды
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Цель миссии «Аполлон-8»
- •Траектория свободного возврата
- •Задача трех тел
- •Проект #9. На Луну с «Аполлоном-8»!
- •Использование модуля turtle
- •Стратегия
- •Код программы для расчета свободного возврата «Аполлона-8»
- •Выполнение симуляции
- •Итоги
- •Дополнительная литература
- •Практический проект: симуляция шаблона поисков
- •Практический проект: запусти меня!
- •Практический проект: останови меня!
- •Усложняем проект: симуляция в истинном масштабе
- •Усложняем проект: реальный «Аполлон-8»
- •Глава 7. Выбор мест высадки на Марсе
- •Посадка на Марс
- •Карта MOLA
- •Проект #10. Выбор посадочных мест на Марсе
- •Стратегия
- •Код для выбора мест посадки
- •Результаты
- •Итоги
- •Дополнительная литература
- •Практический проект: убедимся, что рисунки становятся частью изображения
- •Практический проект: визуализация профиля высот
- •Практический проект: отображение в 3D
- •Практический проект: совмещение карт
- •Усложняем проект: три в одном
- •Усложняем проект: перенос прямоугольников
- •Глава 8. Обнаружение далеких экзопланет
- •Транзитная фотометрия
- •Проект #11. Симуляция транзита экзопланеты
- •Стратегия
- •Код для транзита
- •Эксперименты с транзитной фотометрией
- •Проект #12. Получение изображений экзопланет
- •Стратегия
- •Код для пикселизатора
- •Итоги
- •Дополнительная литература
- •Практический проект: обнаружение инопланетных мегаструктур
- •Практический проект: обнаружение транзита астероидов
- •Практический проект: добавление эффекта потемнения к краю
- •Практический проект: обнаружение пятен на звездах
- •Практический проект: обнаружение инопланетной армады
- •Практический проект: обнаружение планеты с луной
- •Практический проект: измерение продолжительности экзопланетного дня
- •Усложняем проект: генерация динамической кривой блеска
- •Глава 9. Как различить своих и чужих
- •Обнаружение лиц на фотографиях
- •Проект #13. Программирование робота-часового
- •Стратегия
- •Результаты
- •Обнаружение лиц в видеопотоке
- •Итоги
- •Дополнительная литература
- •Практический проект: размытие лиц
- •Усложняем проект: обнаружение кошачьих мордочек
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Распознавание лиц с помощью LBPH
- •Схема распознавания лиц
- •Извлечение гистограмм локальных бинарных шаблонов
- •Проект #14. Ограничение доступа к инопланетному артефакту
- •Стратегия
- •Поддержка модулей и файлов
- •Код для захвата видео
- •Код для обучения алгоритма распознавания лиц
- •Код для прогнозирования лиц
- •Результаты
- •Итоги
- •Дополнительная литература
- •Усложняем проект: добавление пароля и видеозахвата
- •Усложняем проект: похожие лица и близнецы
- •Усложняем проект: машина времени
- •Глава 11. Создание интерактивной карты побега от зомби
- •Проект #15. Визуализация плотности населения с помощью хороплетной карты
- •Стратегия
- •Библиотека анализа данных
- •Библиотеки bokeh и holoviews
- •Установка pandas, bokeh и holoviews
- •Работа с данными по уровню безработицы и плотности населения в округах и штатах
- •Разбираем код holoviews
- •Код для отрисовки хороплетной карты
- •Планирование маршрута
- •Итоги
- •Дополнительная литература
- •Усложняем проект: отображение на карте изменения численности населения США
- •Глава 12. Находимся ли мы в компьютерной симуляции?
- •Проект #16. Жизнь, Вселенная и пруд черепахи Йертл
- •Код симуляции пруда
- •Следствия симуляции пруда
- •Измерение затрат на пересечение строк или столбцов сетки
- •Результаты
- •Стратегия
- •Итоги
- •Дополнительная литература
- •Дополнение
- •Усложняем проект: поиск безопасного места в космосе
- •Усложняем проект: а вот и Солнце
- •Усложняем проект: взгляд глазами собаки
- •Усложняем проект: кастомизированный поиск слов
- •Усложняем проект: что за сложную паутину мы плетем
- •Усложняем проект: идем вещать с горы
- •Решения для практических проектов
- •Глава 2. Определение авторства с помощью стилометрии
- •Охота на собаку Баскервилей с помощью распределения
- •Тепловая карта пунктуации
- •Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра
- •Составление графика символов
- •Отправка секретов шифром времен Второй мировой войны
- •Глава 5. Поиск Плутона
- •Представление орбитальной траектории
- •Глава 6. Победа в лунной гонке с помощью «Аполлона-8»
- •Симуляция шаблона поисков
- •Заведи меня!
- •Останови меня!
- •Глава 7. Выбор мест высадки на Марсе
- •Убеждаемся, что рисунки становятся частью изображения
- •Визуализация профиля высоты
- •Отображение в 3D
- •Совмещение карт
- •Глава 8. Обнаружение далеких экзопланет
- •Обнаружение инопланетных мегаструктур
- •Обнаружение транзита астероидов
- •Добавление эффекта потемнения к краю
- •Обнаружение инопланетной армады
- •Обнаружение планеты с луной
- •Измерение продолжительности экзопланетного дня
- •Глава 9. Как различить своих и чужих
- •Размытие лиц
- •Глава 10. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
18 Введение
просто для развлечения. По мере выполнения проектов вы будете накапливать знания о библиотеках Python и модулях, а также узнаете новые полезные приемы, функции и техники. Мы не будем зацикливаться на отдельных фрагментах кода; вместо этого вы научитесь создавать полноценные программы для решения реальных задач, используя реальные данные.
Почему Python?
Python — это высокоуровневый интерпретируемый язык общего назначения. Он свободно распространяемый, интерактивный и совместимый со всеми ведущими платформами, а также микроконтроллерами, например с Raspberry Pi. Python поддерживает и функциональное, и объектно-ориентированное программирование, а также способен взаимодействовать с кодом, написанным на других языках, например на C++.
Поскольку Python вполне доступен для начинающих и полезен для экспертов, он широко применяется в школах, университетах, крупных корпорациях, финансовых учреждениях и практически во всех областях науки. Сегодня этот язык наиболее популярен для машинного обучения, в областях, связанных с наукой о данных и искусственным интеллектом.
План книги
Итак, краткий обзор глав этой книги. Вам не обязательно изучать их все последовательно, но я буду объяснять новые модули и техники более подробно при их первом упоминании.
Глава 1. Спасение моряков с помощью теоремы Байеса. Используем теорему Байеса, чтобы эффективно направить береговую охрану для поиска и спасения моряков у мыса Python. Набираемся опыта в применении OpenCV, NumPy и модуля itertools.
Глава 2. Установление авторства с помощью стилометрии. Используем обработку естественного языка для определения автора романа «Затерянный мир» — был ли это сэр Артур Конан Дойл или же Герберт Джордж Уэллс? Практикуемся в работе с NLTK, matplotlib и такими стилометрическими техниками, как стоп-слова, части речи, лексическое богатство и коэффициент Жаккара.
Глава 3. Суммаризация текста с помощью обработки естественного языка. Делаем скрапинг известных речей из интернета и автоматическое обобщение их важных моментов. Преобразуем текст романа в аннотацию для рекламы или промоматериала. Расширяем навыки
План книги 19
работы с BeautifulSoup, Requests, regex, NLTK, Collections, wordcloud и matplotlib.
Глава 4. Отправка суперсекретных сообщений с помощью книжного шифра. Делимся невзламываемыми шифрами с друзьями путем цифрового воссоздания метода «одноразового блокнота», использованного в шпионском романе Кена Фоллетта «Ключ к Ребекке». Учимся работать с модулем Collections.
Глава 5. Поиск Плутона. Воссоздаем блинк-компаратор, с помощью которого Клайд Томбо открыл Плутон в 1930 году. Затем используем современное компьютерное зрение для автоматического поиска и отслеживания слаборазличимых транзиентов, таких как кометы и астероиды, перемещающихся относительно звездного поля. Получаем опыт работы с OpenCV и NumPy.
Глава 6. Победа в лунной гонке с помощью «Аполлона-8». Принимаем участие в приключении и помогаем США победить в лунной гонке, первыми достигнув Луны на корабле «Аполлон-8». Составляем и реализуем грамотный план обратного полета, который в ретроспективе убедил NASA отправиться в полет на год раньше и по факту нанес удар по советской космической программе. Набираемся опыта в использовании модуля turtle.
Глава 7. Выбор мест высадки на Марсе. Оцениваем потенциальные места посадки для марсохода на основе реальных задач миссии. Отображаем предполагаемые точки на карте Марса вместе с их сводной статистикой. Совершенствуем навыки работы с OpenCV, Python Imaging Library, NumPy
и tkinter.
Глава 8. Обнаружение далеких экзопланет. Моделируем проход экзопланеты на фоне ее солнца, отображаем график итоговых изменений относительной яркости и оцениваем диаметр этой планеты. В завершение симулируем прямое наблюдение экзопланеты с помощью нового телескопа Джеймса Уэбба, включая оценку длительности ее дня. Используем OpenCV, NumPy и matplotlib.
Глава 9. Как различить своих и чужих. Программируем роботизированную пушку-стража на визуальное распознавание космических пехотинцев и злых мутантов. Применяем OpenCV, NumPy, playsound, pyttsx и datetime.
Глава 10. Ограничение доступа по принципу распознавания лиц. Реализуем ограничение доступа в секретную лабораторию через распознавание лиц. Используем OpenCV, NumPy, playsound, pyttsx и datetime.
Глава 11. Создание интерактивной карты побега от зомби. Создаем карту плотности популяции, которая поможет выжившим в ТВ-шоу «Ходячие
20 Введение
мертвецы» выбраться из Атланты на безопасную территорию Запада США. Совершенствуемся в работе с pandas, bokeh, holoviews и webbrowser.
Глава 12. Находимся ли мы в компьютерной симуляции? Определяем способ для симулированных существ — возможно, это мы сами — отыскать свидетельства того, что они живут в компьютерной симуляции. Используем для этого turtle, statistics и perf_counter.
Каждая глава завершается как минимум одним практическим или усложненным проектом. Их решения вы найдете в приложении или онлайн. Учтите, что эти решения не единственные и не обязательно лучшие. Так что, возможно, вам удастся придумать что-то более эффективное.
Что же касается усложненных проектов, то здесь все зависит только от вас. В них я реализую принцип «плыви или тони», который здорово помогает в обучении. Надеюсь, моя книга сможет мотивировать вас на создание собственных проектов, а такие задачи играют роль триггеров, которые взбудоражат ваше воображение.
Можете скачать весь код книги, включая решения к практическим проектам, с сайта https://nostarch.com/real-world-python/. Там же я публикую список опечаток и всевозможные будущие обновления.
Невозможно написать подобную книгу без недочетов. Если вы обнаружите, что в книге что-то не так, пожалуйста, отправьте описание проблемы издателю по адресу errata@nostarch.com. Мы будем вносить все необходимые правки в список опечаток и включим исправление в переиздания, а вы получите вечное признание и славу.
Версия Python, платформа и IDE
Все проекты этой книги я создавал на Python v3.7.2 в Microsoft Windows 10. Если вы используете другую операционную систему, то это не проблема: там, где необходимо, я предлагаю совместимые модули для других платформ.
Примеры кода в книге взяты либо из текстового редактора Python IDLE, либо из интерактивнойоболочки.IDLE(IntegratedDevelopmentandLearningEnvironment) означает «интегрированная среда разработки и обучения». Это та же интегрированная среда разработки (IDE), но с добавленной L, которая делает акроним созвучным фамилии актера Eric Idle, участника творческой группы Monty Python. Интерактивная оболочка, также называемая интерпретатором, — окно, позволяющее вам мгновенно выполнять команды и тестировать код, не создавая файл.
У IDLE множество недостатков, например отсутствует нумерация строк, но при этом она бесплатна и связана с Python, что дает каждому доступ к ней. Вы можете без проблем использовать любую IDE по своему желанию. Среди наиболее
План книги 21
популярных могу назвать Visual Studio Code, Atom, Geany (произносится «джини»), PyCharm и Sublime Text. Они работают в разных операционных системах, включая Linux, macOS и Windows. Еще одна IDE, PyScripter, работает только в Windows. Подробный список доступных редакторов Python и совместимых платформ вы найдете на https://wiki.python.org/moin/PythonEditors/.
Установка Python
Вы можете установить Python на свою машину через дистрибутив. Если же вы решите это сделать напрямую, то инструкции для вашей операционной системы вы найдете на https://www.python.org/downloads/. На машинах с Linux и macOS Python уже обычно предустановлен. С каждой новой версией языка некоторые возможности в него добавляются, а другие исключаются, поэтому я рекомендую обновить вашу версию, если она ниже v3.6.
Щелчок на кнопке скачивания на сайте Python (рис. 1) по умолчанию устанавливает 32-битный Python.
Рис. 1. Страница скачивания Python.org с удобной кнопкой для платформы Windows
Если же вам нужна 64-битная версия, то промотайте страницу вниз до списка конкретных версий (рис. 2) и щелкните на ссылке с тем же номером версии.
Откроется окно, показанное на рис. 3. Здесь щелкните по 64-битному исполняемому файлу, который запустит мастер установки. Следуйте инструкциям и соглашайтесь с настройками по умолчанию.
Для реализации некоторых проектов в этой книге требуются нестандартные библиотеки, которые придется устанавливать отдельно. Это несложно, но можно все упростить, установив дистрибутив Python, который эффективно загружает