#python #networkx #openstreetmap #adjacency-matrix
#python #networkx #openstreetmap #матрица смежности
Вопрос:
Я извлек некоторые дорожные данные из Openstreetmap
отношения между перекрестком, представленным в a node
, и у каждого node
есть an id
, извлеченные данные были преобразованы в фрейм данных формы (50,2)
, поскольку я пытаюсь реализовать на земле небольшого размера
Фрейм данных выглядит следующим образом
id_1 id_2
0 42807002 8219742091
1 8219742091 8219737904
2 8219737904 42807004
3 42839143 8219742075
4 8219742075 42807002
5 42807002 42839146
6 42839146 42839155
7 42839155 42839161
8 42839161 42839168
9 42839168 2875111804
10 2875111804 42839172
11 42839146 8219742083
12 8219742083 8219742024
13 8219742024 42845825
14 42839161 8219742048
15 8219742048 8219742063
16 8219742063 42862789
17 42839155 8219742066
18 8219742066 5427796641
19 5427796641 5427796639
20 5427796639 5427796630
и для дополнительной иллюстрации это графическое отношение между моими узлами.
Каждая запись показывает, что существует связь между id_1 и id_2.
Я хотел бы создать adjacency matrix
для этого фрейма данных, но у меня огромная проблема в том, что имена идентификаторов такие большие (наибольшее значение — 8219742092). Я попытался использовать этот код, используя networkx
G = nx.from_pandas_adjacency(df)
но, как я и ожидал, это не работает, поскольку networkx
adjacency
требуются узлы от 0 до 8219742092, а число 8219742092 настолько велико, что из него можно создать набор данных.
Как я могу создать матрицу смежности на основе этих данных?
Небольшое примечание: я не могу переименовать идентификатор.
Комментарии:
1. По сути, ваш график представляет собой разреженный граф, создание матрицы смежности никогда не является хорошим решением для разреженных графов, вы должны попытаться работать с другими решениями, такими как список смежности или список ребер и т.д. В противном случае вы можете создать словарь, сопоставляющий ваши идентификаторы узлов с небольшими отображенными идентификаторами, а затем работать с вашими отображенными идентификаторами. Это обходной путь, с которым я также работаю в одной из своих проблем. Я надеюсь, что это вам тоже поможет.
2. спасибо, это мне очень помогло
Ответ №1:
попробуйте использовать этот код с помощью перекрестной таблицы
cross = pd.crosstab(df['id_1'],df['id_2'])
adjacency_matrix=cross.values