Расчётно-графическая работа · глава 1

Глава 1. Создание пространственной БД

О чём эта глава
Первая глава РГР: сбор данных Всероссийской переписи населения по выбранному региону, их нормализация, загрузка в PostgreSQL, выгрузка административных границ из OpenStreetMap через QuickOSM и соединение статистики с геометрией оператором JOIN.
Пререквизиты
Установленное ПО — инструкция по установке. Нормализация — лекция 3; JOIN — экспресс-занятие 3; работа в pgAdmin — практика 3.
Формат сдачи
Отчёт присылается в формате doc, docx или pdf. Состав отчёта каждой части — в конце соответствующего раздела; интерактивные чек-листы помогают ничего не забыть (отметки сохраняются в браузере).

Часть 1. Данные переписи населения

Методические указания (как делать)

  1. Выберите уникальный в пределах вашей группы регион России (за исключением городов федерального значения).
  2. Зайдите на сайт Росстата и найдите Итоги Всероссийской переписи населения 2020 года. Например, для Нижегородской области: https://52.rosstat.gov.ru/folder/62175#, где 52 — номер региона.
Сайт Росстата региона
  1. Скачайте таблицу «Численность населения городских округов, муниципальных районов, муниципальных округов, городских и сельских поселений, городских населённых пунктов, сельских населённых пунктов с населением 3000 человек и более» (номер таблицы может отличаться; формат csv, xlsx, xls).
Таблица переписи на сайте Росстата

Пример данных переписи населения для Белгородской области (в отличие от Нижегородской — пункт № 4, название совпадает):

Пример данных переписи
  1. Откройте скачанный файл и отредактируйте его следующим образом:
    • удалите «шапку»;
    • удалите строку 4, где указано «А 1 2 3 4 5»;
    • удалите колонку «В общей численности населения, процентов»;
    • добавьте название первой колонке.
Отредактированная таблица
Вопрос

Почему не обязательно хранить данные из удалённой колонки? Как это связано с процессом нормализации данных (лекция 3)?

подсказка

Проценты вычисляются из абсолютных значений («Мужчины и женщины», «Мужчины», «Женщины») делением — это атрибут, выведенный из других атрибутов. Хранение вычислимых значений создаёт избыточность и риск рассогласования при обновлении — именно то, что устраняет нормализация.

  1. Полученный файл откройте в QGIS (без геометрии).
  2. Проверьте таблицу атрибутов; переименуйте слой в Rosstat.
Таблица атрибутов слоя Rosstat

Если при открытии файла csv вместо названий регионов стоят «нечитаемые» символы, воспользуйтесь следующей инструкцией:

Настройка кодировки при импорте CSV
  1. Экспортируйте таблицу (слой) в формате PostgreSQL SQL-дамп.
Экспорт слоя в SQL-дамп

При экспорте проверьте корректность типов данных (люди измеряются в целых числах! Если видите иной тип данных — проверьте таблицу и вернитесь к пункту 6):

Проверка типов данных при экспорте
  1. При экспорте в поле «Геометрия» тип геометрии измените на «Без геометрии».
Экспорт без геометрии
  1. Создайте БД с именем «ВАШЕФИО_ОБЛ», например «LebedevED_Nizn».
  2. Импортируйте SQL-дамп (см. гиф): откройте pgAdmin → панель Query Tool → перенесите файл в панель и выполните код.
Импорт SQL-дампа в pgAdmin
  1. Отобразите содержимое таблицы Rosstat.
  2. Посчитайте, сколько у вас NULL-значений.
  3. Удалите все строки, содержащие NULL-значения одновременно в трёх колонках.
  4. Выведите таблицу после удаления.

Состав отчёта: часть 1

  1. Дайте краткую справку региону, который вы выбрали.
  2. Опишите данные Росстата, которые вы берёте. Приложите ссылку на сайт Росстата региона.
  3. Покажите исходную таблицу в Excel (назовите «Рис. 1. Исходные данные»).
  4. Опишите процесс нормализации таблицы (дополните «Рис. 2. Нормализованная таблица»).
  5. Опишите, какая таблица была создана в Postgres. Приведите код для создания таблицы и первые 5 вставленных строчек командой INSERT INTO. Назовите это «Листинг 1. Создание и наполнение таблицы {ваше название таблицы}». Соблюдайте цветовую разметку!
