- •Об авторе
- •О научных редакторах
- •Благодарности
- •От издательства
- •Введение
- •Для кого эта книга?
- •Почему 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. Ограничение доступа по принципу распознавания лиц
- •Усложняем проект: добавление пароля и видеозахвата
11
Создание интерактивной карты побега от зомби
В 2010 году на телевизионном канале AMC был по-
казан сериал «Ходячие мертвецы». События фильма
разворачиваются в начале зомби-апокалипсиса, когда
небольшая группа людей пытается выжить на терри-
тории Атланты, штат Джорджия. Этот сериал получил широкое признание критиков и стал самым просматриваемым за всю историю кабельного телевидения. По его мотивам
даже было снято продолжение под названием «Бойтесь ходячих мертвецов», и возник абсолютно новый жанр на телевидении — шоу-обсуждение очередного эпизода, которое в данном случае получило название «Говорящие мертвецы».
В этой главе вы будете играть роль проницательного ученого, который предвидит надвигающийся крах цивилизации. Вам нужно подготовить карту, которая поможет выжившим из сериала «Ходячие мертвецы» перебраться из густо населенного района Атланты в более пустынную область к западу от Миссисипи. Вам понадобится библиотека pandas для загрузки, анализа и очистки данных, а также модули bokeh и holoviews для рисования карты.
Проект #15. Визуализация плотности населения с помощью хороплетной карты
По данным ученых (да, они это реально изучали), выжить во время зомби-апо- калипсиса смогут те, кто обитает в максимально отдаленном от городов месте.
Проект#15.Визуализацияплотностинаселенияспомощьюхороплетнойкарты 313
На карте Соединенных Штатов на рис. 11.1 это темные области. Чем ярче огни, тем выше плотность население в этом районе. Так что если мы хотим избегать встреч с людьми, то «нельзя идти на свет».
Atlanta
Рис. 11.1. Освещение разных районов территории США при ночной съемке
в2012 году
Ксожалению, выжившие в Атланте находятся очень далеко от относительно безопасного запада США. Им придется миновать множество крупных и небольших городов, в идеале прокладывая путь по наименее населенным областям. Карты, предлагаемые на автозаправках, не содержат информации о населенности регионов, а вот в переписи населения эти данные есть. Так что, прежде чем цивилизация сгинет и интернет отрубится, успейте скачать данные о плотности населения на свой ноутбук, чтобы разобраться с ними позже при помощи Python.
Лучше всего представить этот тип данных через хороплетную карту. Она позволяет с помощью цветов и шаблонов визуализировать статистику в заданных географических регионах. Возможно, вам знакомы хороплетные карты по президентским выборам в США: в случае победы республиканцев территории округов окрашиваются в красный цвет, а при победе демократов — в синий (рис. 11.2).
Если у выживших будет подобная карта, показывающая плотность населения (например, число людей на квадратную милю в каждом округе), то они смогут определить самые короткие и, теоретически, безопасные маршруты из Атланты и через Юг Штатов. Несмотря на то что данные переписи населения содержат
314 Глава 11. Создание интерактивной карты побега от зомби
еще более точную информацию, нам вполне достаточно данных по округам. Стада зомби из «Ходячих мертвецов» мигрируют, когда становятся голодны, что быстро делает подробную статистику бесполезной.
Рис. 11.2. Хороплетная карта результатов президентских выборов в США в 2016 году (светло-серый = демократы, темно-серый = республиканцы)
Для определения оптимальных маршрутов выжившие могут использовать бумажные карты автомобильных дорог штата, которые доступны на автозаправках и в информационно-туристических центрах. Эти карты включают в себя границы округов, что упрощает сопоставление сети указанных в них городов и дорог с распечаткой хороплетной карты страничного размера.
ЗАДАЧА
Создать интерактивную карту 48 смежных штатов, на которой будет отражена плотность населения в каждом округе.
Стратегия
Как и любые задачи визуализации данных, эта решается следующим образом: поиск и очистка данных, выбор типа графического представления и инструмента для отображения данных, их подготовка к отрисовке и итоговое изображение.
Проект#15.Визуализацияплотностинаселенияспомощьюхороплетнойкарты 315
Внашем случае найти данные просто, так как информация о переписи населения в США является публичной. Но ее еще нужно очистить, выявив и обработав ложные точки данных и нулевые значения и решив проблемы с форматированием.
Видеале нужно также убедиться в точности информации. Это сложная задача, которую специалисты по обработке данных, похоже, слишком часто пропускают. По меньшей мере данные следует проверить с позиции здравого смысла, что в принципе может подождать до момента их отрисовки. Например, Нью-Йорк должен иметь большую плотность населения, чем, скажем, Биллингс, Монтана.
Далее следует решить, в каком виде представлять данные. Мы воспользуемся картой, но в качестве альтернативы можно взять гистограмму или таблицу. При этом очень важно выбрать правильный инструмент — в нашем случае библиотеку Python, с помощью которого мы будем создавать графическое представление. Выбор инструмента оказывает существенное влияние на подготовку данных и конечное изображение.
Несколько лет назад одна из сетей быстрого питания демонстрировала рекламный ролик, в котором клиент утверждал, что любит «разнообразие, но не когда его слишком много». В случае с инструментами визуализации в Python можно смело заявить, что вариантов слишком много при не слишком заметном различии между ними: matplotlib, seaborn, plotly, bokeh, folium, altair, pygal, ggplot, holoviews, cartopy, geoplotlib, а также встроенные в pandas функции.
Эти всевозможные библиотеки визуализации имеют свои достоинства и недостатки, но так как наш проект требует скорости, мы возьмем простую в использовании библиотеку holoviews, подкрепив ее bokeh для рисования графических изображений. Эта комбинация позволит создать интерактивную карту, написав всего несколько строк кода, а bokeh, что весьма удобно, содержит схемы полигонов штатов и округов США.
Выбрав инструмент визуализации, приведем данные в подходящий для него формат. Как заполнять получаемые из файла формы округов данными о населении из другого файла? Здесь нам не обойтись без некоторого реверс-инжини- ринга с использованием примера кода из галереи holoviews. Затем мы отрисуем карту с помощью bokeh.
К счастью, данные практически всегда анализируются с помощью библиотеки pandas. Этот модуль позволит загрузить информацию о переписи населения и переформатировать ее для использования в holoviews и bokeh.
Библиотека анализа данных
Открытая библиотека pandas является наиболее популярным инструментом для извлечения, обработки и управления данными в Python. Она содержит структуры
316 Глава 11. Создание интерактивной карты побега от зомби
данных, спроектированные для работы со стандартными источниками, такими как реляционные базы данных SQL и электронные таблицы Excel. Если вы планируете работать с данными в будущем, то однозначно столкнетесь с pandas.
Эта библиотека содержит две основные структуры данных: серии и датафреймы. Серия — это одномерный массив, который может содержать любой тип данных, например целые числа, числа с плавающей точкой, строки и т. д. А поскольку в основе pandas лежит NumPy, то объект серии, по сути, представляет собой два связанных массива (если о массивах вы ничего не знаете, загляните в главу 1, на с. 38). Один массив содержит значения точек данных, которые могут иметь любой тип данных NumPy. Второй содержит метки для каждой точки данных, называемые индексами (табл. 11.1).
Таблица 11.1. Объект серии
Индекс |
Значение |
|
|
0 |
25 |
|
|
1 |
432 |
|
|
2 |
–112 |
|
|
3 |
99 |
|
|
В отличие от индексов элементов списка, в Python индексы в серии не обязательно должны быть целыми числами. В табл. 11.2 это имена людей с возрастом в качестве значений.
Таблица 11.2. Объект серии со смысловыми метками
Индекс |
Значение |
|
|
Хавьер |
25 |
|
|
Кэрол |
32 |
|
|
Лора |
19 |
|
|
Сара |
29 |
|
|
Аналогично спискам или массивам NumPy серии можно разделять или выбирать их отдельные элементы, указывая индекс. Сериями можно управлять по-разному, например фильтровать их, выполнять математические операции, а также объединять их с другими сериями.
Датафрейм более сложен и состоит уже из двух измерений. Это табличная структура со столбцами, строками и данными, как в электронных таблицах