Где жить в городе именно вам? Персонализированный сервис подбора идеальных домов

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Для кого-то это будет очередная…, а для другого — очередная! статья, посвящённая анализу качества городской среды. Попытаемся выяснить, в каких домах и районах города условия проживания более комфортные, а в каких — менее.

Так как тема не нова, важно сразу обозначить аспекты, которые не рассматривались в подобных проектах и статьях ранее и будут рассмотрены в этой статье:

  1. Анализ существующих методов изучения качества городской среды;

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

  3. Персонализация результата под потребности пользователя.

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

Молодой паре при выборе жилья зачастую не важно наличие рядом с домом школ, детских садов или поликлиник, а вот возможность быстро добраться до работы важна. А может быть, и это не важно — например, они работают удалённо. Тогда, быть может, главными критериями для них будет лишь наличие магазинов и зон зелёных насаждений. При этом широкий спектр магазинов — это важная потребность, а вот наличие территории с озеленением — средняя. Как учесть такие пожелания?

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

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

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

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

Таблица 1.1 – Пример рейтинга домов при стандартных коэффициентах
Таблица 1.1 – Пример рейтинга домов при стандартных коэффициентах

Таблица 1.2 демонстрирует рейтинг домов при коэффициенте, равном 1 для трёх из четырёх показателей, и коэффициенте 4 для показателя доступности школ. При таких значениях коэффициентов ранжирование домов в рейтинге изменилось, и дома с изначально высоким показателем доступности школ смогли подняться в списке. Теперь, по совокупности показателей и их значимости, наилучшим домом является дом под номером 4, а не под номером 3.

Таблица 1.2 – Пример рейтинга домов при изменённых коэффициентах
Таблица 1.2 – Пример рейтинга домов при изменённых коэффициентах

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

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

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

Если вы желаете ознакомиться с результатом сразу, переходите по ссылке — Где в Пушкино жить лучше? и пятому разделу «Итоговый web-сервис». Для подробностей же продолжайте чтение.

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

  1. Определение метода изучения
    1.1 Анализ существующих методов и их синтез
    1.2 Конкретизация времени для анализа
    1.3 Персонализация и итоговое формулирование метода

  2. Выбор показателей, влияющих на качество городской среды, и источников данных для их формирования

  3. Технические аспекты вычисления показателей
    3.1 Выбор навигационного движка
    3.2 Рассмотрение использования точек входа вместо центроидов
    3.3 Выбор способа построения зоны 15 минут
    3.4 Сравнение сервисов геокодирования

  4. Процесс создания показателей
    4.1 Доступность школ, детских садов, поликлиник, фитнес-центров, предприятий торговли и услуг
    4.2 Доступность прогулочных зон у воды
    4.3 Состояние жилищного фонда
    4.4 Доступность Ростокино
    4.4.1 Доступность остановки Ростокино на машине
    4.4.2 Доступность остановки Ростокино на автобусах
    4.4.3 Доступность железнодорожной станции Ростокино
    4.5 Загрязнённость воздуха

  5. Итоговый web-сервис

1. Определение метода изучения

1.1 Анализ существующих методов и их синтез

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

На Авито при просмотре конкретного объекта недвижимости возможно узнать лишь время пешком до трёх ближайших станций метро (если они есть в радиусе 30 минут). При просмотре же всех объявлений на карте получить конкретно эту информацию невозможно, но можно задать временной фильтр до ближайшей станции.

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

На Циане предлагается меньше категорий точек интереса (магазины, школы, детские сады, поликлиники), но зато их можно просмотреть не только в карточке конкретного объекта, но и на карте всех объявлений. Это предполагает возможность сравнения районов между собой путём визуального наблюдения плотности точек, но на деле прийти к каким-либо выводам по этой информации крайне затруднительно.

Сервисы Авито, Домклик и Циан
Сервисы Авито, Домклик и Циан

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

  1. Слой «Школы и их рейтинг» доступен только для Москвы и содержит информацию о местоположении школ и их месте в рейтинге;

  2. Слой «Транспортная доступность» оценивает территории Москвы, Санкт-Петербурга и их областей от 1 до 9 баллов. Где 9 баллов означает, что до 50 наиболее популярных точек в городе среднее время в пути составляет 30 минут для Москвы и 20 для Питера, а 1 балл – более полутора часов. Что это за точки, естественно, не раскрывается. Придирку к выбору шкалы от 1 до 9, пожалуй, опущу;

  3. Слой «Инфраструктура» отображает наличие таких объектов, как магазины, рестораны, спортивные объекты, учреждения культуры и так далее. Шкала оценки от 1 до 8, где 1 означает полное отсутствие или наличие одного объекта, а 8 баллов — наличие 66 или более объектов в ячейке 250 на 250 метров. Почему в качестве порогового значения выбрано именно 66, неизвестно, как и то, учитывается ли разнообразие объектов. Да и чем обусловлен выбор квадратной ячейки в качестве области для исследования вместо более точных изохрон или хотя бы гексагонов, также совершенно не ясно.

Сервис Яндекс.Недвижимость
Сервис Яндекс.Недвижимость

При этом в более старом подходе компании:

  • точно сказано, что учитывается разнообразие объектов;

  • чётко определено количество объектов в области изучения (почти для всех категорий один объект);

  • областью изучения является не пространственная область (как квадрат сейчас), а временная: 10 или 15 минут;

  • присутствует персонализация территорий под запросы жителей: где комфортно жить, комфортно развлекаться или и то, и другое одновременно. На актуальной карте невозможно наложить друг на друга слой транспортной доступности и инфраструктуры для получения результирующего показателя.

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

Исследования Яндекса — Москва для жизни и для развлечений
Исследования Яндекса — Москва для жизни и для развлечений

На этом с сервисами по покупке недвижимости всё, перейдём к изучению научных статей. К сожалению, их оказалось не так много, и мне удалось найти лишь одну под названием «ГИС-технологии — современный помощник в подборе недвижимости» от коллектива авторов из Донского Государственного Технического Университета.

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

В качестве набора данных используется список актуальных объектов недвижимости в формате CSV. После отсеивания некорректных данных, авторы отбирают объекты по ценам и внутридомовым критериям, таким как количество комнат, площадь, цена и другие. Затем в рамках буферной зоны (размер которой не указан) выгружают точки интереса (образовательные учреждения, поликлиники, рестораны, парки и т. д.) и вычисляют время до предполагаемого места работы. Какой именно профиль (пешеходный, автомобильный или общественный транспорт) используется, не указано.
В качестве заключительного этапа авторы предлагают учесть пожелания пользователя и присвоить желаемым критериям, в том числе категориям точек интереса, коэффициенты. При этом в статье отмечено, что использование коэффициентов уместно только при переводе всех численных значений критериев в единый диапазон, например, от 0 до 1. По итогам полученных баллов формируется шорт-лист объектов для создания контентной фильтрации.

