Книга: Простой Python. Современный стиль программирования. 2-е изд.
Назад: Глава 20. Пи-Арт
Дальше: Глава 22. Python в науке

Глава 21. За работой

— Дела! — вскричал призрак, снова заламывая руки. — Забота о ближнем — вот что должно было стать моим делом…

Чарльз Диккенс. Рождественские повести

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

В области бизнеса и правительства мы используем все технологии из предыдущих глав — базы данных, веб-системы и сети. Продуктивность Python делает его более по­пуляр­ным и для корпораций (), и для стартапов ().

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

динамическими языками, такими как Python;

• сетью как универсальным графическим интерфейсом пользователя;

• RESTful API как независимыми от языка интерфейсами сервисов;

• реляционными и NoSQL-базами данных;

• «большими данными» и аналитикой;

облаками для развертывания и экономии капитала.

The Microsoft Office Suite

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

docx () — эта библиотека создает, считывает и записывает файлы для Microsoft Office Word 2007 с расширением .docx;

• python-excel (/) — здесь с помощью PDF-руководства () рассматриваются модули xlrd, xlwt и xlutils. Excel также может читать и записывать файлы, содержащие значения, разделенные запятыми (Comma-Separated Value, CSV), с которыми вы уже умеете работать с помощью стандартного модуля csv;

oletools () — эта библиотека извлекает данные из форматов Office.

OpenOffice (/) — альтернатива Office, имеющая открытый исходный код. Работает в операционных системах Linux, Unix, Windows и macOS, а также читает и записывает форматы файлов Office. Кроме того, это приложение устанавливает версию Python 3 для себя. Вы можете запрограммировать OpenOffice с помощью Python () и библиотеки PyUNO ().

OpenOffice принадлежал компании Sun Microsystems, и когда компания Oracle приобрела компанию Sun, некоторые люди стали опасаться, что OpenOffice в будущем станет недоступен. В результате появился LibreOffice (/). В DocumentHacker () вы можете прочитать об использовании библиотеки Python UNO вместе с LibreOffice.

Для создания OpenOffice и LibreOffice пришлось выполнить реверс-инжиниринг форматов файлов Microsoft, что не так просто. Модуль Universal Office Converter () зависит от библиотеки UNO в OpenOffice или LibreOffice. Он может преобразовывать файлы многих форматов: документы, электронные таблицы, графику и презентации.

Если у вас имеется таинственный файл, то python-magic (/) может угадать его формат, проанализировав определенные последовательности байтов.

Библиотека python open document () позволяет предоставить код Python внутри шаблонов для создания динамических документов.

Формат PDF распространен также в области бизнеса, несмотря на то что создан не компанией Microsoft. Движок ReportLab () имеет бесплатную и коммерческую версии генератора PDF, созданные с помощью Python. Если вам нужно отредактировать PDF-файл, то можете найти помощь на сайте StackOverflow ().

Выполняем бизнес-задачи

Вы можете найти модуль Python практически для чего угодно. Посетите сайт PyPI () и введите что-либо в строку поиска. Многие модули — это интерфейсы для общедоступных API различных сервисов. Вам могут быть интересны примеры, связанные с бизнес-задачами:

отправка через Fedex () или UPS ();

• отправка почты с помощью API stamps.com ();

• прочтите дискуссию о применении Python для корпоративного интеллекта ();

• если кофемашины слетают с полок в Аноке, то это результат действий покупателя или полтергейст? Cubes (/) — это веб-сервер и браузер данных Online Analytical Processing (OLAP);

OpenERP (/) — крупная коммерческая система Enterprise Resource Planning (ERP), написанная с помощью Python и JavaScript, содержащая тысячи модулей-надстроек.

Обработка бизнес-данных

Бизнес очень любит данные. К сожалению, во многих отраслях бизнеса с данными принято обращаться весьма своеобразно, словно для того, чтобы специально усложнить вам работу.

Электронные таблицы стали хорошим изобретением, и с течением времени бизнес пристрастился к ним. Многие непрограммисты стали заниматься программированием, поскольку эти таблицы стали называть макросами, а не программами. Но Вселенная постоянно расширяется, и данные пытаются выдержать ее темп. Более старые версии Excel были ограничены 65 536 рядами, а более новые не могли обработать больше миллиона. Когда данные организаций переросли один компьютер, ситуация стала похожа на то, как если бы штат перерос сотню человек, — внезапно вам требуются новые слои, промежуточные уровни и коммуникация.

Программы, работающие с большим количеством данных, появились не из-за того, что данные на одном компьютере значительно разрослись, — они стали результатом попытки обобщить все данные, появляющиеся в бизнесе. Реляционные базы данных обрабатывают миллионы рядов, не взрываясь при этом, но могут взаимодействовать только с определенным количеством рядов или обновлений за раз. Старые добрые текстовые или бинарные файлы могут занимать гигабайты памяти, но если вам нужно обработать их все одновременно, то требуется иметь достаточное количество памяти. Традиционное программное обеспечение для этого не подходит. Таким компаниям, как Google и Amazon, пришлось изобрести решения, позволяющие работать с данными такого масштаба. Netflix () — пример такого решения, созданный в облаке AWS от Amazon, который использует Python для объединения RESTful API, безопасности, развертывания и баз данных.

Извлечение, преобразование и загрузка

Подводные части айсбергов данных содержат всю работу по получению данных в первую очередь. Если говорить языком бизнеса, распространенными терминами являются «извлечение», «преобразование», «загрузка» (extract, transform, load, или ETL). Синонимы наподобие «выпас данных» (data munging, data wrangling) могут создать впечатление, будто вы приручаете непокорного зверя, — такая метафора может оказаться близкой. Данная задача выглядит решенной с точки зрения инженерии, но по большей части это искусство. Я немного говорил об этом в главе 12. Мы рассмотрим науку о данных более подробно в главе 22, поскольку именно на эту область разработчики тратят бо'льшую часть времени.

Если вы видели фильм «Волшебник страны Оз», то, помимо летающих обезьян, должны помнить фрагмент в конце, когда добрая волшебница сказала Дороти, что она может отправиться домой в Канзас, просто стукнув каблучком о каблучок. Даже будучи моложе, я думал: «И она говорит об этом только сейчас?!» Хотя теперь понимаю, что фильм был бы гораздо короче, если бы волшебница дала такой совет раньше.

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

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

1. Извлечение данных из файлов странных форматов или баз данных.

2. Очистку данных, которая охватывает множество областей, заполненных подвод­ными камнями.

3. Преобразование дат, времени и наборов символов.

4. Выполнение каких-либо действий над данными.

5. Сохранение полученного результата в базе данных.

6. Откат к шагу 1: намылить, смыть, повторить.

Рассмотрим пример: вам нужно переместить данные из электронной таблицы в базу данных. Вы можете сохранить таблицу в формате CSV и использовать библиотеки Python, показанные в главе 16. Или же найти модуль, который считывает непосредственно бинарный формат электронной таблицы. Ваши пальцы знают, как набрать строку pythonexcel в поисковике и найти сайты наподобие Working with Excel files in Python (/). Вы можете установить один из необходимых пакетов с помощью pip и найти драйвер базы данных для Python, чтобы выполнить последнюю часть задания. Я упоминал SQLAlchemy и непосредственные драйверы базы данных в той же главе. Теперь вам нужно написать промежуточный код, и именно здесь структуры данных и библиотеки Python могут сэкономить ваше время.

Попробуем выполнить поставленную задачу, а затем решить ее снова, но уже используя библиотеки, которые позволяют сэкономить немного времени. Мы считаем CSV-файл, агрегируем все числа в одном столбце, упорядочив их по уникальному значению, и выведем результат на экран. Если бы мы решали задачу с помощью SQL, то применили бы SELECT, JOIN и GROUP BY.

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

animal,bites,stitches,hush

bear,1,35,300

marmoset,1,2,250

bear,2,42,500

elk,1,30,100

weasel,4,7,50

duck,2,0,10

Мы хотим узнать, какое животное обходится нам дороже всего, поэтому агрегируем общую сумму взяток для каждого типа животного (количеством укусов и швов пусть займется врач). Мы используем модуль csv, который рассматривали в подразделе «CSV» на с. 328, и счетчик Counter из подраздела «Подсчитываем элементы с помощью Counter()» на с. 233. Сохраните этот код как zoo_counts.py:

import csv

from collections import Counter

 

counts = Counter()

with open('zoo.csv', 'rt') as fin:

    cin = csv.reader(fin)

    for num, row in enumerate(cin):

        if num > 0:

            counts[row[0]] += int(row[-1])

for animal, hush in counts.items():

    print("%10s %10s" % (animal, hush))

Мы пропустили первый ряд, поскольку в нем содержались только имена колонок. Элемент counts — это объект типа Counter, он управляет инициализацией суммы для каждого типа животного, устанавливая ее равной 0. Мы также применили форматирование, чтобы выровнять выводимую информацию по правому краю. Запустим наш код:

$ python zoo_counts.py

      duck         10

       elk        100

      bear        800

    weasel         50

  marmoset        250

Ага! Это был медведь! Он был нашим основным подозреваемым все время, но теперь у нас есть доказательства.

Далее воссоздадим этот пример с инструментария для обработки данных Bubbles (/). Вы можете установить его, введя следующую команду:

$ pip install bubbles

Он требует наличия SQLAlchemy. Если у вас его нет, то вам поможет команда pipinstallsqlalchemy. Так выглядит тестовая программа (назовите файл bubbles1.py), адаптированная из документации ():

import bubbles

 

p = bubbles.Pipeline()

p.source(bubbles.data_object('csv_source', 'zoo.csv', infer_fields=True))

p.aggregate('animal', 'hush')

p.pretty_print()

А теперь момент истины:

$ python bubbles1.py

2014-03-11 19:46:36,806 DEBUG calling aggregate(rows)

2014-03-11 19:46:36,807 INFO called aggregate(rows)

2014-03-11 19:46:36,807 DEBUG calling pretty_print(records)

+--------+--------+------------+

|animal  |hush_sum|record_count|

+--------+--------+------------+

|duck    |      10|           1|

|weasel  |      50|           1|

|bear    |     800|           2|

|elk     |     100|           1|

|marmoset|     250|           1|

+--------+--------+------------+

2014-03-11 19:46:36,807 INFO called pretty_print(records)

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

Сравнивая два примера, вы можете заметить: пример с bubbles использовал один вызов функции (aggregate) с целью заменить чтение и подсчет данных в формате CSV вручную. В зависимости от того, что вам нужно, наборы инструментов для работы с данными могут сберечь много времени.

В более реалистичном примере наш файл может содержать тысячи строк (он становится опасным), в которых можно встретить опечатки вроде bare, запятые в числах и т.д. Найти хорошие образцы практических задач, связанных с данными, и их решений на Python я бы порекомендовал в следующих источниках:

Data Crunching: Solve Everyday Problems Using Java, Python, and More Грега Уилсона () (издательство Pragmatic Bookshelf);

Automate the Boring Stuff Эла Свайгарта (/) (издательство No Starch).

Инструменты очистки данных могут сэкономить много времени, и Python имеет множество таких инструментов. Например, PETL (/) позволяет выполнять извлечение и переименование рядов и колонок. В главе 22 рассматриваются особенно полезные инструменты для работы с данными: Pandas, NumPy и IPython. В дополнение к их широкой известности в научной среде они стали популярными инструментами среди разработчиков, работающих с финансами и данными. На конференции PyData в 2012 году компания AppData () рассматривала, как эти три и другие инструменты Python помогают обработать 15 Тбайт данных ежедневно. Это не опечатка — Python может обрабатывать очень большие объемы реальных данных.

Вы также можете вернуться назад и взглянуть на инструменты для сериализации и валидации данных, рассмотренные в разделе «Сериализация данных» на с. 386.

Валидация данных

При очистке данных вам зачастую нужно проверить следующее:

тип данных (целое число, число с плавающей точкой или строка);

• диапазон возможных значений;

• корректность значений, например рабочий номер телефона или адрес электронной почты;

• дубликаты;

отсутствующие данные.

Это особенно важно при обработке веб-запросов и ответов.

Для работы с определенными данными можно использовать следующие полезные пакеты Python:

validate_email ();

phonenumber ().

Кроме того, порекомендую полезные инструменты общего назначения:

validators (/);

• pydantic (/) — для версий Python 3.6 и выше; использует подсказки типов;

• marshmallow () — также выполняет сериализацию и десериализацию;

• Cerberus ();

многие другие ().

Дополнительные источники информации

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

data.gov (/) открывает доступ к тысячам наборов данных и инструментов. Его API () созданы на основе CKAN (/), системы управления данными Python;