Пример · Листинг 1. Создание и наполнение таблицы
CREATE TABLE "public"."rosstat"();
ALTER TABLE "public"."rosstat"
ADD COLUMN "ogc_fid" SERIAL CONSTRAINT "rosstat_pk" PRIMARY KEY;
ALTER TABLE "public"."rosstat" ADD COLUMN "Название области" VARCHAR;
ALTER TABLE "public"."rosstat" ADD COLUMN "Мужчины и женщины" NUMERIC(10,0);
ALTER TABLE "public"."rosstat" ADD COLUMN "Мужчины" NUMERIC(10,0);
ALTER TABLE "public"."rosstat" ADD COLUMN "Женщины" NUMERIC(10,0);
INSERT INTO "public"."rosstat" ("Название области", "Мужчины и женщины", "Мужчины", "Женщины")
VALUES ('Нижегородская область', 3119115, 1411929, 1707186);
  1. Покажите запрос и таблицу в pgAdmin (Листинг 2. Запрос для вывода таблицы; Рис. 3. «Таблица с данными в PostgreSQL»).
  2. Укажите, сколько NULL-значений существует в таблице (Листинг 3. Запрос для вывода NULL-значений).
  3. Удалите все строки, содержащие NULL в трёх и более столбцах (Листинг 4. Запрос для удаления пустых строк).
  4. Рис. 4. Таблица после выполнения запроса.
Пример · Листинг 4. Запрос для удаления пустых строк
DELETE FROM your_table_name
WHERE "Мужчины и женщины" IS NULL AND "Мужчины" IS NULL AND
"Женщины" IS NULL;
Примечание Следите, чтобы названия колонок были в двойных кавычках (""), а текст — в одинарных ('')! Иначе запрос не будет выполняться!
Чек-лист отчёта · часть 1

Часть 2. Границы из OpenStreetMap

Методические указания (как делать)

  1. Установите плагин QuickOSM для QGIS для загрузки векторных данных (Модули → Управление модулями → поиск QuickOSM).
Установка QuickOSM
Примечание QuickOSM позволяет выгружать любые данные из OpenStreetMap сразу в проект без ограничений на размер территории выгрузки.
  1. После установки найдите новый инструмент в разделе Вектор → QuickOSM → QuickOSM.
Инструмент QuickOSM
  1. OSM предполагает запросы с использованием атрибутов. Выберем атрибут admin_level = 6 в границах выбранного вами субъекта РФ.
Запрос admin_level=6 в QuickOSM
Примечания

1. Атрибут admin_level описывает границы на разных административных уровнях — от страны до города. Имеет значения от 2 до 10, где 2 — границы страны, 10 — городских поселений.

2. Если после нажатия на «Выполнить запрос» ничего не произошло — проверьте правильность правописания субъекта РФ!

  1. Полученные данные загружены как «временные слои». Сохраните их (ПКМ по слою → Сохранить на диск → *.shp или любой иной формат).
Сохранение временных слоёв
  1. Откройте таблицу атрибутов векторного полигонального слоя.
  2. Нажмите кнопка редактирования для редактирования.
  3. Нажмите кнопка удаления полей для удаления лишних полей.
Удаление лишних полей
Примечание Вам необходимо оставить full_id, osm_id, name, official_name; остальные поля удалить.
  1. Сохраните изменения, закончив редактирование (нажмите кнопка редактирования и сохраните).
  2. Настройте проекцию проекта: выберите подходящую зону Гаусса — Крюгера. Например, для Нижегородской области EPSG:20008 — Pulkovo 1995 / Gauss-Kruger zone 8.
  3. Проведите операции над линейным и точечным слоем.
  4. Переименуйте слои: «Границы ИМЯ_СУБЪЕКТА_РФ», «Районы ИМЯ_СУБЪЕКТА_РФ» и «Административные центры ИМЯ_СУБЪЕКТА_РФ».
  5. Экспортируйте все данные в формате SQL-дампа.