ГИС-технологии — современный помощник в подборе недвижимости. Этап присвоения коэффициентов
ГИС-технологии — современный помощник в подборе недвижимости. Этап присвоения коэффициентов

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

  • использование в качестве данных для исследования лишь объектов из актуальных объявлений, а не всех строений;

  • использование буферных зон вместо анализа по времени;

  • проведение анализа с использованием проприетарного ArcGIS API for Python;

  • отсутствие итогового результата, доступного пользователю.

Исследования, посвящённые поиску наиболее комфортных мест для проживания в городе, не обошли стороной и Хабр.

Одним из авторов, исследующих эту тему, является пользователь @igor_suhorukov. В своём дальнейшем рассказе я буду опираться на две его популярные статьи: «Где бы вы точно не жили и не остановились даже на время, если бы знали и выбирали на основе фактов» и «Где в Москве жить „неплохо“». Возможно, в других, более актуальных статьях подход несколько изменился, но именно эти две мне показались основополагающими. Также, возможно, я буду неточен в том, как именно автор обобщал информацию, ибо за техническим описанием порой не всегда удавалось проследить ход мысли автора. При возникновении таких случаев меня, благо, может поправить сам автор в комментариях.

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

В первой публикации под названием «Где бы вы точно не жили и не остановились даже на время, если бы знали и выбирали на основе фактов» целью автора является поиск домов, удалённых более чем на 200 метров от ряда мест, выбранных им как неблагоприятные, и разбитых по следующим категориям: качество воздуха, промышленность, уровень шума, комары.

Количество объектов в радиусе от дома записывалось в его свойства, а после полученные значения обобщались по гексагональной сетке с ребром в 53 метра. Однако автора не устроило усреднение по гексагональной сетке (честно говоря, я не до конца понял чем, наверное некорректностью обобщения), и в своей следующей публикации «Где в Москве жить „неплохо“» он решил группировать дома по кластерам, используя встроенную в PostGIS функцию ST_ConcaveHull. Однако эти кластеры выглядят странно, так как могут охватывать только часть дома или не включать очевидно напрашивающиеся строения.

Где в Москве жить «неплохо». Примеры кластеров домов
Где в Москве жить «неплохо». Примеры кластеров домов

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

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

Более ориентированное на практический выбор жилья исследование провела команда, о результатах работы которой на Хабре рассказывала @Serine. Под её авторством было написано две статьи: «Человейник, тебе меня не сломить! Анализ жилья в мегаполисе» и ныне удалённая, но сохранённая в Wayback Machine «Незримая школа, резиновая поликлиника. Препарируем магию городской инфраструктуры». Первая статья посвящена вычислению процента плотности застройки, и дополнить или прокомментировать мне её нечем.

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

  1. Присвоение объектам баллов значимости от 0 до 1;
    Детально этот этап не расписан, представлена лишь общая логика, что, например, небольшой ларёк получит мало баллов, местный магазин — побольше, сетевой супермаркет — ещё больше;

  2. Выбор объектов инфраструктуры в радиусе 1,5 км для каждого дома, прокладывание до них пешеходных маршрутов с помощью навигационного движка Valhalla, отсев объектов, время в пути до которых превышает 15 минут;

  3. Присвоение объектам в зоне 15 минут баллов от 0 до 1 в зависимости от времени до них от дома, исходя из логики, что 0 баллов — объект на окраине зоны, 1 балл — объект в доме или рядом с ним. Полученные баллы формируют коэффициент доступности;

  4. Определение суммарного веса инфраструктурных объектов;
    вес одного объекта для каждого дома = коэффициент значимости объекта + коэффициент доступности объекта. После веса отдельных объектов складываются в итоговый вес инфраструктуры возле дома;

  5. Вычисление коэффициента диверсификации объектов, исходя из наличия объектов различных категорий. Например, если в 15 минутах есть только поликлиника и аптека, то коэффициент диверсификации будет 2 из 5;

  6. Получение итогового значения шаговой доступности путем умножения суммарного веса инфраструктуры на коэффициент диверсификации.

Представленный метод мне показался наиболее комплексным из всех ранее рассмотренных и был взят в качестве ядра для анализа подобных типов объектов.

1.2 Конкретизация времени для анализа

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

Первым делом были изучены «Нормы и правила проектирования планировки и застройки Москвы МГСН 1.01-99», утвержденные постановлением от 25 января 2000 г. № 49. К сожалению, актуальная версия не содержит информации о временных правилах размещения объектов инфраструктуры. В связи с этим была изучена 12-я редакция норматива, в которой такие сведения имелись. В ней объекты инфраструктуры делились на объекты приближенного, повседневного и периодического обслуживания, для которых устанавливалась следующая пешая доступность: не более 300, 500 и 1200 м соответственно. Исходя из средней скорости пешехода, равной 5 км/ч, предлагаемые зоны можно перевести в минуты: 3,6 минуты, 6 минут, 14,4 минуты.

В таблице 8.1 рассматриваемого документа представлены объекты повседневного и периодического обслуживания, а в таблице 8.2 — приближенного. Как можно заметить из таблицы 8.1, требования по обеспеченности теми или иными объектами могут меняться в зависимости от их типа или вместимости.

Расчетные показатели минимальной обеспеченности социально значимыми объектами
Расчетные показатели минимальной обеспеченности социально значимыми объектами

Пытаясь понять, по каким критериям меняются требования к обеспеченности школ, в том же документе было сказано: «Детские дошкольные учреждения и школы общего типа следует проектировать в соответствии с МГСН 4.06-96 и МГСН 4.07-96. Потребность в дошкольных учреждениях и школах определяется для каждого жилого района в соответствии с демографической структурой населения на его территории, а также пешеходной доступностью соответственно до 300 и 500 м». Как можно заметить, зоны 500 и 1200 метров теперь сменились на 300 и 500.

Изучим также упомянутый ранее МГСН 4.06-96, и среди всего документа найдём лишь значения, ещё больше сбивающие с толку: «4.12. Радиусы обслуживания от дома до общеобразовательного учреждения определяются максимальным временем доступности: начальных классов — 10–15 мин. пешком, средних классов — 30 мин., старших классов — 45 мин. пешком или транспортом».

