- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему 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. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
Дополнительная литература 349
наш уровень знаний. И, как заметил в 2019 году философ Престон Грин (Preston Greene), для реализации подобного проекта может существовать моральное препятствие. Имеется в виду, если мы живем в компьютерной симуляции, то обнаружение нами сего факта может привести к ее завершению.
Итоги
Написать код для симуляции мира черепахи Йертл было просто. Но программы в большей степени используются для решения задач, и даже небольшой объем проделанной нами работы дает необходимый опыт. Нет, мы не совершили прорыв в области изучения космических лучей, но начали разговор в правильном русле. Сама идея о том, что компьютерной симуляции требуется сетка, которая могла бы отражать наблюдаемые сигнатуры Вселенной, далеко не мелочь.
В книге «Гарри Поттер и Дары Смерти» Гарри спрашивает волшебника Дамбл дора: «Ответьте мне на один последний вопрос. Все это реально? Или просто происходит у меня в голове?» На что тот отвечает: «Конечно же, это происходит в твоей голове, Гарри, но почему сей факт должен означать, что это нереально?»
Даже если наш мир и не находится на «фундаментальном уровне реальности», как заявляет Ник Бостром, то это никак не мешает нам наслаждаться решением подобных задач. Декарт, будь он жив сегодня, мог бы выразиться так: «Я пишу код, следовательно, я существую». Вперед!
Дополнительная литература
В статье «Are We Living in a Simulated Universe? Here’s What Scientists Say» (NBC News, 2019) автор Дэн Фальк (Dan Falk) дает обзор гипотез симулированной реальности.
«Neil deGrasse Tyson Says ‘It’s Very Likely’ the Universe Is a Simulation» (ExtremeTech, 2016) Грэхема Темплтона (Graham Templeton) содержит видео одной из ежегодных дискуссий памяти Айзека Азимова, которую проводит астрофизик Нил деГрассе Тайсон (Neil deGrasse Tyson), — ученые из разных областей дискутируют на тему, живем ли мы в симуляции.
«Are We Living in a Computer Simulation? Let’s Not Find Out» (New York Times, 2019) — статья Престона Грина (Preston Greene), представляющая философские доводы против изучения гипотезы симуляции.
«We Are Not Living in a Simulation. Probably» (Fast Company, 2018) Гленна Макдональда (Glenn McDonald) посвящена обсуждению того, что Вселенная слишком велика и детализирована для компьютерной симуляции.
350 Глава 12. Находимся ли мы в компьютерной симуляции?
Дополнение
В жизни никогда не хватает времени для всего, что мы хотим сделать, а в случае написания книги это актуально вдвойне. Приведенные далее усложненные проекты можно рассматривать как призраки еще не написанных глав. Для их завершения не хватило времени (а в некоторых случаях их не удалось даже начать), но для вас это может и не стать проблемой. Как обычно, решений для более сложных задач я не предлагаю — не факт, что они вам вообще понадобятся.
Это реальный мир, мой дорогой друг, и ты к нему готов.
Усложняем проект: поиск безопасного места в космосе
Всемирно известный роман «Мир-Кольцо» 1970 года познакомил читателей с кукловодами Пирсона, разумными инопланетными травоядными существами. Будучи стадными животными, кукловоды чрезвычайно трусливы и осторожны. Узнав о том, что ядро Млечного Пути взорвалось и радиация убьет их через 20 000 лет, они решили покинуть галактику.
В этом проекте вы станете членом дипломатической команды посла кукловодов в 29 веке. Ваша задача — выбрать один из сопредельных Соединенных штатов, который кукловоды сочтут достаточно безопасным для своего посольства. Вам потребуется оценить каждый штат на предмет наличия природных угроз, таких как землетрясения, торнадо, вулканы и ураганы, после чего представить послу обобщенную карту. Не беспокойтесь, что используемые вами данные будут устаревшими на несколько сотен лет. Просто представьте, что эти данные актуальны в 2850 году н. э.
Данные по землетрясениям можно найти на https://earthquake.usgs.gov/earthquakes/feed/v1.0/csv.php/. Обозначьте точками эпицентры толчков с магнитудой 6.0 балла и выше.
Данные о торнадо можете указать в виде среднего количества в год для каждого штата (информация — на https://www.ncei.noaa.gov/access/monitoring/monthly-report/ tornadoes/). Используйте хороплетную карту так же, как в главе 11.
Список опасных вулканов находится в таблице 2 обновлений от 2018 года, предоставленных Геологической службой США (https://pubs.usgs.gov/sir/2018/5140/ sir20185140.pdf). Нанесите их на карту в виде точек, но присвойте им цвет или форму, отличающие их от данных по землетрясениям. При этом не обращайте внимания на выбросы пепла из Йеллоустоуна. Предположите, что эксперты, занимающиеся наблюдением за этим супервулканом, могут спрогнозировать извержение с достаточным запасом времени, чтобы посол успел покинуть планету.
Усложняем проект: кастомизированный поиск слов 351
Для получения данных о траекториях движения ураганов обратитесь к сайту Национального управления океанических и атмосферных исследований (https:// coast.noaa.gov/digitalcoast/data/), где отыщите «Historical Hurricane Tracks». Скачайте и нанесите на карту штормовые участки категории 4 и выше.
Попытайтесь мыслить как кукловод и выберите на основе полученной карты подходящий для их посольства штат. Возможно, придется также проигнорировать торнадо. Америка — это очень опасное место!
Усложняем проект: а вот и Солнце
В2018 году 13-летняя Джорджия Хатчинсон из Вудсайда, штат Калифорния, выиграла $25 000 в международном конкурсе Broadcom Masters, который проводился среди учащихся средних школ в рамках программы STEM (science, technology, engineering, mathematics — наука, технология, инженерия и математика). Ее работа «Designing a Data-Driven Dual-Axis Solar Tracker» (Проектирование двухосевого солнечного трекера, управляемого данными) удешевит солнечные панели и сделает их более доступными, исключив необходимость использования дорогостоящих световых сенсоров.
Воснове работы такого солнечного трекера лежит идея о том, что нам уже известно расположение Солнца в любой момент времени относительно любой точки поверхности Земли. На основе открытых данных Национального управления океанических и атмосферных явлений трекер непрерывно определяет положение Солнца, а солнечные панели наклоняются оптимальным образом для максимальной эффективности сбора его энергии.
Напишите программу Python, вычисляющую положение Солнца на основе выбранной вами локации. Для начала ознакомьтесь со статьей «Position of the Sun» в Википедии на https://en.wikipedia.org/wiki/Position_of_the_Sun.
Усложняем проект: взгляд глазами собаки
Используйте свои знания в области компьютерного зрения, чтобы написать программу Python, получающую изображение и имитирующую то, как его должна видеть собака. Для начала ознакомьтесь с информацией на страницах https://www. akc.org/expert-advice/health/are-dogs-color-blind/ и https://dog-vision.andraspeter.com/.
Усложняем проект: кастомизированный
поиск слов
Представьте, что ваша бабушка увлекается головоломками «Найди слово». Используйте Python, чтобы к ее дню рождения спроектировать и вывести
352 Глава 12. Находимся ли мы в компьютерной симуляции?
специальные варианты этих головоломок, где будут фигурировать имена членов семьи, персонажи старых ТВ-шоу вроде «Мэтлока» и «Коломбо» или названия знакомых ей медицинских препаратов. Пусть слова выводятся по горизонтали, вертикали и диагонали.
Усложняем проект: оптимизация праздничного
показа слайдов
Ваша супруга, брат, отец, лучший друг или просто знакомый устраивает праздничный ужин, и вам поручено организовать показ слайдов. У вас есть куча фотографий в облаке, на многих из них присутствует виновник торжества, но имена файлов содержат лишь дату и время, когда была сделана фотография, не поясняя ее содержимое. Похоже, вам придется провести всю субботу за их сортировкой.
Но не стоит отчаиваться, ведь вы научились работать с распознаванием лиц. Все, что вам нужно, — это найти несколько обучающих изображений и написать небольшой фрагмент кода.
Сначала выберите из своей цифровой коллекции фото виновника торжества. Затем напишите на Python программу, которая будет выполнять поиск по каталогам, находить фотографии с этим человеком и копировать их в отдельную папку для просмотра. В процессе обучения не забудьте включить фото в фас и в профиль, а также добавить обученный для профилей каскад Хаара.
Усложняем проект: что за сложную паутину мы плетем
Используйте Python и модуль turtle для симуляции плетущего паутину паука. Вспомогательную информацию по ее построению можете найти на странице https://www.brisbaneinsects.com/brisbane_weavers/index.htm.
Усложняем проект: идем вещать с горы
«Какая ближайшая гора к Хьюстону, штат Техас?» На этот, казалось бы, простой вопрос не столь просто ответить. Во-первых, нужно взять в расчет горы в Мексике, а также в США. Во-вторых, единого утвержденного понятия горы не существует.
Чтобы эту задачу несколько упростить, используйте одно из определений горной местности, установленное Программой ООН по защите окружающей среды. Найдите участки с высотой не менее 2500 м (8200 футов), которые вы будете считать горами. Вычислите расстояние до них от центра Хьюстона, чтобы определить ближайшую.