• Opening government with Python (/) — посмотрите видеоролики () и слайды ();

• python-sunlight () — библиотеки, позволяющие получить доступ к Sunlight API ();

• Froide (/) — платформа, основанная на Django, для управления свободой информационных запросов;

30 places to find open data on the Web (). Различные полезные ссылки.

Пакеты для работы с бизнес-данными с открытым исходным кодом

• Odoo (/) — обширная ERP-платформа.

• Tryton (/) — еще одна обширная платформа.

• Oscar (/) — фреймфорк для электронной коммерции, написанный на Django.

Grid Studio (/) — основанные на Python таблицы, работают локально или в облаке.

Python в области финансов

С недавнего времени в финансовой индустрии развился значительный интерес к Python. Адаптируя программное обеспечение, показанное в главе 22, а также разрабатывая собственное, группа quants создает новое поколение финансовых инструментов:

Quantitative economics (/) — этот инструмент предназначен для экономического моделирования с помощью большого количества математических расчетов и Python;

• Python for finance (/) — этот сайт представляет книгу Derivatives Analytics with Python: Data Analytics, Models, Simulation, Calibration and Hedging Ива Хилпиша (издательство Wiley);

• Quantopian (/) — это интерактивный сайт, на котором вы можете писать собственный код Python и работать с его помощью с архивными данными об акциях;

• PyAlgoTrade () — еще один инструмент для тестирования на исторических данных, но уже для вашего собственного компьютера;

• Quandl (/) — используйте этот инструмент для поиска в миллионах единиц финансовых данных;

• Ultra-finance () — библиотека, содержащая набор информации об акциях, которая обновляется в реальном времени;

Python for Finance () (издательство O’Reilly) — книга Ива Хилпиша, содержащая примеры финансового моделирования, написанные на Python.

Безопасность бизнес-данных

Безопасность — особая забота для бизнеса. Данной теме посвящены целые книги, поэтому я лишь упомяну несколько советов, связанных с Python.

В подразделе «scapy» раздела «TCP/IP» главы 17 рассматривается scapy, язык на базе Python для экспертизы пакетов. Он используется для объяснения некоторых крупных сетевых атак.

• Сайт Python Security (/) содержит дискуссии на тему безопасности, детали некоторых модулей Python и вспомогательные таблицы.

Книга Violent Python () (с подзаголовком A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers) Ти Джея О’Коннора (издательство Syngress) — это широкий обзор Python и компьютерной безопасности.

Карты

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

В ранние дни существования Интернета я посещал экспериментальный сайт по созданию карт у Xerox. Когда появились крупные сайты, такие как Google Maps, они стали откровением (к тому же вызывали мысль: «Почему я не подумал об этом и не заработал миллионы?»). Теперь сервисы картографии и сервисы, основанные на определении местоположения, практически везде, они особенно удобны в мобильных устройствах.

Здесь пересекается множество терминов: картография, GIS (geographic information system — географическая информационная система), GPS (Global Positioning System — глобальная система позиционирования), анализ геопространства и многое другое. Блог Geospatial Python () воплощает образ системы размером с «800-фунтовую гориллу» GDAL/OGR, GEOS и PROJ.4 (проекции) и вспомогательные системы, представленные как обезьяны (помогающие этой горилле). Многие из этих сервисов имеют интерфейсы Python. Поговорим о некоторых из них, начиная с самых простых форматов.

Форматы

Мир картографии имеет множество форматов: векторный (линии), растровый (изображения), метаданные (слова) и их комбинации.

Esri, первая географическая система, изобрела формат «шейп-файл» более 20 лет назад. Файл данного формата содержит несколько файлов, включающих как минимум следующую информацию:

.shp — информацию о фигуре (вектор);

• .shx — индекс формы;

.dbf — базу данных атрибутов.

Получим шейп-файл для нашего следующего примера. Посетите страницу . В разделе Admin 1 — States, Provinces (Admin 1 — штаты, провинции) нажмите зеленую кнопку download states and provinces (Скачать штаты и провинции), чтобы скачать архив. Затем разархивируйте файл. Вы должны увидеть такой результат:

ne_110m_admin_1_states_provinces_shp.README.html

ne_110m_admin_1_states_provinces_shp.sbn

ne_110m_admin_1_states_provinces_shp.VERSION.txt