В связи с неактуальностью редакции изучаемого документа, но с наличием в нём норм временных зон, был произведён поиск других нормативных документов. Так, в действующем постановлении от 21 декабря 2021 года N 2151-ПП «Об утверждении нормативов градостроительного проектирования города Москвы в области образования» установлен максимально допустимый уровень территориальной доступности школ и детских садов. Согласно таблицам 1.4.1 и 1.4.2, для школ он равен 500 и 750 метрам или 15 и 20 минутам в зависимости от района и типа застройки. Для детских садов — 300 и 500 метров, 15 и 20 минут соответственно.

Что касается Московской области, то был найден лишь один регламентирующий документ, а именно постановление от 17 августа 2015 года N 713/30 «Об утверждении нормативов градостроительного проектирования Московской области», в пункте 6.2. которого сказано, что для школ и детских садов пешеходная доступность от жилых зданий должна быть не более 500 м, в условиях стеснённой городской застройки и труднодоступной местности — 800 м, для сельских населённых пунктов — до 1 км.

Таким образом, было выяснено, что изучаемая временна́я зона:

  • зависит от типа и компактности застройки;

  • меняется от субъекта РФ и даты выпуска документа;

  • может различаться в рамках одного документа;

  • разнится для разных категорий объектов.

В связи с этим было решено выбрать единое значение для всех изучаемых объектов, которое составило 15 минут. Данное значение основано на максимальном времени, встречающемся в документах (за исключением Троицкого административного округа, плотность населения которого явно не городская), а именно 14,4 минут, а также концепции 15-минутного города.

1.3 Персонализация и итоговое формулирование метода

Временна́я зона исследования выбрана, существующие методы изучены, своя идея для доработки присутствует, а значит, можно синтезировать всё это в итоговый метод изучения качества городской среды с возможностью персонализации результатов:

  • для показателей жизни, связанных с ближайшей доступностью объектов, будет использован следующий метод:

    • для каждого жилого дома по графу дорожной сети определяется зона пешей доступности в 15 минут;

    • в рамках этих 15-ти минут дому начисляются баллы в зависимости от количества и удалённости объектов. Если объект в зоне 1-й минуты — это максимальный балл, если в зоне 15-й минуты — минимальный балл. После этого баллы всех объектов в радиусе 15 минут суммируются и присваиваются дому;

    • полученные для каждого из домов баллы переводятся в унифицированную шкалу от 1 до 100 (это необходимо для возможности совмещения разных показателей между собой);

  • для показателей, не основанных на изучении объектов в пешеходной близости:

    • наиболее подходящими методами вычисляются интересующие значения;

    • полученные значения приводятся к унифицированной шкале от 1 до 100;

  • на основе полученных показателей и применяемых к ним коэффициентов значимости, задаваемых пользователем сайта, рассчитывается итоговый персонализированный показатель уровня жизни. Шкала значений итогового показателя также от 1 до 100.

Рассмотрим последний пункт более подробно. Сначала для каждого дома вычисляется балл по следующей формуле:

Или если сократить запись:

где:

  • score_i — балл дома (в диапазоне от 1 до 100) за i-ый показатель (например, доступность школ, доступность поликлиник, состояние жилищного фонда и т.д.);

  • k_i — коэффициент значимости i-го показателя, задаваемый пользователем от 0 до 10, где 0 — показатель не учитывается, 1 — стандартное значение, 10 — максимальное возможное значение. Принцип влияния этих коэффициентов на итоговый результат рассматривался во введении;

  • n — количество учитываемых показателей.

Поскольку в зависимости от количества учитываемых показателей и применяемых к ним коэффициентов полученное суммарное значение (indicators_score) может менять свой диапазон от 1 – 100 (один показатель с коэффициентом 1) до, например, 140 – 14000 (14 показателей при коэффициентах 10), следующим шагом вновь выполняется перевод полученных значений в шкалу от 1 до 100.
Если ранее приведение к такой шкале было необходимо для унификации показателей между собой, то в данном случае этот шаг производится для удобства восприятия пользователем полученных результатов, а также для постоянства внешнего вида условных обозначений. Данный перевод выполняется по формуле:

где:

  • indicators_score — балл дома за все показатели;

  • indicators_min — минимальное значение indicators_score среди всех домов;

  • indicators_max — максимальное значение indicators_score среди всех домов;

  • summary_score — итоговый показатель качества городской среды.

Непрерывная шкала значений итогового показателя
Непрерывная шкала значений итогового показателя

2. Выбор показателей, влияющих на качество городской среды, и источников данных для их формирования

На основе потребностей жителей любого города, особенностей проживания в городе Пушкино и наличия данных для анализа был определён и рассчитан следующий список показателей:

  1. Загрязнённость воздуха;
    Источник данных — посты экомониторинга с Геопортала Подмосковья;

  2. Доступность государственных школ;

  3. Доступность государственных детских садов;
    Источники данных для пунктов 2 и 3 — официальные сайты образовательных комплексов и Геопортал Подмосковья. Эти источники выбраны из-за неполноты данных в OpenStreetMap, в том числе отсутствие разделения на частные и государственные учреждения, и желания сделать эти показатели максимально подробными;

  4. Доступность государственных и частных поликлиник;

  5. Доступность предприятий торговли и услуг;

  6. Доступность фитнес-центров;

  7. Доступность прогулочных зон у воды (под этим показателем понимаются места, в которых можно совершать городскую прогулку вдоль воды. Под городской прогулкой подразумевается наличие благоустройства вдоль береговой линии реки или озера. Отбор таких участков происходил в ручном режиме);
    Источник данных для пунктов 4, 5, 6, 7 — OpenStreetMap;

  8. Состояние жилищного фонда;
    Источники данных для пункта 8 — Публичная кадастровая карта, Реформа ЖКХ и OpenStreetMap;

  9. Доступность остановки Ростокино на машине;

  10. Доступность остановки Ростокино на автобусах;
    Источник данных для пункта 10 — Расписание Мострансавто.

Ростокино в данном случае представляет Москву, сообщение с которой крайне важно для жителей любого подмосковного города. Выбрано именно Ростокино, поскольку оно является единственным местом, возможным для проведения анализа с технической точки зрения, о чём более подробно будет сказано в подразделе «Доступность Ростокино».

