Closed Cinnamy closed 1 year ago
@Cinnamy ознакомился с текстом по ссылке.
@sevryukov, направила ваши вопросы @eiririna, которая занималась этой частью проекта.
По поводу того, что формулировки слишком общие -- что именно там нужно декомпозировать? По ссылке "Графы" есть более подробное описание возможных графов, а в разделе "Информация на карте" всё написано достаточно конкретно.
По поводу графа аналитик делал дополнительный внутренний документ: https://colab.research.google.com/drive/181lvHURJL2bVzPgHtdzqYUZ90YwvqGuN?usp=sharing#scrollTo=wAIlrhQk8zKT. Бэкендер сказал, что это достаточно подробное описание.
Вот что я понимаю под декомпозицией слишком общей задаче "Визуализировать граф".
@Cinnamy @eiririna
@sevryukov Пока @eiririna отошла, постараюсь ответить.
Ту декомпозицию, которую вы привели в пример, мы частично обсуждали на очной встрече, частично она уже была предопределена выбором предыдущей команды, которая для отрисовки графов взяла библиотеку Graphology. Отдельного документа на эту тему мы не создавали, может быть только у Ирины есть какие-то личные заметки.
По поводу замечания к "самооценке квалификации": хоть исходный комментарий и не относится к работе фронтендера, хочу отметить, что в ситуации, когда нас не обучали перед началом работ, а сказали разбираться со всем самостоятельно, непонимание технологии -- это вполне себе блокирующий фактор. Перед распределением по проектам в феврале мы заполняли опросник с имеющимися у нас навыками, и вряд ли кто-то из нашей команды написал про навыки работы с Angular. На просьбу перераспределить на более подходящий проект Иван Станиславович отреагировал отрицательно.
@sevryukov В ходе работы над проектом удалось лишь поправить предыдущие части фронтенда, в написании нового интерфейса у нас не хватило экспертности. После просьбы оценить стороннего специалиста в позиции сеньора по Angular текущее состояние фронтенда, выяснили, что код написан сложно для понимания, нет типизации объектов, из-за чего сложно отследить связь с бэком, и для работы над этим проектом в будущем желательно иметь человека с опытом в фреймворке Angular в виде консультанта. При логировании компонентов возникали ошибки с бэка. Так же возникла сложность из-за необходимости перезапускать контейнеры каждый раз при внесении изменений в фронт часть. Визуализация предполагалась такой, как на прикреплённом изображении. Впоследствии пришли к выводу, что лучше использовать встроенную визуализацию в библиотеках Sigmajs, Graphology, которые использует текущий граф.
Я старался сделать всё максимально похоже на то, как было и у предыдущей команды, для передачи данных они использовали csv-строки с необходимой информацией :
edges_str - строка состоящая из компонент: ['id', 'id_way', 'source', 'target', 'name'] points_str - строка состоящая из компонент: ['id', 'longitude', 'latitude'] pprop_str - строка состоящая из компонент: ['id', 'property', 'value'] wprop_str - строка состоящая из компонент: ['id', 'property', 'value']
на их основе формировался объект, который и передавался в качестве ответа
Здесь тоже самое, есть такие же обработчики, которые принимают id города, список регоинов или мультиполигон. По этим данным отправляется запрос в БД, который формирует три строки:
stops_csv_str - строка состоящая из компонент: ['id', 'longitude', 'latitude'] stops_prop_csv_str - строка состоящая из компонент: ['id', 'property', 'value'] stops_edges_csv_str - строка состоящая из компонент: ['id', 'id_route', 'id_src', 'id_dest']
формируется объект класса StopsBase, полями которого являются эти строки, после чего этот объект передаётся в качестве ответа.
@sevryukov
@sevryukov Касательно работы с графами. Если Вам станет более понятно, то могу предоставить ещё один документ, где я коротко описывал для команды концепции наших графов. https://docs.google.com/document/d/1HSCBiQT7xjXZTGo4UxxBNcAv-7u3hcXNmn9Fp6gCO7g/edit Все варианты были согласованы с Крылатовым А. Ю. . Мы с командой подробно обсуждали то, как это всё должно работать и пришли к выводу, что успеваем реализовать только 2 варианта, а именно 1б и 2 из документа выше
Коллеги, спасибо за комментарии.
Из них я понял следующее:
Всё что я написал - личная субъективная оценка, построенная в результате поверхностного ознакомления с доступными ресурсами и с учётом личного понимания содержания комментариев. Это не рекомендация к действию.
Если и решать поставленную задачу, то её надо декомпозировать с выделением даже таких, как совместное код-ревью с участниками из предыдущей команды. Все возникающие сложности решения этих более атомарных задач надо фиксировать, что в совокупности и могло бы использоваться для оценки сложности поставленной задачи.
Спасибо за ваши комментарии, @Cinnamy @eiririna @CbI3PAHb @OafishSpark
В виде отдельного комментария и, рассматривая поставленную задачу как отдельную (без необходимости привязываться к наработкам предыдущей команды), предложил бы как минимум взглянуть на такую библиотеку как NetworkX. Вот ссылка на некоторые релевантные примеры: https://networkx.org/documentation/stable/auto_examples/index.html#geospatial Если я правильно понял, то граф строится для заданной области, а потом его необходимо анализировать и визуализировать. Предлагаю рассмотреть связку двух инструментов: OSMnx и упомянутый NetworkX: https://geoffboeing.com/2016/11/osmnx-python-street-networks/ (см. пункты 4 и 5 про сохранение полученных данных и дальнейшую работу с ними). Я обратил внимание, что предыдущая команда использовала библиотеку OSMnx для получения данных, но не более. Однако если требуется интерактив и отрисовка на карте, то лучше использовать специализированные для этого библиотеки. Вот пример визуализации с использованием folium: https://stackoverflow.com/questions/56234047/osmnx-plot-a-network-on-an-interactive-web-map-with-different-colours-per-infra/67115678#67115678
@Cinnamy @eiririna @CbI3PAHb @OafishSpark
Ещё один комментарий дам про СУБД для данных. На Demo как предыдущей команды, так и нынешней я задавал вопрос про использование специализированных СУБД для работы с граф-ориентированными данными. Вот хороший пример использования одной из популярных граф-ориентированных СУБД Neo4j: https://neo4j.com/developer-blog/routing-web-app-neo4j-openstreetmap-leafletjs/
Применительно к этой задаче я отношу упоминание Neo4j потому, что она поставляется с мощным UI для визуализации и интерактивного взаимодействия с графами (а не только как средство хранения и обработки данных).
@Cinnamy @eiririna @CbI3PAHb @OafishSpark
Изучить документ. Разобраться, как это реализовать на практике.