ne_110m_admin_1_states_provinces_shp.sbx

ne_110m_admin_1_states_provinces_shp.dbf

ne_110m_admin_1_states_provinces_shp.shp

ne_110m_admin_1_states_provinces_shp.prj

ne_110m_admin_1_states_provinces_shp.shx

Мы будем использовать эти файлы в наших примерах.

Нарисуем карту на основе шейп-файла

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

Для прочтения шейп-файла вам понадобится эта библиотека:

$ pip install pyshp

Теперь введите текст программы, map1.py, который я модифицировал из статьи в блоге Geospatial Python ():

def display_shapefile(name, iwidth=500, iheight=500):

    import shapefile

    from PIL import Image, ImageDraw

    r = shapefile.Reader(name)

    mleft, mbottom, mright, mtop = r.bbox

    # единицы измерения карты

    mwidth = mright - mleft

    mheight = mtop - mbottom

    # преобразуем единицы измерения карт в единицы измерения изображений

    hscale = iwidth/mwidth

    vscale = iheight/mheight

    img = Image.new("RGB", (iwidth, iheight), "white")

    draw = ImageDraw.Draw(img)

    for shape in r.shapes():

        pixels = [

            (int(iwidth - ((mright - x) * hscale)), int((mtop - y) * vscale))

            for x, y in shape.points]

        if shape.shapeType == shapefile.POLYGON:

            draw.polygon(pixels, outline='black')

        elif shape.shapeType == shapefile.POLYLINE:

            draw.line(pixels, fill='black')

    img.show()

 

if __name__ == '__main__':

    import sys

    display_shapefile(sys.argv[1], 700, 700)

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

Запустим наш код. Аргументом станет базовое имя для шейп-файла, не содержащее расширения:

$ python map1.py ne_110m_admin_1_states_provinces_shp

Вы должны увидеть что-то похожее на рис. 21.1.

Что ж, программа нарисовала карту, которая напоминает Соединенные Штаты, но:

между Аляской и Гавайями видим что-то вроде растрепанных кошкой ниток — это баг;

• страна сплющена, а мне нужна проекция;

картинка не очень красивая — мне нужно задать стиль.

По поводу первого пункта: в логике программы есть ошибка, но что мне делать? В главе 19 рассматриваются советы для разработчиков, включая информацию об отладке, но мы можем рассмотреть и другие варианты. Я мог бы написать несколько тестов и работать, пока не исправлю ошибку, или же использовать какую-нибудь другую библиотеку для создания карты. Возможно, более высокоуровневое решение поможет мне справиться со всеми тремя проблемами (лишние линии, сплющенный вид и примитивный стиль).

Насколько я знаю, не существует пакета для работы с картами, основанного на чистом Python. К счастью, есть более изящные пакеты; рассмотрим их.

21_01.tif 

Рис. 21.1. Предварительная карта

Geopandas

Пакет Geopandas (/) интегрирует в себе Matplotlib, Pandas и другие библиотеки Python в одну платформу, которая позволяет работать с геопространственными данными.

Основной пакет устанавливается с помощью знакомой команды pipinstallgeopandas, но полагается и на другие пакеты, которые вам также нужно устанавливать, используя pip, если их у вас еще нет:

numpy;

• pandas (версия 0.23.4 или выше);

• shapely (интерфейс для GEOS);

• fiona (интерфейс для GDAL);

• pyproj (интерфейс для PROJ);

six.

Пакет Geopandas может читать шейп-файлы (включая файлы из предыдущего подраздела), а также, что удобно, содержит два шейп-файла от Natural Earth: очертания стран/континентов и столицы. В примере 21.1 используются оба этих файла.

Пример 21.1. geopandas.py

import geopandas

import matplotlib.pyplot as plt

 

world_file = geopandas.datasets.get_path('naturalearth_lowres')

world = geopandas.read_file(world_file)

cities_file = geopandas.datasets.get_path('naturalearth_cities')

cities = geopandas.read_file(cities_file)

base = world.plot(color='orchid')

cities.plot(ax=base, color='black', markersize=2)

plt.show()

Запустив этот пример, вы получите карту, показанную на рис. 21.2.

21_02.tif 

Рис. 21.2. Карта, созданная с помощью Geopandas

Я считаю пакет Geopandas наилучшей комбинацией для управления географическими данными и их отображения. Однако существует множество других стоящих конкурентов, которых мы рассмотрим в следующем подразделе.