Также были определены, но не были рассчитаны (возможно, это изменится в будущем) следующие показатели:

  1. Доступность железнодорожной станции Ростокино (о причинах неудачи написано в одноимённом пункте подраздела 4.4);

  2. Густота зон зелёных насаждений (самостоятельное определение по спектральным индексам или использование готовых наборов данных, например, этого);

  3. Тишина улиц (планировалось использовать исторические данные с GPS-треков, предоставляемых на Народной карте Яндекса, но с 22.03.2024 эти данные больше недоступны. Так что из вариантов остаётся только использование количества полос и типов автодорог или более комплексные подходы, например, решение от Urbica);

  4. Частота ДТП (использование данных с Карты ДТП).

Как было упомянуто во введении, город Пушкино имеет значительный частный сектор, проблемы с неполнотой данных которого для OpenStreetMap не редки. Само собой, на это можно было бы закрыть глаза и делать на основе того, что есть, однако всё же хотелось сделать качественно. Единственным вариантом (про Overture Maps я тогда не знал), откуда ещё можно было взять геометрию строений, была Публичная кадастровая карта.

Сравнение данных в частном секторе
Сравнение данных в частном секторе

Возник вопрос о легальности использования данных ПКК для своих нужд. Первым делом был изучен сайт Росреестра и самой ПКК, однако хоть чего-то схожего с условиями использования на них обнаружено не было. Единственная подходящая информация была найдена на странице Wiki OSM, посвящённой ПКК. Согласно ей, все данные, в том числе здания, находящиеся в группе «Общедоступные сведения, содержащиеся в ЕГРН», можно распространять и использовать без ограничений. И хоть изначально Публичная кадастровая карта рассматривалась лишь как источник геометрии строений, впоследствии атрибутивная информация этих строений составила бо́льшую часть информации, использованной при составлении показателя состояния жилищного фонда.

Во избежание нарушений правил использования данных были также изучены условия использования Геопортала Подмосковья, которые легко найти на официальном сайте. Из них следует, что: «В составе РГИС реализована публичная часть, содержащая базовые и открытые данные, которые доступны любому пользователю в порядке, установленном федеральным законодательством и законодательством Московской области». Обратимся к постановлению Правительства Московской области от 30.01.2017 № 49/3 «О РГИС», из пункта VI которого выясним, что закрытыми являются только те данные, которые можно получить, имея учётную запись. Остальные являются открытыми.

Данные Реформы ЖКХ, ныне данные ФРТ (Фонда развития территорий), размещены в разделе «Открытые данные», из чего следует, что их также можно использовать в своих нуждах с выполнением требования по указанию источника. Удостовериться в этом можно в документе «Типовые условия использования общедоступной информации, размещаемой в информационно-телекоммуникационной сети «Интернет» в форме открытых данных».

3. Технические аспекты вычисления показателей

3.1. Выбор навигационного движка

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

Основной принцип работы навигационных движков заключается в использовании графовой структуры дорожной сети, где узлы представляют собой перекрёстки или важные точки, а рёбра — дороги или пути между ними. Движки используют различные алгоритмы, такие как Dijkstra, A* и другие, чтобы находить оптимальные маршруты на этом графе. Современные движки также могут учитывать множество факторов, включая ограничения скорости, пробки, типы дорог и другие параметры, чтобы предлагать наиболее точные и эффективные маршруты.

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

Поскольку точность большинства показателей зависит от результатов, предоставляемых навигационным движком, необходимо ответственно подойти к его выбору, выявить сильные и слабые стороны и на их основе выбрать наиболее подходящее решение. Мною были рассмотрены следующие наиболее популярные навигационные движки или сервисы, предоставляющие подобные услуги:: Valhalla, Graphhopper, Openrouteservice, Open Source Routing Machine (OSRM), pgRouting, Mapbox Navigation, API Яндекс.Карт.

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

Сравнительная таблица общих аспектов использования различных навигационных движков
Сравнительная таблица общих аспектов использования различных навигационных движков

Перед проведением собственного практического сравнения, само собой, были изучены и ранее проведённые. Наиболее комплексное описано в публикации «Open Source Routing Engines And Algorithms — An Overview». В ней рассмотрено множество аспектов: производительность, возможности настройки, варианты использования и многое другое, однако не уделено внимание точности возвращаемых результатов.

Среди перечисленных вариантов перед собственным практическим сравнением были отброшены: API Яндекс.Карт ввиду необходимости оплаты, pgRouting ввиду отсутствия должного опыта работы с PostGIS и OSRM ввиду необходимости самостоятельной локальной установки.

Далее я убедился, что у всех движков стандартная скорость пешехода одинакова и равна 5,1 км/ч, и с помощью демо-страниц построил 3 пешеходных и 4 автомобильных маршрута разной сложности и продолжительности, сравнил полученные результаты между собой. В качестве эталона использовался сервис Яндекс.Карты. Основные критерии сравнения: соответсвие времени и пути маршрута, а для автомобильного профиля — сравнение значений в условиях наличия пробок и их отсутствия.

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

Результат получился следующий:

Результат практического сравнения различных навигационных движков
Результат практического сравнения различных навигационных движков
Полная сравнительная таблица для интересующихся

По таблице видно, что API Mapbox предоставляет наилучшие результаты в обоих случаях. При построении маршрутов на машине особенно хорошо работает вариант с учётом трафика. На втором месте располагается Valhalla. Openrouteservice также показывает хорошие результаты, но только при построении пешеходных маршрутов.

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

Сравнение изохрон, построенных изучаемыми сервисами
Сравнение изохрон, построенных изучаемыми сервисами

Как можно заметить, с задачей обхода железнодорожных путей при стандартной генерализации полигонов изохрон лучше всего справился Openrouteservice, затем Mapbox, Valhalla и GraphHopper. С обходом Ярославского шоссе: Openrouteservice, GraphHopper (но он сильно покрывает водное пространство), затем одинаково Mapbox и Valhalla. У Openrouteservice, несмотря на хорошие показатели обхода таких препятствий, как железнодорожные пути, автомагистраль и река, присутствует проблема с сильным сглаживанием полигона, из-за чего значительно расширяется зона доступности. Попытка изменить значение параметра сглаживания ни к каким изменениям не привела.

По результатам собственного сравнения можно сделать следующий вывод:

  • для построения пешеходных маршрутов и изохрон можно использовать как Mapbox, так и Valhalla или Openrouteservice. Их результаты практически идентичны, с незначительным перевесом у Mapbox;

  • для построения пешеходных изохрон следует использовать Mapbox или Valhalla, их результаты идентичны;

  • для построения автомобильных маршрутов следует отдать предпочтение Mapbox. При возникновении сложностей с ним можно воспользоваться Valhalla.

