169 похожих чатов

Привет) Задавал вопросы выше по теории графов, теперь вот перешел

к практике))
У меня есть несколько млн вершин и большое кол-во связей между ними.
Хочется мне взять определенные вершины и построить от них всю цепочку связей, которые существуют.
Соответственно фрейм данных с вершинами я могу легко создать. Но как мне создать соответствующий фрейм данных для ребер? Вручную то отфильтровать ненужные связи я не могу, так не знаю их) Строю с помощью igraph. Подскажете, пжл, функцию, которая автоматом создаст фрейм с ребрами из фрейма вершин и признака, по которым эти ребра должны строиться?

26 ответов

17 просмотров
Марк- Автор вопроса

или я чего то не понимаю и такой функции нет?))

Для направленного ациклического графа может попробовать igraph::subcomponent()

Марк- Автор вопроса
Dm Kb
Для направленного ациклического графа может попроб...

Спасибо. Наверное я еще рано взялся за практику. Пошел читать книгу, которую скидывали выше 😂

А что за признак-то? Без этого непонятна задача

Марк
ip адреса, например

Так как именно они должны строиться? Полагаю, вопрос же именно в том, как это закодить

Марк- Автор вопроса
Ivan Pozdniakov
Так как именно они должны строиться? Полагаю, вопр...

да, как закодить. Есть уникальные id людей. Есть список их ip (от одного и больше). И нужен скрипт, в который кладешь нужный id, а он строит сеть по признаку ip.

Марк- Автор вопроса
Ivan Pozdniakov
То есть просто cooccurrence matrix?

Хотелось бы ответит да, но я не знаю что такое cooccurrence matrix)) Поэтому наверное я все же слишком рано пошел спрашивать, не доучив теорию)

Марк
Хотелось бы ответит да, но я не знаю что такое coo...

Да не, в самый раз) вот, например: https://planspace.org/2013/01/30/visualize-co_occurrence/

Марк- Автор вопроса
Ivan Pozdniakov
Да не, в самый раз) вот, например: https://planspa...

Эхх, англиский он такой английский)) Но спасибо, ща посмотрю)

Марк
Эхх, англиский он такой английский)) Но спасибо, щ...

можно и на русском найти, наверное. Суть вот в чем: нужно создать матрицу, где по строкам айди, а по столбцам айпи переменожить матрицу на транспонированную по правилам линейной алгебры вот и получилась матрица смежности: каждая клетка матрица - сумма совместных пересечений Причем, можно как создать сеть с вершинами id, так и сеть с вершинами ip A <- matrix(c(1, 0, 0, 0, 0, 1, 1, 1, 0 , 1, 0 , 1), nrow = 3, dimnames = list(letters[1:3], c("one", "two", "three", "four"))) A t(A) %*% A A %*% t(A)

Марк- Автор вопроса
Ivan Pozdniakov
можно и на русском найти, наверное. Суть вот в чем...

Кстати, уже как то спрашивал, но никто не подсказал. Нет какой то горячей клавиши для матричного умножения?) Гуглил, не нашел)

Марк
Кстати, уже как то спрашивал, но никто не подсказа...

я, честно говоря, не могу себя представить ситуацию, когда этот оператор может понадобиться реально часто)

Марк- Автор вопроса
Ivan Pozdniakov
я, честно говоря, не могу себя представить ситуаци...

Когда учил матричное умножение - напрягало вводить в ручную))

Марк- Автор вопроса
Ivan Pozdniakov
можно и на русском найти, наверное. Суть вот в чем...

Чего то застрял я на матрице смежности. Привел свой frame к виду - в первом столбце id людей, во втором их айпишники. То есть это длинный формат, id людей, у которых более одного ip повторяются. Думал просто привести таблицу к широкому формату через pivot_wider и получится исходная матрица для транспонирования и перемножения, однако эта функция делает таблицу с одной строкой, все id людей, приходящихся на один ip кладет как бы в вектор. Как заставить вытянуть их в строки?)

Марк- Автор вопроса
Марк
Чего то застрял я на матрице смежности. Привел сво...

Хотя, я что то гоню, мне же надо привести к такому виду, чтобы в ячейках матрицы было кол-во пересечений

Марк- Автор вопроса
Ivan Pozdniakov
можно и на русском найти, наверное. Суть вот в чем...

В общем, как создать то такую матрицу из данных в длинном формате? 😁

Марк
Чего то застрял я на матрице смежности. Привел сво...

а зачем приводить? Некоторые пакеты для рисования графов вполне жрут длинные датасеты. Я, правда, пропустил начало дискуссии, но когда мне неск. месяцев назад надо было нарисовать граф, то это все оказалось достаточно тривиально с пакетом visNetwork https://datastorm-open.github.io/visNetwork/

Марк- Автор вопроса
Ed P
а зачем приводить? Некоторые пакеты для рисования ...

Насколько я понимаю, например, пакету statnet нужна или матрица смежности или список рёбер. И нужно их как то создать из исходного дата сета

Марк- Автор вопроса
Марк
Чего то застрял я на матрице смежности. Привел сво...

Думайте о графе как о наборе векторов. У вектора должно быть начало и конец и его длинна, поэтому столбцов должно быть минимум три. Далее делаете pivot_wider, но этого мало т.к. матрица может получится несимметричной. Поэтому до pivot_wider делайте tidy::expand() чтобы все комбинации вершин присутствовали

Dm Kb
Думайте о графе как о наборе векторов. У вектора д...

Но зачем так сложно? Длинного датасета from - to вполне достаточно. Т.е. в минимальном варианте 2 переменные всего. Если появляются другие атрибуты (длина, толщина, цвет, форма) - это все новые переменные

Ed P
Но зачем так сложно? Длинного датасета from - to в...

Я просто ответил как сделать из длинного формата - матрицу. Вообще главное что нужно понять - это то, что должно быть таблица с рёбрами: “from” и “to” и отдельная таблица с узлами nodes

Марк- Автор вопроса
Ed P
Но зачем так сложно? Длинного датасета from - to в...

Ну да, похоже что проще просто сделать left join таблицы с вершинами и признаком связи с самой с собой, получив таким образом from и to, потом создать сеть через функцию network::network, а потом и извлечь матрицу смежности

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта