Проект III#
Оценка доступности школ и детских садов#
Цель:#
Проанализировать доступность детских общеобразовательных учреждений для выбранного гордского района. Для этого необходимо посчитать количество человек и долю от всего населения, кто проживает в зоне доступности от детских общеобразовательных учреждений (школ - 500 метров, детских садов - 300 метров). Предлагаем взять любой район Москвы или Санкт-Петербурга*.
*Примечание: вы можете выполнять задание и для других городов, но в таком случае необходимо самостоятельно найти и подготовить данные для оценки численности населения.
Требуется определить:
Количество человек в зоне доступности и школ, и детских садов.
Количество человек в зоне доступности только школ.
Количество человек в зоне доступности только детских садов.
Количество человек за пределами зон доступности общеобразовательных учреждений.
Данные:#
Для оценки численности населения:
msk_mkd.csv
(Москва) илиspb_mkd.csv
(Санкт-Петербург).Границы административных районов: файл
admin_borders.gpkg
или скачанные из OpenStreetMap.Данные о местоположении школ и детских садов: можно экспортировать из 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. Агрегация численности населения по категориям
Рассчитайте суммарную численность населения для каждой категории:
В зоне и школ, и детских садов.
В зоне только школ.
В зоне только детских садов.
За пределами зон доступности.
# Пример агрегации:
# 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. Описание результатов#
Проанализируйте полученные данные.
Оцените, насколько хорошая доступность образовательных учреждений в выбранном районе.
Опишите возможные причины наблюдаемой ситуации (например, густота застройки, удаленность учреждений и т.д.).