Исходя из всего изученного, было решено воспользоваться Valhalla. Да, автомобильные маршруты он строит хуже Mapbox, но в моём анализе они пригодятся только для двух показателей. Зато у него нет абсолютно никаких ограничений в месяц и за одну операцию (а в одной из матриц у меня получилось 7 млн строк), а также имеется удобный для меня способ взаимодействия через модуль в QGIS.

3.2 Рассмотрение использования точек входа вместо центроидов

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

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

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

  1. Для объектов, у которых есть точка с entrance=main (главный вход), использовать её;

  2. Если такой точки нет, но есть с entrance=yes, использовать её;

  3. Если нет никаких точек входа, создавать центроид.

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

Детский сад из двух зданий
Детский сад из двух зданий

То вот корпуса поликлиник в большинстве случаев не связаны между собой, а их количество может превышать десятки (например, МОНИКИ). В таком случае возникает вопрос: для какого из зданий выбрать точку входа?
Конечно, можно попробовать перенести эту логику со строений на территорию. Однако если в зданиях подобных объектов тег entrance=main в большинстве случаев обозначает не просто главный, а скорее всего единственный действительно доступный вход, и тег entrance=yes — это редко используемый вход для каких-то специфичных целей. Случаи, когда в школу или поликлинику можно войти с нескольких действительно предназначенных для этого входов, единичны.
То с территорией дела обстоят иначе. Действительно, например, у школы может быть парадный вход, но только вот в глазах учащихся этот вход с точки зрения возможности прохода ничем не отличается от наиболее удобной непарадной калитки. Следовательно, использование входа на территорию с тегом entrance=main не является корректным выбором точки реального входа. Использование любой ближайшей для дома точки входа на территорию также не имеет смысла, так как сама школа не обязательно равноудалена от них. А если так, то единственное, что остаётся — это использовать центроид территории.

3.3 Выбор способа построения зоны 15 минут

Используя средства Valhalla или любого другого движка для маршрутизации, есть несколько вариантов как можно определить вхождение объектов в зону 15 минут:

  1. Построение изохрон — линий, соединяющих точки, достижимые за равные отрезки времени;

  2. Прокладывание маршрутов от начальных до конечных точек;

  3. Построение матрицы кратчайших расстояний между начальными и конечными точками.

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

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

Итак, было рассмотрено три варианта определения зоны 15 минут для каждого дома:

  1. Расчёт матрицы расстояний сразу для всех домов и предприятий.
    Построение пешеходной матрицы посредством использованием модуля Valhalla для QGIS заняло 50 минут и вернуло 7 008 000 строк.

  2. Расчёт матрицы по очереди для каждого дома.
    Для каждого дома отбирались объекты в радиусе 1,3 км (средняя скорость человека по умолчанию в маршрутизаторах равна 5,1 км/ч, а значит за 15 минут человек пройдёт 1,275 км; выбрано округлённое значение). После для них и выбранного дома рассчитывалась матрица расстояний. Процесс был зациклен и выполнялся скриптом на PyQGIS. За 25 минут выполнения скрипта обработалось всего 500 домов, следовательно, для 5840 домов процесс занял бы 5 часов.

  3. Построение изохрон и выбор объектов в них.
    Рассматривался также вариант, когда для каждого дома строились изохроны. Однако, поскольку мы выполняем операции с построением геометрии, это занимает очень много времени. За один запрос Valhalla может вернуть только 4 интервала изохрон. Таким образом, для построения 15-ти минутных зон потребуется 4 запроса. Построение изохрон для 500 домов с 4 временными зонами (5, 7, 10, 15 минут) заняло 500 секунд. Следовательно, если для 5840 домов выполнить по 4 запроса, то это займёт 23360 секунд, что равняется 6,5 часам.

Таким образом, для выполнения анализа близости предприятий торговли и услуг различными способами потребовалось:

  1. 50 минут;

  2. Порядка 5 часов;

  3. Порядка 6,5 часов.

В результате сравнения было решено воспользоваться способом №1.
Однако, несмотря на очевидное преимущество первого подхода с точки зрения времени, стоит отметить, что подход №2 значительно надёжнее. При неожиданном прерывании операции её можно продолжить с необходимого дома, а не начинать заново, как в случае с построением всей матрицы за раз. Текущую же производительность вполне вероятно можно повысить, как путём использованием других алгоритмов QGIS, так и с помощью сторонних Python библиотек и отправкой запроса напрямую Valhalla API, а не процессу из модуля QGIS. В таком случае, особенно при работе с более крупным городом, вариант №2 может оказаться более предпочтительным.

3.4 Сравнение сервисов геокодирования

Геокодирование (определение географических координат объекта по его названию или адресу) было необходимо для использования открытых данных Фонда развития территорий, также известных как данные Реформы ЖКХ, предоставляемых в табличном формате и без указания координат. Среди различной информации, содержащейся в наборе, были необходимы данные о годе и материалах постройки. По аналогии с навигационными движками, сначала были изучены общие аспекты использования различных сервисов геокодирования, а затем проведено их практическое сравнение.

Сравнительная таблица общих аспектов использования различных сервисов геокодирования
Сравнительная таблица общих аспектов использования различных сервисов геокодирования

Среди перечисленных сервисов были отобраны те, что имеют бесплатный доступ или подходящие лимиты и разрешают сохранять данные, а также сервис DaData ввиду своей невысокой цены. Всего получилось 10 сервисов. Для определения наилучшего сервиса результаты их геокодирования сравнивались на основе знаний местных условий, просмотра панорам и первого результата геокодирования в Яндекс.Картах. В тесте использовалось 15 адресов по всему городу. Для четырёх сервисов, показавших наилучшие результаты, ниже приведены итоговые результаты сравнительной таблицы.

Результаты практического сравнения различных сервисов геокодирования
Результаты практического сравнения различных сервисов геокодирования

Результат в половину адресов от GraphHopper меня не устраивал, и было решено изменить структуру названий адресов в исходной таблице с данными Реформы ЖКХ под формат адресов OpenStreetMap и, соответственно, воспользоваться сервисом геокодирования, используемым OSM в качестве поисковой системы, а именно Nominatim.

Python-скрипт для нормализации адресов данных Реформы ЖКХ
import pandas

data = pandas.read_excel("your_table.xlsx")

