Введение

Почему эта тема актуальна? Не секрет, что сегодня профессии, связанные с наукой о данных, пользуются большим спросом. А если добавить к этому такое направление, как геопространственный анализ данных, то возможности становятся еще более захватывающими. Изменение климата, производство продуктов питания и переход к безуглеродной экономике  —  вот лишь некоторые из многих важных вопросов, требующих глубокого изучения геопространственных данных. Объединяя спутниковые и беспилотные снимки, векторные наборы данных и полевые измерения, имея более точную аналитическую картину, можно достичь более значимых изменений.

Поскольку для изучения анализа геопространственных данных с помощью Python доступно множество ресурсов, эта область быстро развивается. В прошлом я руководил группой ГИС, где для картирования водных ресурсов и проведения гидрологического анализа мы в основном использовали ПО, такое как ArcGIS и ENVI. Однако впервые я погрузился в геопространственный анализ с использованием Python в 2019 году, когда начал проходить докторантуру.

На этой неделе я наткнулся на книгу “Геопространственная разработка на Python”. Сначала обрадовался тому, что смогу улучшить свои навыки. Однако изучив оглавление, был разочарован. Кроме библиотеки GDAL (которую я недолго использовал в начале своего профессионального пути, быстро заменив ее на Rasterio), я почти не обращаюсь к библиотекам Python, обсуждаемым в главе 3 “Библиотеки Python для геопространственной разработки”. Это можно объяснить тем, что книга была опубликована в 2010 году, а в 2013 и 2016 годах в нее были внесены лишь незначительные обновления. В мире компьютерных наук это большой срок.

Хотя GDAL по-прежнему требуется для установки из-за своих драйверов, привязка этого пакета к Python больше не нужна и может быть довольно сложной в использовании. Кроме того, я никогда не слышал о других библиотеках, таких как Mapnik. Что интересно, в книге даже не упоминаются такие важные пакеты, как GeoPandas и XArray. А Google Earth Engine (реальное новшество в этой сфере) даже не существовал на момент публикации книги. Это общая проблема книг для практической разработки  —  они могут быстро устареть.

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

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

Избегайте ловушек

Прежде чем приступить к работе, вы должны знать о ловушках, которых следует остерегаться. Я перечислил всего четыре из них, но уверен, что есть и другие.

Переизбыток информации

Мир науки о геопространственных данных огромен, и новичку может быть трудно понять, как к нему подступиться. При поиске в интернете легко запутаться в огромном количестве статей и курсов. 

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

Устаревшие ресурсы

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

Примечание: это не столь критично для фундаментальных наук, например статистики и физики, но при рассмотрении каких-то технологических аспектов следует быть осторожнее.

Стремление сразу решать продвинутые задачи

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

Сейчас, когда мне нужно опубликовать карту, я делаю это в COG (Cloud optimized GeoTIFF  —  в обычном облачно-оптимизированном файле GeoTIFF, предназначенном для размещения на файловом HTTP-сервере) прямо на Github (пример), не устанавливая сервера карт и т. д. Но я узнал о COG только после того, как некоторое время изучал эту тему.

COG-файл, размещенный непосредственно на Github. Изображение автора

Стремление охватить все и сразу

Исходя из здравого смысла, вы должны усвоить основные темы и быстро наверстать упущенные важные понятия. Но делать это нужно постепенно.

Предположим, вы запускаете модель машинного обучения, которая использует в процессе производную. Если вы, как я когда-то, будете искать лучший из доступных курсов по исчислению, то рискуете взвалить на себя неподъемную ношу. Старайтесь не попадать в эту ловушку. Невозможно глубоко понять все основные предметы. Вместо этого проведите краткий обзор темы, чтобы не сбиться с основного пути.

С чего начать

Как уже говорилось ранее, освоение всего того, что включает в себя наука о геопространственных данных, может оказаться непосильной задачей и потребовать много времени. Пытаясь изучить все в “правильной” последовательности, вы можете разочароваться и сдаться. В этом отношении я согласен с Джереми Ховардом из fast.ai, который предлагает использовать подход “сверху вниз” (или “от общего к частному”). Таким образом, вы сможете увидеть значимые результаты, даже не до конца понимая все, что лежит в их основе.

Вот в таком неочевидном порядке я бы рассматривал обучение, если бы мне пришлось начинать с нуля и учиться как можно быстрее.

1. Основы программирования на Python

