Python module for urban network analysis
Project description
Кластеризация дорожных сетей и автобусных остановок
Возможности:
- Кластеризация дорожных сетей произвольных российских городов
- Кластеризация автобусных остановок Санкт-Петербурга
Необходимо:
- Установить зависимости
pip install -r requirements.txt. - Установить Neo4j Desktop.
- Создать БД и вести имя, пароль, порт. Параметры можно посмотреть в
neo4j_connection.py. - Установить плагин graph-data-science для работы
community_detection.py. Плагин можно установить или через интерфейс Neo4j Desktop, или вручную, скачав совместимый с версией базы данных плагин и поместив его в папку с плагинами созданного проекта. Также в файле конфигурацииneo4j.confпроекта необходимо установить параметр со следующими значениямиdbms.security.procedures.unrestricted=jwt.security.*, apoc.*, gds.* - Запустить
__main__.py. Будут созданы графы дорог и сети автобусных остановок, а затем они будут кластеризованы с помощью алгоритмов Leiden и Louvain.
Создание графов дорог и сети автобусных остановок:
Для создания графов дорог и сети автобусных остановок могут быть использованы классы RoadGraphDBManager
и BusGraphDBManager соответственно. Они имеют общую функцию GraphDBManager#update_db для добавления графа в Neo4j
RoadGraphDBManager берет данные из OpenStreetMap с помощью библиотеки osmnx. BusGraphDBManager берет данные
из https://kudikina.ru. С этого сайта есть возможность получать данные о дорожных сетях более чем 200
городов, что и реализовано в parser.py.
Подробнее о получаемых данных автобусной сети:
- Вершины - остановки. Включает географическое положение остановки (могут быть не
точными - если информацию получить не удалось, то в таком случае данные будут приближенными и узел будет
иметь
isCoordinateApproximate = True), название остановки, список автобусных маршрутов в которых включена остановка; - Связи - маршруты между соседними остановками внутри одного автобусного маршрута (название маршрута, длительность перемещения между соединяемыми остановками).
Кластеризация дорог и сети автобусных остановок:
Для кластеризации могут быть использованы Louvain и Leiden классы, реализующие соответсвующее алгоритмы с помощью
Neo4j. Они имеют общий метод CommunityDetection#detect_communities, с помощью которого можно выполнить кластеризацию.
В методе можно указать название, параметр кластеризации, название вершин и связей графа дорог или автобусной сети.
В итоге к узлам добавится параметр, который будет определяться принадлежность к определенному кластеру. И также выведется модулярность кластеризации.
Визуализация данных
Можно визуализировать результаты с помощью Neo4j Bloom, расположив точки в географическом положении и раскрасив их в соответствии с группами кластеризации.
Источники информации используемые при разработке:
- https://neo4j.com/docs/python-manual/current/
- https://neo4j.com/docs
- https://neo4j.com/docs/graph-data-science/current/algorithms/louvain/
- https://neo4j.com/docs/graph-data-science/current/algorithms/leiden/
- https://en.wikipedia.org/wiki/Louvain_method
- https://proproprogs.ru/ml/ml-aglomerativnaya-ierarhicheskaya-klasterizaciya-dendogramma
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file urban_transit_network_analysis-1.0.2.tar.gz.
File metadata
- Download URL: urban_transit_network_analysis-1.0.2.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5392ffc7a1fee75c2e8d9fff34b759c882258b3281f9b1aa7618a552122b16d0
|
|
| MD5 |
703982b3145c239c8935210a957b8154
|
|
| BLAKE2b-256 |
321eeb746f01dd6f49d38d2afe076e5bc30a13d9aaaa827d73d43fc62098718e
|