addresses = data["address"]
def format_address(address):
    address = address.replace("обл. Московская, р-н. Пушкинский, г. ", ""
    address = "Московская область " + address
    address = address.replace("проезд.", "проезд").replace("ул.", "улица").replace("мкр.", "микрорайон").replace("пер.", "переулок").replace("пр-кт.", "проспект")
    address = address.replace("д. ", "").replace(" к. ", " к").replace(" стр. ", " с").replace(" лит. ", "")
    address = address.replace(",", "")
    if "шоссе" in address:
        address = address.replace("улица ", "")
    # Переименовываем локальные улицы
    address = address.replace("Л.Толстого", "Льва Толстого")
    # Перемещаем "проезд" после слова, оканчивающегося на "ый" или "ий", только если оно уже присутствует в адресе
    parts = address.split()
    if "проезд" in parts:
        index_proezd = parts.index("проезд")
        for i in range(index_proezd + 1, len(parts)):
            part = parts[i]
            if part.endswith("ый") or part.endswith("ий"):
                parts.insert(i + 1, "проезд")
                parts.remove("проезд")
                break
    return " ".join(parts)

data.insert(data.columns.get_loc("address") + 1, "address_nominatim", addresses.apply(format_address))

data.to_csv("your_table_nominatim.csv", index=False, float_format='%.0f')

По таблице с нормализованными адресами с помощью Nominatim нашлись все 15 адресов из 15. Из 871 адреса исходной таблицы: 671 был успешно геокодирован, 154 геокодированы с ошибками, для 46 не нашлось ни одного совпадения. В подавляющем большинстве случаев нахождение ошибочного адреса было связано с отсутсвием запрашиваемого на OSM.

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

4. Процесс создания показателей

4.1 Доступность школ, детских садов, поликлиник, фитнес-центров, предприятий торговли и услуг

Перечисленные в заголовке показатели относятся к группе показателей, связанных с ближайшей доступностью объектов. Эти показатели активно обсуждались во всём первом разделе, а метод их анализа сформулирован в подразделе 1.3. Как определять зону 15-ти минут для этих показателей было решено в подразделе 3.3. Для проставления баллов в рамках этой зоны воспользуемся SQL-запросом следующего вида:

SQL-запрос для проставления баллов по матрице расстояний
SQL-запрос для проставления баллов по матрице расстояний

Поскольку значения всех показателей в конечном итоге будут приведены к унифицированной шкале от 1 до 100, о чём также упомянуто в подразделе 1.3, значения присваиваемых баллов можно выбрать любые: от 0 до 1, от 1 до 100 или, как у меня, в зависимости от времени в минутах. Главное, чтобы шаг между ними был одинаковым.

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

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

Доступность школ в радиусе 15 минут
Доступность школ в радиусе 15 минут

Для исправления этой ситуации было решено изменить охват временной области изучения, установив для неё время более 15 минут. Для определения нового значения из пешеходной матрицы между всеми школами и всеми домами для каждого дома выбиралась школа, до которой можно добраться за минимальное время, и среди полученных пар дом – школа выбиралось наибольшее время. Для школ, например, это значение составило 55 минут. То есть в пределах 55 минут для каждого дома в 100% случаев будет хотя бы одна школа.

Можно было бы использовать и весь диапазон, полученный в исходной матрице, от 0 минут до 3,5 часов. Но это ведёт к ещё большему усреднению между домами, вокруг которых 5 школ находятся близко и 30 далеко, и домами, где все 35 школ на среднем расстоянии.

Доступность школ в радиусе 55 минут
Доступность школ в радиусе 55 минут

Из-за необходимости использовать зону доступности в почти целый час возникает картина, где высокие значения баллов слишком стремятся к центру, и слабо учитывается локальная близость к школе. Так дома, находящиеся в отдалении от любой школы, набирают свои баллы за счёт большого количества школ на среднем расстоянии. Особенно это заметно в районе станции Мамонтовка. Дома рядом с этой станцией (область №1 на рисунке ниже) получили зеленую и светло-зелёную окраску, что указывает на среднее значение баллов. Такое же значение получили и дома в области №2, хотя в их непосредственной близости есть школа, в то время как в области №1 её нет.

Доступность школ в радиусе 55 минут с анализом зон
Доступность школ в радиусе 55 минут с анализом зон

Для решения этой проблемы совместим результат 15-минутного и 55-минутного анализа. Перед совмещением, естественно, переведём абсолютные значения времени в условную шкалу, например, от 1 до 100, и уже после этого возьмём среднее значение двух показателей.

Итоговый показатель доступности школ
Итоговый показатель доступности школ

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

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

Сравнение всех вариантов на одной иллюстрации
Сравнение всех вариантов на одной иллюстрации

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

Что касается общественного транспорта, то ни в одном из некоммерческих маршрутизаторов нет алгоритмов построения маршрутов на общественном транспорте.

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

Отличие автомобильного маршрута от пешеходного
Отличие автомобильного маршрута от пешеходного

Данный недостаток приводит к тому, что в непосредственном окружении школы далеко не все дома имеют балл 90-100, а это явно не соответствует действительности.

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

4.2 Доступность прогулочных зон у воды

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

  1. Преобразование полигонов в линии;

  2. Преобразование полученных линий в точки с шагом 50 метров.
    Значение 50 метров выбрано произвольно, чтобы точки часто встречались вдоль береговых линий водоёмов и при этом не замедляли процесс расчёта матрицы.

Среди полученных точек вручную удалим те, что расположены на необлагороженных берегах, где люди не совершают прогулки. Также всем точкам в рамках одного водоёма присвоим одинаковый идентификатор для дальнейшей группировки (для изменения размерности матрицы, о чём будет сказано далее).

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

Перед проставлением баллов необходимо изменить размерность матрицы. Сейчас матрица имеет размерность:
количество домов × количество точек
При этом, как было сказано ранее, разные точки – это не разные объекты. Следовательно, матрица, как и в случае с другими показателями, должна иметь размерность:
количество домов × количество объектов

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

4.3 Состояние жилищного фонда

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

Идеальный вариант для составления этого показателя — это анализ качества жилищного фонда на основе данных о сериях домов, таких как 1Р-447С-25, 1-467А-20, II-18/12, 86-014/1.2-АС1-2 и т.п. Но мало того, что такая информация возможна только для многоквартирных домов, так и в единственном источнике этой информации — данных Реформы ЖКХ из почти 700 домов только для 100 указана конкретная серия. У большинства же в свойстве “Серия, тип постройки здания” записано: типовой проект, типовой, панельный, кирпичный, индивидуальный проект, деревянный, блочный и тому подобные. В связи с этим единственное, чем можно воспользоваться, это данные о годе постройки и материалах, из которых сделан дом.

Из трёх источников данных о строениях, а именно из Публичной кадастровой карты, OpenStreetMap и Реформы ЖКХ, было получено 5840 жилых домов, для 4100 из которых есть информация о материалах, и для 3800 указан год постройки. Ситуации, когда у дома есть информация о годе постройки, но нет информации о материалах, единичны.

Состояние жилищного фонда было решено оценивать следующим способом:

  1. Перевести значения возраста домов в шкалу от 1 до 100, где 1 — год постройки самого старого дома, а 100 — самого нового;

  2. Сгруппировать информацию о материалах домов по качеству и присвоить им значения, которые можно использовать в качестве коэффициентов;

  3. Перемножить относительную шкалу возраста домов на коэффициент материалов дома;

  4. Полученные значения перевести в унифицированную для всех показателей шкалу от 1 до 100, при этом минимальному значению присвоить 11 баллов, а единицу присвоить аварийным домам.

Для домов без всей необходимой информации будет использовано два подхода:

  • для домов, у которых есть информация о материалах, но нет информации о годе постройки (порядка 300 домов), будет использовано интерполированное значение домов вокруг;

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

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

  • OSM: building:material;

  • ПКК: pkk_materials;

  • Реформа ЖКХ: «Материал несущих стен» и «Тип перекрытий».
    Поскольку в данных Реформы ЖКХ за материал отвечают сразу два поля, было решено использовать только материалы стен как более значимый показатель.

Необходимо также отметить, что тег building:material в OSM отражает именно внешний материал здания. Если кирпичный дом покрыт штукатуркой, то тег будет building:material=plaster, а не building:material=brick. Однако, поскольку вероятность того, что здание обшито деревом, а внутри имеет кирпичные стены, крайне мала, то я воспользуюсь данным тегом, особенно учитывая, что он встречается нечасто. Естественно, такой тег, как plaster, будет проигнорирован.

Для множества домов указаны свойства из разных источников, которые могут противоречить друг другу. В данном случае наиболее приоритетным источником считались данные Реформы ЖКХ, затем ПКК и, в последнюю очередь, OSM.

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

  1. Кирпичные материалы:
    OSM: brick;
    ПКК: кирпичные, кирпичные облегченные, каменные;
    Реформа ЖКХ: кирпич.

  2. Железобетонные и панельные материалы:
    OSM: concrete (так как данным тегом отмечают панельные дома);
    ПКК: железобетонные, крупнопанельные, из унифицированных железобетонных элементов, из легкобетонных панелей, монолитные;
    Реформа ЖКХ: железобетонная панель, железобетон, панельные, монолитные.

  3. Смешанные и комбинированные материалы:
    ПКК: смешанные, каменные и деревянные, каменные и бетонные;
    Реформа ЖКХ: смешанные;

  4. Деревянные материалы:
    OSM: wood;
    ПКК: деревянные, каркасно-обшивные, рубленые;
    Реформа ЖКХ: деревянные.

  5. Бетонные и блочные материалы:
    ПКК: бетонные, крупноблочные, из мелких бетонных блоков, шлакобетонные;
    Реформа ЖКХ: блочные.

  6. Прочие материалы:
    ПКК: из прочих материалов;
    Реформа ЖКХ: иные.

Чем выше группа материалов, тем выше их коэффициент. У кирпичных материалов — 6, у прочих — 1.

4.4 Доступность Ростокино

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

  • основной автомагистралью, соединяющей Пушкино с Москвой, является Ярославское шоссе, которое сменяется проспектом Мира;

  • на проспекте Мира располагается остановка «МЦК Ростокино», через которую проходят 2 из 3 междугородних автобусов, проезжающих через Пушкино;

  • в 330 метрах по прямой или в 10 минутах ходьбы от этой остановки находится железнодорожная станция «Ростокино», где останавливаются все без исключения электрички из Пушкино.

Транспортный узел Ростокино
Транспортный узел Ростокино

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

4.4.1 Доступность остановки Ростокино на машине

В качестве точки для анализа показателя близости Ростокино на машине была использована остановка общественного транспорта «МЦК Ростокино» по направлению движения из Пушкино в Москву.

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

4.4.2 Доступность остановки Ростокино на автобусах

Как было сказано ранее, через остановку «МЦК Ростокино» проходят 2 из 3 междугородних маршрутов, соединяющих Пушкино с Москвой, а именно маршруты: №451 «Пушкино – ВДНХ» и №317 «Красноармейск – ВДНХ». Третий, не учтённый маршрут — №509 «Пушкино – Медведково».

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

  • времени пешком до ближайшей автобусной остановки, где проходит один из маршрутов;

  • среднего времени ожидания автобуса;

  • среднего времени в пути.

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

 Маршруты автобусов №451 и №317 с остановками
Маршруты автобусов №451 и №317 с остановками

Среднее время ожидания автобуса было рассчитано по расписанию, взятому с сайта Мострансавто. Из времени отправления n-го порядка вычиталось время порядка n-1, например, из 10:22 отнималось 10:07, и после из всех полученных значений вычислялось среднее.

Среднее время в пути в данном случае для всего двух автобусов можно было определить по времени отправления с остановки и времени прибытия на остановку «МЦК Ростокино».

4.4.3 Доступность железнодорожной станции Ростокино

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

  1. Большинство (заметьте, большинство, а не все) автобусов города Пушкино обслуживаются Мострансавто, на сайте которого можно найти расписание рейсов. К сожалению, оно сформировано лишь по номерам автобусов, для остановки получить информацию нельзя, хотя она, судя по взаимосвязям, есть. Но ничего, можно скачать расписание всех маршрутов в формате CSV и с помощью pandas объединить их по названию остановки. Но и здесь возникают проблемы: названия могут повторяться, например, «школа», «почта» и моё любимое «по требованию». Предположим, что мы решим эту проблему, воспользовавшись уникальными id, которые отсутствуют в CSV-файле, но есть на сайте.
    Представим, что мы справились и теперь у нас есть расписание для всех остановок! Да только координат для них у нас нет, названия на OSM не совпадают, а если и верные, как определить, какая это из остановок «школа» или «по требованию»? В общем, без подглядывания в Яндекс, даже со знанием местности, не справиться.

  2. Предположим, нам удалось собрать и обработать данные из открытых источников, а после на их основе создать базу данных со всеми остановками, их координатами и расписанием. Как теперь определить, до какой из 4-х железнодорожных станций города ехать? Верно, до той, для которой будет наименьшая сумма следующих значений: время пешком до остановки, среднее время ожидания идущего до станции автобуса, среднее время ожидания электрички и среднее время пути на ней.
    Сложность возникает на этапе выбора автобуса, так как через одну остановку может проходить два автобуса, едущих до станции, но один за 10 минут, а другой за 20. Чтобы выяснить, сколько именно они едут, нужно знать их маршруты, а значит, выгружать пути из OSM и передавать их Valhalla. Таким образом, задача по составлению показателя превращается в написание собственного маршрутизатора. И нет, вариант с определением времени в пути по расписанию, как в прошлом пункте, здесь не сработает. В общем, пока этот показатель было решено отложить.

4.5 Загрязнённость воздуха

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

Согласно порталу, на городской округ Пушкино приходится 12 постов экомониторинга, среди которых на апрель 2024 года рабочими были обозначены 8 постов. Однако оставшиеся 4 нерабочих поста также содержали информацию за месяцы до их отключения. При просмотре на сайте эта информация не видна, но при выгрузке исходного JSON-файла она присутствует.
Среди постов на техобслуживании находились: «Пушкино-2» (данные с апреля по январь), «Пушкино-7» (с марта по август), «Пушкино-8» (с марта по август), «Пушкино-10» (с марта по август).

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

 Медианы значений каждого показателя за год
Медианы значений каждого показателя за год

Согласно определению, предельно допустимая концентрация (ПДК) — это максимальная концентрация вредного вещества в воздухе населенных мест, которая не должна оказывать на человека прямого или косвенного воздействия при неограниченно долгом вдыхании (круглосуточно в течение всей жизни).

Проанализировав полученные значения по городскому округу, приходим к выводу, что превышения ПДК нет ни по одному из показателей, и большинство из них имеют крайне малое, близкое к нулю значение относительно ПДК. Лишь один показатель перешел границу в 50% от ПДК.

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

5. Итоговый web-сервис

Итоговый результат работы в виде web-сервиса, аккумулирующего все показатели по отдельности и отображающего персонализированный синтетический показатель качества городской среды, доступен по ссылке https://pushkino-maps.ru/images/where_to_live.

 Где в Пушкино жить лучше?
Где в Пушкино жить лучше?

При просмотре рекомендую обращать внимание не на дома с рейтингом 90-100, так как они для всех показателей, за исключением показателя доступности Ростокино, сконцентрированы в центре, а обращать внимание на другие районы. Если бы данная карта была, например, для Москвы, то наилучший результат также неизбежно был бы в центре города. Однако стали бы вы рассматривать жильё в самом центре? Большинство из-за цены не стало бы. Рассматривали бы другие, более удалённые районы. Цены в центре города Пушкино далеко не такие, как в центре Москвы, однако логика неизменна.

Также стоит отметить, что данная карта показывает, где жить лучше. Не «хорошо» или «комфортно», а «лучше». Из-за того, что город небольшой, большинство показателей так или иначе подчиняются логике: чем ближе к центру, тем лучше, и отличий по окраинам немного. Если бы для анализа использовался более крупный город или скопление нескольких небольших, то отличий между показателями бы было больше, и удалённые от центра районы приобрели бы свои персонализированные черты. Некоторые, например, лидировали бы по доступности школ, а другие — по доступности водных пространств.

В ходе создания данной карты у меня также возникала мысль, которую лучше всего проиллюстрировать на показателе доступности предприятий торговли и услуг. Можно ли сказать, что, например, в микрорайоне Новое Пушкино, попадающем в оранжевую градацию, недостаточно магазинов и других заведений для комфортной жизни? Совершенно нет, там крайне много данных точек интереса (хоть и существует нехватка данных в OSM), и их более чем достаточно для комфортной жизни. Но в центре города таких точек больше, а значит, по этому показателю там жить лучше.

Можно было бы сделать карту того, где «жить хорошо», наподобие той, что была при старом подходе Яндекса. И такой подход действительно имеет смысл. Однако с точки зрения анализа он крайне тривиальный — это простая проверка наличия объектов в определенной области. Да и не для всех объектов можно определить четкую границу, после которой условия проживания приобретают статус «хороших». Вот какое значение времени в пути на машине до Ростокино является хорошим: 30 минут, 45, 60? А на автобусе? Если сделать показатель озеленённости территории или наличия ДТП, то что для них? Исследование типа «где лучше» избавляет нас от таких проблем.

Заключение

Такая вот обширная вышла работа, охватившая как общие вопросы составления карт подобных тематик, так и конкретные технические аспекты. Сперва был проведён анализ наиболее актуальных сервисов и публикаций, посвящённых оценке комфортности проживания в городе. Наиболее удачные решения из них были синтезированы и дополнены для создания различных показателей. Для повышения точности показателей были проведены различные сравнения программных средств, результаты которых, помимо прочего, отражают актуальную информацию об их состоянии и могут быть полезны для других пользователей. Результатом работы стала карта, аккумулирующая все созданные показатели и создающая на их основе персонализированный синтетический показатель качества городской среды города Пушкино.

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

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

Ну а пока ожидаю ваших вопросов, отзывов и рекомендаций!

Конец лонгрида.

Источник: https://habr.com/ru/articles/833186/


Интересные статьи

Интересные статьи

Для многих не является открытием то, что процесс куда важнее, чем окончательный результат, хотя бы потому, что результат может не совпадать с вашими ожиданиями. Однако концентрироваться на процессе сл...
Привет, Хабр!Вместе с нижегородским сообществом PythoNN и инженерами компании-разработчика вычислительной техники YADRO мы обсудим правила, которые помогут сделать тесты понятнее, поговорим, как подде...
Современный мир нельзя представить без сервисов связи, таких как социальные сети, мессенджеры, электронная почта, файловые хранилища и т.п. Мы пользуемся данными сервисами постоянно, ровно как и они п...
Самостоятельный хостинг простого сайта — вполне нормальная вещь, таких примеров немало, и в этом нет ничего особо сложного. В принципе, веб-сервер со статичным контентом вообще сохраняется в виде ...
Первый прототип объектных хранилищ мир увидел в 1996 году. Через 10 лет Amazon Web Services запустит Amazon S3, и мир начнёт планомерно сходить с ума от плоского адресного пространства. Благодаря...