На практике мы редко создаём пространственные данные «с нуля», вручную задавая координаты. Гораздо чаще мы работаем с готовыми наборами данных, которые уже собраны, структурированы и сохранены в различных форматах.
В этом разделе мы научимся загружать пространственные данные из разных источников с помощью Python. В частности, мы рассмотрим:
загрузку векторных форматов (Shapefile, GeoJSON, GeoPackage) с использованием
GeoPandas;работу с CSV-файлами, содержащими координаты;
анализ структуры пространственных данных — их атрибутов и геометрии.
Умение читать и изучать пространственные данные — необходимый шаг перед построением карт, выполнением пространственного анализа или преобразованием данных.
0. Импорт библиотек¶
import pandas as pd
import geopandas as gpdpandas (
pandas) — мощная библиотека Python для анализа и обработки данных. Предоставляет удобные структуры данных, такие как DataFrame, которые идеально подходят для работы с табличными (непространственными) данными — например, CSV-файлами, электронными таблицами или данными из баз данных.GeoPandas (
geopandas) — расширение библиотеки pandas, предназначенное для работы с геопространственными данными. Позволяет загружать, обрабатывать и анализировать пространственные наборы данных в различных форматах.
Исследование данных¶
После загрузки пространственного набора данных в GeoDataFrame важно разобраться, что именно он содержит.
Вот несколько ключевых характеристик, которые стоит проверить, чтобы лучше понять структуру и особенности данных.
Рассмотрим это на примере набора данных metro (загруженного из файла spb_metro.geojson).
Основная информация¶
metro.info()<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 98 entries, 0 to 97
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 OBJECTID 98 non-null float64
1 LINFO 98 non-null float64
2 HSTNR 0 non-null float64
3 HTXT 98 non-null object
4 HBEM 5 non-null object
5 EROEFFNUNG 98 non-null float64
6 EROEFFNUN0 98 non-null float64
7 geometry 98 non-null geometry
dtypes: float64(5), geometry(1), object(2)
memory usage: 6.2+ KB
Отображает краткую сводную информацию о DataFrame: количество записей, названия столбцов, типы данных и наличие пропущенных значений.
Просмотр первых строк¶
metro.head()Отображает первые 5 строк набора данных — быстрый способ понять его структуру и содержание
Количество объектов¶
len(metro)
# or
metro.shape(98, 8)Возвращает количество строк (объектов) в наборе данных. Метод .shape также показывает число столбцов.
Тип геомтерии¶
metro.geom_type.unique()array(['Point'], dtype=object)Возвращает количество строк (объектов) в наборе данных. Метод .shape также показывает число столбцов.
Система координат (CRS)¶
metro.crs<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World.
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984 ensemble
- Ellipsoid: WGS 84
- Prime Meridian: GreenwichОтображает систему координат данных — например, EPSG:4326 (WGS84).
Границы набора данных (Bounding Box)¶
metro.total_boundsarray([16.26083539, 48.13051529, 16.50843802, 48.27751795])Возвращает пространственный охват набора данных в виде массива координат: [minx, miny, maxx, maxy].
Поле геометрии¶
metro.geometry0 POINT (16.32423 48.16072)
1 POINT (16.37913 48.20682)
2 POINT (16.42070 48.16965)
3 POINT (16.32776 48.18365)
4 POINT (16.36401 48.22777)
...
93 POINT (16.41480 48.17472)
94 POINT (16.38129 48.21913)
95 POINT (16.26084 48.19696)
96 POINT (16.34295 48.18848)
97 POINT (16.31896 48.18605)
Name: geometry, Length: 98, dtype: geometryОтображает геометрические объекты для каждой строки — именно они представляют пространственную составляющую данных.
Атрибутивные поля¶
metro.columnsIndex(['OBJECTID', 'LINFO', 'HSTNR', 'HTXT', 'HBEM', 'EROEFFNUNG',
'EROEFFNUN0', 'geometry'],
dtype='object')Отображает список всех столбцов в GeoDataFrame, включая столбец geometry и все дополнительные атрибуты.
Обзор¶
print("CRS:", metro.crs)
print("Number of features:", len(metro))
print("Geometry types:", metro.geom_type.unique())
print("Bounds:", metro.total_bounds)
metro.head()CRS: EPSG:4326
Number of features: 98
Geometry types: ['Point']
Bounds: [16.26083539 48.13051529 16.50843802 48.27751795]
Это позволяет быстро получить общее представление о содержании и структуре пространственных данных — важный шаг перед анализом или визуализацией.
Итог¶
В этом модуле мы
как анализировать структуру и содержание пространственных данных, включая типы геометрии и атрибуты.