Статьи

Как использовать Gephi для визуализации связанных записей в Википедии

Содержание этой статьи было первоначально написано Тони Херстом в его блоге, OUseful.info

Когда-то на прошлой неделе @mediaczar рассказал мне об аккуратном рецепте в чудесно названном блоге Drunks & Lampposts «Графики истории философии» , в котором Gephi отображает сеть влияния в мире философии. Данные основаны на извлечении отношения «influencedBy» над философами, упомянутыми в Википедии, с использованием машиночитаемого, структурированного представления данных Википедии, которое представляет собой DBpedia.

Данный рецепт подсказывает, как извлечь данные из DBpedia, привести их в порядок, а затем импортировать в Gephi… но есть более быстрый путь: плагин импорта Gephi Semantic Web . (Если он еще не установлен, вы можете установить этот плагин через меню «Сервис» -> «Плагины», а затем загляните в « Доступный плагин» .)

Чтобы получить данные DBpedia в Gephi, нам нужно сделать три вещи:

— сообщить импортеру, где найти данные, указав URL (параметр конфигурации «Драйвер»);
— сообщить импортеру, какие данные мы хотим получить, указав, что по сути является запросом к базе данных (параметр конфигурации «Запрос»);
— рассказать Gephi, как создать сеть, которую мы хотим визуализировать, на основе данных, возвращаемых из DBpedia (в контексте конфигурации «Запрос»).

К счастью, нам не нужно придумывать , как это сделать с нуля — на панели « Конфигурация импорта семантического веба» настройте средство импорта , задав для конфигурации значение DBPediaMovies .

