Проект III#

Оценка доступности школ и детских садов#

Цель:#

Проанализировать доступность детских общеобразовательных учреждений для выбранного гордского района. Для этого необходимо посчитать количество человек и долю от всего населения, кто проживает в зоне доступности от детских общеобразовательных учреждений (школ - 500 метров, детских садов - 300 метров). Предлагаем взять любой район Москвы или Санкт-Петербурга*.

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

Требуется определить:

  1. Количество человек в зоне доступности и школ, и детских садов.

  2. Количество человек в зоне доступности только школ.

  3. Количество человек в зоне доступности только детских садов.

  4. Количество человек за пределами зон доступности общеобразовательных учреждений.

Данные:#

  1. Для оценки численности населения: msk_mkd.csv (Москва) или spb_mkd.csv (Санкт-Петербург).

  2. Границы административных районов: файл admin_borders.gpkg или скачанные из OpenStreetMap.

  3. Данные о местоположении школ и детских садов: можно экспортировать из OSM или использовать порталы открытых данных Москвы или Санкт-Петербурга.

Требования к итоговому результату:#

Результаты представить в виде:

  • Графика распределения количества людей по указанным категориям.

  • Карты, на которой будет видно, в какую из категорий попадает каждое здание.

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

Формат сдачи задания:#

  • Файл Jupyter Notebook (.ipynb), содержащий весь выполненный анализ, комментарии к коду и результаты.

  • Если Вы работали с Москвой или Санкт-Петербургом, то никаких дополнительных данных или документов прилагать не нужно: все исходники (CSV/GPKG) уже заданы в условии. Для других городов - приложите используемые данные

Критерии оценивания (max. 10 баллов):#

  • 2 балла – Загрузка и первичная проверка данных

  • 2 балла – Получение и подготовка данных об образовательных учреждениях

  • 2 балла – Классификация зданий и агрегация численности населения (корректно подсчитана суммарная численность людей в каждой категории)

  • 2 балла – Визуализация результатов

  • 2 балла – Выводы и оформление

Шаги работы#

Шаг 0. Импортируйте нужные библиотеки#

import pandas as pd
import geopandas as gpd
# другие необходимые

Шаг 1. Подготовка данных#

Шаг 1.1. Загрузка данных о населении

  • Загрузите CSV-файл (msk_mkd.csv или spb_mkd.csv) с данными о многоквартирных домах и численности населения.

  • Проверьте систему координат. Если необходимо, преобразуйте.

Шаг 1.2. Загрузка границ административных районов

  • Загрузите файл admin_borders.gpkg с административными границами.

  • Выберите интересующий вас район города (Москва или Санкт-Петербург).

  • Отфильтруйте GeoDataFrame по названию выбранного района.

Шаг 1.3. Обрезка данных по границам района

  • Обрежьте GeoDataFrame с населением по границам выбранного района с помощью пространственной операции clip.

Шаг 2. Получение данных об образовательных учреждениях#

Шаг 2.1. Экспорт данных из OpenStreetMap или открытых источников

  • Получите данные о местоположении школ и детских садов.

  • Можно использовать библиотеку OSMNx для загрузки данных из OSM по тэгам amenity=school и amenity=kindergarten.

  • Для данных OSM - отфильтруйте на основе типа геометрии

Шаг 2.2. Преобразование данных в GeoDataFrame и проверка координат

  • Если точки не имеют геометрии, создайте GeoDataFrame.

  • Убедитесь в системе координат EPSG:4326.

Шаг 3. Создание зон доступности#

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

Шаг 3.1. Определение зон доступности

  • Постройте вокруг точек школ радиусом 500 метров.

  • Постройте вокруг точек детских садов радиусом 300 метров.

Шаг 3.2. Объединение в единую зону

  • Объедините все зоны для школ в один полигон (union).

  • Объедините все зоны детских садов в один полигон.

# Пример объединения:
# school_zone = gdf_school_buffer.unary_union
# kinder_zone = gdf_kinder_buffer.unary_union

Шаг 4. Классификация зданий по категориям доступности#

Шаг 4.1. Определение принадлежности к зонам

  • Для каждого многоквартирного дома (МКД) определите, попадает ли он в зону школ, в зону детских садов, в обе зоны или не попадает ни в одну.

# Пример пространственной проверки:
# gdf_pop_district['in_school'] = gdf_pop_district.within(school_zone)
# gdf_pop_district['in_kinder'] = gdf_pop_district.within(kinder_zone)

Шаг 4.2. Агрегация численности населения по категориям

  • Рассчитайте суммарную численность населения для каждой категории:

    1. В зоне и школ, и детских садов.

    2. В зоне только школ.

    3. В зоне только детских садов.

    4. За пределами зон доступности.

# Пример агрегации:
# categories = {
#     'both': gdf_pop_district[(gdf_pop_district['in_school']) & (gdf_pop_district['in_kinder'])],
#     'only_school': gdf_pop_district[(gdf_pop_district['in_school']) & (~gdf_pop_district['in_kinder'])],
#     'only_kinder': gdf_pop_district[(~gdf_pop_district['in_school']) & (gdf_pop_district['in_kinder'])],
#     'none': gdf_pop_district[(~gdf_pop_district['in_school']) & (~gdf_pop_district['in_kinder'])]
# }
# pop_counts = {cat: categories[cat]['population'].sum() for cat in categories}

Шаг 5. Визуализация результатов#

Шаг 5.1. Построение графика распределения численности населения

  • Постройте график показывающий количество человек или долю в каждой из категорий

# Пример построения графика:
# import matplotlib.pyplot as plt
# plt.bar(pop_counts.keys(), pop_counts.values())
# plt.xlabel('Категория доступности')
# plt.ylabel('Численность населения')
# plt.title('Распределение населения по доступности образовательных учреждений')

Шаг 5.2. Построение карты с категориями зданий

  • Создайте карту (в любом известном вам формате), где здания будут раскрашены в зависимости от категории доступности

Шаг 6. Описание результатов#

  • Проанализируйте полученные данные.

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

  • Опишите возможные причины наблюдаемой ситуации (например, густота застройки, удаленность учреждений и т.д.).