Экспорт слоёв в SQL-дамп
  1. Загрузите данные подобно прошлому заданию (пункт 10 части 1).
  2. Выполните запрос, использовав JOIN для соединения таблиц Rosstat и «Районы ИМЯ_СУБЪЕКТА_РФ»:
Шаблон запроса
SELECT *
FROM ROSSTAT
JOIN "Районы ИМЯ_СУБЪЕКТА_РФ"
ON ROSSTAT.name = "Районы ИМЯ_СУБЪЕКТА_РФ".name
Примечание Следите, чтобы названия колонок были в двойных кавычках (""), а текст — в одинарных ('')! Иначе запрос не будет выполняться!
  1. Визуализируйте результат (оранжевый — результат запроса, бежевый — все районы):
Визуализация результата JOIN
Вопрос

Почему не получилось «соединить» все данные?

подсказка

JOIN сопоставляет строки по точному совпадению названий, а написание районов в файле Росстата и в OSM отличается: «Городской округ город Бор» против «городской округ Бор», буква ё, кавычки, сокращения. Строки без точного совпадения в результат INNER JOIN не попадают.

  1. Откройте ранее скачанный файл Росстата и сформируйте новую таблицу на его основе:
    • выберите только районы из списка «Районы ИМЯ_СУБЪЕКТА_РФ»;
    • обратите внимание, что в файле Росстата имена могут отличаться — скорректируйте их;
    • городское и сельское население вынесите в отдельные таблицы;
    • для районов используйте OSM_ID.

Пример:

Таблицы городского и сельского населения
  1. Полученные таблицы сохраните в формате .csv (.xlsx, .xls).

Состав отчёта: часть 2

Примечание Часть 2 продолжается в том же файле после части 1.
  1. Напишите характеристику порталу OSM. Опишите, какие данные там можно получить.
  2. Укажите параметры запроса для QuickOSM. Добавьте таблицу с описанием значений admin_level. Добавьте «Рис. 5. Результаты запроса».
  3. Добавьте запрос для вывода векторного слоя районов субъекта РФ (Листинг 5). Покажите результат запроса.
  4. Объясните операцию JOIN. Укажите, по какому атрибуту производится соединение и почему. Добавьте запрос в виде Листинга 6. Добавьте визуализацию всех районов субъекта РФ и результатов соединения.
  5. Объясните, почему возникла проблема. Опишите принципы нормализации ко 2НФ. Таблицы «Общее население», «Городское население» и «Сельское население» вставьте в конец файла и назовите «Приложение А.1», «Приложение А.2», «Приложение А.3» соответственно.
Чек-лист отчёта · часть 2

Часть 3. Соединение и картографирование

Методические указания (как делать)

  1. Загрузите *.csv с населением по вашему субъекту РФ в базу данных (файлы были сделаны в конце прошлой части).
  2. Для загрузки новых таблиц можно пользоваться «Менеджером БД»:
    • Базы данных → Менеджер БД;
    • раскройте вашу БД → из списка выберите public (одним щелчком) → затем нажмите Импорт слоя/файла;
    • выберите параметры импорта (какой слой, в какую базу данных, как назвать таблицу).
Примечание Чтобы QGIS понял, в какую БД импортировать данные, вы должны выбрать БД из списка: раскройте PostGIS → раскройте выбранную БД → выберите public (он загорится синим цветом).
Импорт слоя через Менеджер БД
  1. Отобразите полученные таблицы при помощи запроса SELECT и выведите как слои QGIS.
  2. Чтобы соединить таблицу с векторным слоем, нажмите ПКМ по «Районы ИМЯ_СУБЪЕКТА_РФ»: выберите вкладку «Связи», нажмите на «+», установите связь между слоем и таблицей по атрибуту OSM_ID.
Связь слоя и таблицы по OSM_ID
Примечание Вкладка «Связи» работает аналогично оператору JOIN — только вместо ручного запроса вы используете графический интерфейс.
  1. В поле «Присоединяемые поля» выберите все поля, кроме OSM_ID.
  2. Повторите операцию для всех трёх таблиц (Общее население, Городское население, Сельское население).
  3. Измените стиль отображения слоя, подобрав шкалу:
    • выведите сформированный слой при помощи оператора JOIN;
    • нажмите ПКМ по слою и перейдите в раздел «Свойства»;
    • выберите вкладку «Стиль».