При нажатии «Set Configuration» устанавливается драйвер ( удаленная конечная точка SOAP с URL-адресом конечной точки http://dbpedia.org/sparql):

и предоставляет фиктивный пример запроса:

Нам нужно немного поработать над созданием нашего собственного запроса, но не слишком много — мы можем использовать этот пример DBpediaMovies и запрос, приведенный в блоге Drunks & Lampposts, в качестве отправной точки:

SELECT *
WHERE {
?p a
<http://dbpedia.org/ontology/Philosopher> .
?p <http://dbpedia.org/ontology/influenced> ?influenced.
}

По сути, этот запрос гласит: «дай мне все пары людей, (? P,? Под влиянием), где каждый человек? P является философом, а каждый человек под влиянием находится под влиянием? P”.

Мы можем заменить часть WHERE запроса в Semantic Web Importer частью WHERE этого запроса, но какой график мы хотим собрать в части CONSTRUCT запроса?

Граф, который мы собираемся визуализировать, будет иметь узлы, которые являются философами или людьми, которые повлияли на них. Ребра, соединяющие узлы, будут отражать влияние одного на другое, используя направленную линию (со стрелкой), чтобы показать, что A, например, влияет на B.

Следующая конструкция должна достичь этого:

CONSTRUCT{
?p <http://dbpedia.org/ontology/influenced> ?influenced.
} WHERE {
  ?p a
<http://dbpedia.org/ontology/Philosopher> .
?p <http://dbpedia.org/ontology/influenced> ?influenced.
} LIMIT 10000

(Аргумент LIMIT ограничивает количество строк данных, которые мы собираемся вернуть. Часто хорошей практикой является установка этого значения достаточно низким, когда вы пытаетесь выполнить новый запрос!)

Нажмите Run и график должен быть импортирован:

Если щелкнуть панель «График» (в главном окне «Обзор» инструмента Gephi), вы должны увидеть график:

Если мы запустим статистику центральности PageRank или EigenVector, определим размеры узлов в соответствии с этим значением и разметим график с использованием алгоритма направленной силы или алгоритма Fruchtermann-Rheingold, мы получим что-то вроде этого:

Узлы помечены довольно неуклюже — например, http://dbpedia.org/page/Martin_Heidegger , но мы можем привести это в порядок. Перейдя на одну из страниц DPpedia, например, http://dbpedia.org/page/Martin_Heidegger , мы найдем, что еще DBpedia знает об этом человеке:

В частности, мы видим, что можем получить имя философа, используя свойство / отношение foaf: name . Если вы вернетесь к исходному примеру DBpediaMovies, мы можем начать его разбирать. Похоже, существует набор свойств gephi, которые мы можем использовать для создания нашей сети, включая свойство «label». Может быть, это поможет нам более четко обозначить наши узлы, используя, например, настоящее имя философа? Вы также можете заметить объявление «префикса» gephi , которое встречается в различных конструкциях (например, gephi: label ). Хммм .. Может быть, gephi: label — это префикс gephi: <http://gephi.org/> как foaf: name к чему-то? Если мы делаем веб-поиск фразы foaf: name prefix, мы приводим несколько результатов, которые содержат префикс фразы foaf: <http://xmlns.com/foaf/0.1/>, поэтому, возможно, нам нужен один из них, чтобы вывести foaf: name из DBpedia….?

Но как мы получим это? Мы уже видели, что мы можем получить имя человека, на которого оказал влияние философ, запросив результаты, в которых соблюдается это отношение: «p <http://dbpedia.org/ontology/influenced>». Следовательно, мы можем получить имя философа (? Pname), запросив foaf: name в WHEER-части запроса:

?p <foaf:name> ?pname.

а затем использовать это имя в качестве метки в конструкции:

?p gephi:label ?pname.

Мы также можем сделать подобное упражнение для человека, на которого влияют.

Просматривая запись DBpedia, я замечаю, что помимо отношения, на которое влияют , есть и отношение повлияло на меня (я думаю, что оно действительно использовалось в блоге Drunks & Lampposts?). Итак, давайте использовать это в этой окончательной версии запроса:

prefix gephi:<http://gephi.org/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
CONSTRUCT{
  ?philosopher gephi:label ?philosopherName .
  ?influence gephi:label ?influenceName .
  ?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence
} WHERE {
  ?philosopher a
  <http://dbpedia.org/ontology/Philosopher> .
  ?philosopher <http://dbpedia.org/ontology/influencedBy> ?influence.
  ?philosopher foaf:name ?philosopherName.
  ?influence foaf:name ?influenceName.
}

Если вы уже запустили запрос для загрузки в график, если вы запустите этот запрос, он может появиться поверх предыдущего, поэтому лучше сначала очистить рабочее пространство. В правом нижнем углу экрана находится список рабочих пространств. Щелкните метку « График запросов RDF», чтобы открыть список рабочих пространств, и закройте один граф запросов RDF , нажав «x».

Теперь запустите запрос в только что запущенном, нетронутом рабочем пространстве и поиграйтесь с графиком, как душе угодно… ? [Возможно, я опубликую больше об этом позже — тем временем, если вы новичок в Gephi, вот некоторые уроки Gephi ]

Вот что я получаю, определяя размеры узлов и меток с помощью PageRank и размечая график, используя комбинацию инструментов разметки Force Atlas2, Expansion и Label Adjust (чтобы остановить перекрытие меток):

Используя фильтр Сети Эго , мы можем затем сосредоточиться на сети непосредственного влияния (влияющих и находящихся под влиянием) отдельного философа:

Надеемся, что этот рецепт показывает, как вы можете напрямую загружать данные из DBpedia в Gephi. Два трюка, которые вам необходимо изучить, чтобы сделать это для других наборов данных:

1) выяснить, как получить данные из DBpedia (часть запроса WHERE);
2) выяснить, как привести эти данные в форму для Gephi (часть запроса CONSTRUCT).

Если у вас есть другие интересные графики, пожалуйста, опубликуйте фрагменты запроса в комментариях ниже ?

[Смотрите также: Графики каждой * идеи в истории ]

PS через @sciencebase ( исследование картирования Википедии с помощью Wikimaps ), есть этот связанный инструмент: WikiMaps , онлайн (и настольный?) Инструмент для визуализации различных графиков на основе Википедии, например, сети Джастина Бибера…

Есть ли другие связанные инструменты для построения и визуализации сетевых карт Википедии? Пожалуйста, добавьте ссылку через комментарии, если вы знаете, какие-либо …

PPS для обобщения этого подхода и рецепта поиска других сетей DBpedia для сопоставления см. В разделе « Как языки программирования влияют друг на друга в соответствии с Википедией» .