Пошаговая иллюстрированная инструкция по решению задачи анализа этажности городской застройки, в т.ч. расчет скидок за первый и последний этажи. В качестве модельного города принят Брянск. Расчетный файл прилагается и его листы пронумерованы в последовательности выполненных операций. Шаблон расчета легко адаптировать для другого города и вида недвижимости.
Инструкция состоит из двух частей. В первой части изложен порядок подготовки, первичного ознакомления с данными и уточнения цели исследования. Во второй части будет сделан расчет скидки за этаж.
1. Что потребуется
Для построения инфраструктуры работы с большими данными в данном случае потребуется только Excel. Excel соберет данные с досок объявлений, Excel их подготовит для использования, Excel их визуализирует и преобразует в знания. Вы знакомы с Excel? → если да, то вы уже не офисный планктон, а опытный дата-инженер и дата-аналитик!
Настройка инфраструктуры для нашего кейса заключается в конфигурировании Excel двумя надстройками. Надстройка Power Query предоставляет средства ETL. Надстройка Робастик предоставляет средства автоматизации.
2. Данные
Исходный набор данных собран с досок объявлений. Датасет состоит из 15 файлов в одной папке, в каждом из которых находятся собранные в течение календарного месяца объявления (ежемесячный срез рынка). Инструкция для парсинга объявлений недвижимости изложена в одной из предыдущих публикаций.
3. Получение данных
Для извлечения данных из датасета используем Power Query. В разных версиях Excel меню Power Query выглядит по-разному. В версиях 2010 и 2013 ее надо устанавливать дополнительно, а с 2016 она идет в составе Excel.
Для объединения данных из 15 файлов и вставки в лист новой книги нужно сделать несколько кликов.
В версии 2019 это меню находится здесь:
В версии 2013 это меню находится здесь:
Затем объединяем и загружаем:
После чего остается выбрать лист с данными:
Поскольку парсер автоматически формирует названия листов, названия листов с данными по квартирам в Брянске будут одинаковыми во всех файлах. В результате на одном листе №1 будут объединены в одну таблицу все имеющиеся данные из всех файлов в папке с листов, имеющих одинаковое название.
Всего таким образом извлечено порядка 150 тысяч записей.
4. Очистка данных
4.1. Удаление лишних колонок
Исходные данные расположены в 49 колонках. Данные из большинства колонок не потребуются. Удаляем лишние колонки данных.
В версии 2019 это выглядит так:
В версии 2013 это выглядит так:
И затем либо удаляем лишние столбы, либо выбираем те, которые надо оставить.
В завершение размещаем результат на новый лист №2:
Теперь переходим к работе со строками.
4.2. Удаление дубликатов
Поскольку в задаче не предполагается сопоставление помесячных срезов, дубликаты нам не потребуются.
Для удаления дубликатов делаем активным лист №2 → из таблицы → выделить колонку itemID →
удалить строки → удалить дубликаты:
itemID - это номера объявлений. Удаление строк с дублирующимися номерами объявлений означает, что будут удалены записи одного и того же объявления, опубликованного в течение разных месяцев.
В завершение размещаем результат на новый лист №3 → закрыть и загрузить.
4.3. Удаление лишних категорий
В исходных данных собрана продажа, покупка и аренда. Ограничимся данными о продаже.
Также не станем рассматривать специфику новостроек, оставим только вторичный рынок.
Для этой операции делаем активным лист №3 → из таблицы → открыть фильтр колонки Офер → оставить галку Продам :
Аналогично в колонке Рынок снять галку Новостройка:
В завершение размещаем результат на новый лист №4: закрыть и загрузить.
На этом данные считаем подготовленными для анализа.
Отметим, что для подготовки данных потребовалось только немного пощелкать мышкой. Формулы не использовались совсем.
5. Анализ
5.1. Группы этажности
Для общего понимания города в аспекте этажности рассмотрим распределение зданий по этажности и размещение этажности на территории.
Делаем активным лист №4 → из таблицы → выделяем столбец Этажность → группировать:
→ В таблице после группировки выбираем столбец Этажность → сортировать:
В завершение размещаем результат на новый лист №5: закрыть и загрузить.
На листе №5 теперь расположена таблица:
Для наглядного представления построим на этих данных график:
Как видим из графика, город преимущественно пятиэтажный. Помня о том, что данные парсились по запросу для Брянской области, можно предположить, что малоэтажки в значительной степени размазаны по территории всей области.
Следующую по численности группу составляют 9 – 10 –этажки. Последняя по количеству группа состоит из 14 – 17 –этажек.
Из визуальной оценки можно отметить, что каждой группе этажности соответствует свой исторический период. Каждый период характеризуется не только преобладающими нормами и технологией строительства, но и отношениями между властью и обществом (насколько можно уплотнить граждан на квадратном метре застройки), и преобладающим контингентом (пенсионеры, потомки тружеников промышленности, баловни периода «до», гетто времен «после», и т.д.).
Исходя из первичной оценки групп этажности сформируем внутри них территориальные кластеры. Благодаря этому будут получены однородные группы объектов с минимальным разбросом характеристик. Это позволит лучше выделить влияние фактора первого/последнего этажа благодаря низкому уровню шума от факторов местонахождения и этажности.
Разделим данные на группы этажности:
На графике:
5.2. Кластеры по территории
Подготовим данные для построения графика кластера для группы этажности 1 - 3.
Делаем активным лист №4 → из таблицы → выбрать столбцы → (удерживая Ctrl) широта, долгота, этажность.
В завершение размещаем результат на новый лист №6: закрыть и загрузить.
Делаем активным лист №6 → из таблицы → открыть фильтр колонки Этажность → оставить галки 1,2 и 3 → закрыть и загрузить в лист 7.1-3:
Аналогично загружаем данные для группы 4 – 7 на лист 7.4-7, группы 8 – 12 на лист 7.8-12 и группы 13 – 19 на лист 7.13-19.
Далее создаем лист №8.1-3 и добавляем в него шаблон карты. Работа с картой подробно разобрана в предыдущей публикации.
В шаблон карты вставляем ссылку на столбцы А:В в листе №7.1-3, синий цвет RGB имеет код 0,0,255.
В результате получаем пустую карту где-то в Белоруссии:
Это произошло оттого, что не стали чистить данные в колонках Широта и Долгота. Пустая карта не является проблемой → нужно позумить карту колесом мышки до тех пор, пока на ней не появятся отметки:
Затем перетащить мышкой Брянск в центр карты и отзумить масштаб обратно:
Как и предполагалось, малоэтажные здания не формируют кварталы сплошной застройки.
Аналогично построим график на карте для остальных групп этажности.
Этажность 4 – 7 за пределами города сконцентрирована в районных центрах:
В городе этажность 4 - 7 расположена кварталами сплошной застройки:
Определим территориальный кластер на перекрестке улиц Литейная и Ново-Советская:
Откроем это место на сайте 2gis.ru и определим координаты центра кластера:
Там же воспользуемся инструментом Линейка и измерим размер кластера (радиус окружности, вмещающей жилые строения):
С помощью этих данных можно определить окружность, включающую в себя объекты территориального кластера. Окружность используется для отбора входящих в кластер данных.
Аналогично повторим с территориальным кластером между улицами Костычева и Красноармейская – Авиационная:
Поскольку кластер очень вытянутый, для его определения используем две окружности: 1) с центром 53.261924° 34.32897° и радиусом 700 метров, 2) с центром 53.253313° 34.334564° и радиусом 650 метров.
Построим выбранные территориальные кластеры на карте.
Воспользуемся функцией Дистанция :
В кластер войдут те точки, дистанция от которых до центра кластера меньше радиуса окружности.
На листе №9.4-7 запишем сводку определяющих кластеры окружностей:
По этим данным добавим на листе №7.4-7 новые столбцы с формулой для расчета. Если дистанция от точки до центра окружности меньше радиуса, то точка входит в кластер:
Для формирования выборок точек, входящих и не входящих в территориальные кластеры делаем активным лист №7.4-7 → из таблицы → в фильтре колонки Кластер 1 снять галку FALSE → удалить все столбцы, кроме широты и долготы → закрыть и загрузить → назвать новый лист 10.4-7.1.
Аналогично из кластера 2-1 загружаем в лист №10.4-7.21 и из кластера 2-2 загружаем в лист №10.4-7.22. Затем объединяем их в лист №10.4-7.2.
Чтобы получить выборку данных, не вошедших в территориальные кластеры, из таблицы на листе 7.4-7 вычитаем таблицы 10.4-7.1, 10.4-7.21 и 10.4-7.22 и загружаем в лист 10.4-7.0.
Заполняем шаблон карты:
Отображаем результат:
Аналогично для этажности 8 – 12:
И для 13 – 19:
В заключение – все кластеры вместе:
Все использованные данные:
Стоит обратить внимание на то, что для подготовки данных потребовалась только одна формула.
Подготовленные данные далее будут использованы для расчета скидки на этаж во второй части инструкции.
Файл с данными и с расчетами (в следующей части также скидки для первого и последнего этажа) можно скачать здесь.