Другие пакеты для работы с картами

Перед вами набор ссылок на другое ПО для работы с картами; многие из них могут не полностью устанавливаться с помощью pip, но для некоторых можно задействовать conda (альтернативный установщик пакетов Python, особенно полезный для научного ПО):

pyshp () — это библиотека для работы с шейп-файлами, упомянутая выше, в подразделе «Нарисуем карту на основе шейп-файла»;

• kartograph (/) отрисовывает шейп-файлы в карты формата SVG на сервере или клиенте;

• shapely (/) решает геометрические вопросы наподобие «Какие строения в этом городе через 50 лет окажутся в зоне наводнения?»;

• basemap () основана на Matplotlib, предназначена для рисования карт и перекрытия их данных; к сожалению, после появления Cartopy считается устаревшей;

• cartopy () продолжает дело Basemap и решает задачи, для которых обычно нужен пакет Geopandas;

• folium () работает с leaflet.js, используется geopandas;

• plotly () — еще один пакет для построения, который включает в себя возможность работы с графиками;

• dash (/) использует Plotly, Flask и JavaScript для создания интерактивных визуализаций, включая карты;

• fiona () оборачивает библиотеку OGR, которая работает с шейп-файлами и другими векторными форматами;

• Open Street Map () получает доступ к обширной коллекции карт мира OpenStreetMap (/);

• mapnik (/) — библиотека, написанная на C++, имеющая привязку к Python; используется для создания векторных (линии) и растровых (изображения) карт;

• Vincent (/) преобразуется в Vega, инструмент визуализации JavaScript; см. руководство Mapping data in Python with pandas and vincent ();

• Python for ArcGIS () — ссылки на ресурсы Python для коммерческого продукта ArcGIS фирмы Esri;

• Using geospatial data with Python () — видеопрезентации;

• So you’d like to make a map using Python () использует Pandas, Matplotlib, shapely и другие модули Python для создания карт с расположением памятных плит на зданиях;

• Python Geospatial Development () (издательство Packt) — книга Эрика Вестры, содержащая примеры использования mapnik и других инструментов;

• Learning Geospatial Analysis with Python () (издательство Packt) — еще одна книга. Ее написал Джоэл Лохед. Он сделал обзор форматов и библиотек, а также включил геопространственные алгоритмы;

geomancer () полезен для геопространственных работ, например для нахождения расстояния от некой точки до ближайшего ирландского бара.

Если вам интересны карты, то попробуйте скачать и установить один из этих пакетов и посмотреть, что вы можете сделать с его помощью. Или можете избежать установки ПО и попытаться соединиться с API удаленного сервера самостоятельно — в главе 18 показывается, как соединяться с веб-серверами и декодировать ответы JSON.

Приложения и данные

Мы говорили о рисовании карт, но с данными о картах вы можете сделать гораздо большее. Геокодирование преобразует адреса в географические координаты и наоборот. Существует множество геокодирующих API () (их сравнение вы можете увидеть на сайте ) и библиотек Python:

geopy ();

• pygeocoder ();

googlemaps (/).

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

Вот несколько ресурсов, касающихся отображения данных:

— обзор файлов карт U.S. Census Bureau;

— множество географических и демографических карт;

— мировые ресурсы;

— векторные и растровые данные карт в трех масштабах.

Нам следует упомянуть здесь Data Science Toolkit (/). Он бесплатно предоставляет возможности двунаправленного геокодирования, вычисления координат политических границ и статистики и многое другое. Вы можете загрузить все данные и ПО как виртуальную машину и запустить их отдельно на своем компьютере.

Читайте далее

Мы отправимся на научную ярмарку и посмотрим все экспонаты, связанные с Python.

Упражнения

21.1. Установите Geopandas и запустите пример 21.1. Попробуйте поизменять цвета и размеры меток.

Свайгарт Э. Автоматизация рутинных задач с помощью Python. Практическое руководство для начинающих. — Киев: Диалектика, 2018.

Хилпиш И. Python для финансовых расчетов. — Киев: Диалектика, 2019.

Вестра Э. Разработка геоприложений на языке Python. — М.: ДМК Пресс, 2017.

Назад: Глава 20. Пи-Арт
Дальше: Глава 22. Python в науке

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