Это очень важная тема. Без нее бессмысленно изучать, например, наборы векторных и растровых данных, потому что все будет абстрактно, и у вас не будет инструментов для их изучения. Конечно, вы можете использовать QGIS или другое программное обеспечение для ГИС. Но это все равно не то, что открыть необработанные данные в массиве numpy или файле geojson и исследовать их самостоятельно. Кроме того, изучение программирования на Python в первую очередь может открыть другие двери, о которых вы даже не подозревали.

Примечание: имейте в виду, что, будучи новичком в Python, вы не сможете сразу писать программы. Вы будете просто полагаться на сторонние библиотеки для проведения анализа. Поэтому на начальном этапе не стоит брать ресурс, предназначенный для программистов.

2. Основы GEE и ГИС

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

На мой взгляд, стоит изучить основы ГИС с помощью практического курса по Google Earth Engine (GEE) с использованием Python. Таким образом, вы освоите Python и получите быстрый доступ к геопространственным данным (как векторным, так и растровым), не беспокоясь о загрузке и настройке сложных сред. Вы сразу же начнете выполнять свои первые анализы пространственных данных.

Другой вариант  —  пройти полный курс по GEE, в котором будет использоваться среда JavaScript, но все изученное применимо и на Python с небольшими изменениями в синтаксисе.

3. Python-библиотеки геопространственных данных

Google Earth Engine  —  мощная платформа со множеством готовых к использованию данных, но у нее есть свои недостатки. Все должно работать в облаке Google. Хотя GEE предоставляет бесплатный доступ к своим ресурсам, это может повлечь за собой расходы, особенно при крупномасштабной обработке. Поэтому идеальным решением является использование открытых библиотек Python для работы с любыми данными из любых источников. Вот самые основные.

  • Rasterio используется для чтения растровых данных и загрузки их в массивы.
  • Geopandas похожа на pandas, но с пространственным полем для векторных данных.
  • Xarray аналогична numpy, но с учетом координат и масштабов.
  • Shapely предназначена для векторной обработки, обрезки, определения областей пересечения и т.д.
  • Fiona может пригодиться для чтения стандартных шейп-файлов.
  • Leafmap подойдет для визуализации динамического отображения карт.

4. Управление проектами и Python-средами

Предположим, что вы дошли до этого момента без предварительного изучения Python-программировании. В этом случае у вас, скорее всего, есть беспорядочная рабочая среда (способ создания которой вы не до конца понимаете) и коллекция разрозненных Jupyter-ноутбуков (где трудно отыскать важный фрагмент кода, обнаруженный вами неделю назад). Если вы оказались в подобной ситуации, не паникуйте! Это случается с каждым новичком. Сейчас самое время организовать свою рабочую среду. Чтобы сделать это, нужно понять следующее.

  • Важность инструментов управления пакетами, таких как Pip и Conda. Также можно изучить Miniconda и Mamba для повышения производительности.
  • Как создать ядро для Jupyter-ноутбуков.
  • Как контролировать версионность работы с помощью Git и поддерживать ее с помощью GitHub.

5. Глубокое погружение в Python-программирование

До сих пор вы, вероятно, использовали Jupyter-ноутбуки для экспериментов. Это отличный инструмент для исследования и анализа данных, но не надейтесь создать с его помощью полнофункциональное программное обеспечение (если только вы не используете nbdev). Кроме того, написание ноутбука, выполняющего конкретный анализ, отличается от написания полностью функционального программного обеспечения, которое будет развернуто, например, на сервере.

Первоначально вам понадобится какая-либо IDE (PyCharm или VSCode) для разработки функций, классов и пакетов. Jupyter-ноутбуки будут использоваться для вызова того, что вы создали, и отображения результатов. Помните, в первом пункте этого раздела я не советовал использовать Python-ресурсы, предназначенные для профессиональных программистов? Теперь пришло время получить те самые продвинутые навыки программирования.

6. Продвинутые темы (выше неба только небо)

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

  • Библиотека Dask  —  Python-библиотека для распределенных вычислений, которая пригодится при обработке больших объемов данных, не помещающихся в базовой памяти.
  • Docker  —  программное обеспечение для создания, упаковывания и развертывания сред и приложений в виде контейнеров (эти контейнеры можно развертывать на облачных серверах для повышения эффективности и масштабируемости).

7. Математика и статистика для науки о данных

Удивлены? Думаете, что я вас загоняю в ловушку №4, предлагая уделить внимание фундаментальным наукам? Эта тема действительно тесно связана с ловушкой №4. Чтобы не попасть в нее, воспользуйтесь следующими рекомендациями.

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

Заключение

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

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

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Maurício Cordeiro: How to Learn Geospatial Data Science in 2023

Предыдущая статьяРеактивное программирование с Combine
Следующая статьяКонтейнеры Docker и их связывание в сети