Свойства слоя, вкладка Стиль
  1. Измените стиль отображения с «Простой символики» на «Символизация по диапазонам значений».
Символизация по диапазонам значений
  1. Настройте карту для отображения общего состава населения.
  2. Шкалу и количество классов настройте по своему усмотрению, исходя из правил картографического отображения (методы классификации разобраны в практике 9).
Карта общего населения
  1. Перейдите во вкладку «Диаграммы» (ПКМ по слою → Свойства → Диаграммы):
    • выберите «Круговая диаграмма»;
    • нажмите на ε и вычислите долю городского населения (поделите городское население на общее и умножьте на 100);
    • нажмите на ε и вычислите долю сельского населения (аналогично);
    • подберите контрастные цвета для отображения.
Настройка круговых диаграмм
  1. При необходимости настройте размер круговых диаграмм (никакая диаграмма не должна выходить за пределы границ районов).
Настройка размера диаграмм

Пример — фрагмент карты Нижегородской области:

Фрагмент карты с диаграммами
  1. Проведите компоновку карты.
  2. Проект → Менеджер макетов → Создать → «Область Фамилия».
Менеджер макетов
  1. Добавьте карту на холст (холст направьте горизонтально или вертикально в зависимости от протяжённости области).
Карта на холсте макета
  1. Добавьте рамку.
Рамка макета
  1. Добавьте герб региона. Добавьте масштаб.
Герб и масштаб на макете
  1. Итоговый макет экспортируйте в изображение.
Экспорт макета в изображение

Состав отчёта: часть 3

Примечание Часть 3 продолжается в том же файле после части 2.
  1. Опишите все атрибуты внутри ваших таблиц в формате:
    Таблица "Рейсы"
    Код рейса (первичный ключ)
    Номер рейса (Числовой, длинное целое)
    Аэропорт вылета (Текстовый, 20)
    Аэропорт назначения (Внешний ключ, ссылается на таблицу "Аэропорты назначения")
    Продолжительность полета (Временной)
    Цена билета (Денежный, в рублях)
  2. В виде схемы отобразите соединения между имеющимися таблицами (можно воспользоваться сервисом dbdiagram.io). Представьте в виде «Рис. 6».
  3. Покажите таблицу атрибутов слоя «Районы ИМЯ_СУБЪЕКТА_РФ» после соединения.
  4. Из документации QGIS выпишите, чем отличаются алгоритмы формирования шкал. Посмотрите, какой из алгоритмов и со сколькими классами вам подойдёт. Полученную шкалу «округлите»: ступень от 999 до 1793 целесообразно для лучшего восприятия превратить в «от 1000 до 1800» (или от 1000 до 2000).
  5. Дайте «Рис. 7», «Рис. 8» и «Рис. 9» для иллюстрации разных параметров автоматической генерации.
  6. Приведите итоговую шкалу и карту на «Рис. 10».
  7. Полученную карту проанализируйте (есть ли закономерности в распределении населения?). Опишите результаты пространственного анализа.
  8. Добавьте «Рис. 11» — карту с картодиаграммами соотношения городского населения. Проведите пространственный анализ посредством визуального изучения.
  9. Сделайте запрос к БД, который сформирует таблицу с долями городского и сельского населения по административным районам. Добавьте эту таблицу в «Приложение А.4».
  10. «Рис. 12» — добавьте итоговый макет. Укажите масштаб.
Чек-лист отчёта · часть 3

Контрольные вопросы

Источники

  1. Итоги Всероссийской переписи населения 2020 года — Росстат : [сайт]. — URL: https://rosstat.gov.ru/vpn_popul (дата обращения: 18.08.2026).
  2. QuickOSM — QGIS Python Plugins Repository : [сайт]. — URL: https://plugins.qgis.org/plugins/QuickOSM/ (дата обращения: 18.08.2026).
  3. Карта OpenStreetMap : [сайт]. — URL: https://www.openstreetmap.org (дата обращения: 18.08.2026).
  4. dbdiagram.io — Database Relationship Diagrams Design Tool : [сайт]. — URL: https://dbdiagram.io/d (дата обращения: 18.08.2026).