Первоначально созданный Rik Van Bruggen
С тех пор, как я работал на Neo , мы старались дать нашей аудитории как можно больше ярких примеров мест, где графические базы данных могли бы действительно сиять. И одним из очевидных мест всегда были социальные сети . Вот почему я написал пост о Facebook, и поэтому многие другие графисты смотрят на Facebook и других, чтобы объяснить, что можно сделать.
Но хотя Facebook, вероятно, является самой известной социальной сетью, я профессионально использую LinkedIn. Некоторые называют это самой жуткой сетью, но в том-то и дело, что эта профессиональная сеть является и всегда была очень полезным способом получить и поддерживать связь с другими людьми из других организаций. И угадайте, что: LinkedIn делает фантастические вещи со своими собственными, специально разработанными графиками. Одна из этих вещей является InMaps — фантастическая визуализация и цветной анализ вашей профессиональной сети. На самом деле, именно здесь этот блог получил свое вдохновение.
Интерактивная карта
Дело в том, что вышеприведенный InMap — это «статичная» картина вашей сети. Вы ничего не можете * сделать * с этим. Вы не можете просматривать его. Вы не можете запросить это. Итак, начались мои поиски способа получить данные из InMap и в Neo4j. Я ожидал, что это займет дни или недели — но от первого поиска Google до публикации этого поста, буквально потребовалось всего 2-3 часа работы. Это очень легко.
Шаг 1: Доступ к LinkedIn API
Здесь важно то, что этот процесс будет генерировать несколько ключей, токенов и секретов OAuth, которые вам нужно будет вставить в ваши скрипты. Легко peasy — но вы должны сделать это, прежде чем продолжить.
-
подключения от себя к людям в вашей сети
-
соединения от людей в вашей сети, с другими людьми в вашей сети.
Важное примечание : LinkedIn фактически ограничивает количество вызовов API, которые вы можете совершать на своих серверах. Вы можете прочитать больше об этом на страницах разработчиков LinkedIn . Для моей сети это означало, что я мог запускать скрипт python только один раз в день . Так что будьте осторожны!
Шаг 2 — простая часть — импорт .csv в Neo4j
Теперь все, что нам нужно сделать, это загрузить CSV-файл в neo4j — и, как некоторые из вас, вероятно, знают, существует
несколько способов сделать это . Какой бы путь вы ни выбрали, вам всегда нужно иметь простую модель данных, и в этом случае она не может быть проще:
Обязательно настройте автоматический индекс Neo4j для
свойства name, чтобы это работало (задайте
node_auto_indexing = true и node_keys_indexable = name в conf / neo4j.properties).
Результирующие утверждения выглядят так:
create ({name: ‘Rik Van Bruggen’});
Для создания узлов. И:
start
n = node :auto_index (name = ‘Tareq Abedrabbo’),
m = node: node_auto_index (name = ‘Yuri Bukhan’)
создать уникальный n — [: CONNECTED_TO] -> m;
создать отношения. Опять же: легко.
Шаг 3: Запрос интерактивной карты InMap
Приятно иметь этот набор данных в Neo4j сейчас, конечно, то, что мы можем взаимодействовать с ним. Лично мне было очень приятно и круто — как почти всегда бывает с графиками — «прогуляться по данным». Просто возьмите узел в веб-админе, выберите некоторые из его соединений и просто в интерактивном режиме просмотрите от узла к узлу — и узнайте вещи о вашей сети LinkedIn, которые вы, возможно, не знали раньше.
И затем, конечно, вы также можете «программно» взаимодействовать с данными — и Cypher является основным инструментом для этого. Вот пара вопросов, которые я составил, но я уверен, что вы можете сделать еще несколько.
// Find Shortest paths between two contacts START n=node:node_auto_index(name='Emil Eifrem'), m=node:node_auto_index(name='Steven Noels') MATCH p = AllShortestPaths(n-[*]-m) RETURN p; // Find all the relationships between two "first degree" contacts of RVB START rik=node:node_auto_index(name="Rik Van Bruggen") MATCH rik-[:CONNECTED_TO]-firstdegree-[r:CONNECTED_TO]-otherfirstdegree-[:CONNECTED_TO]-rik RETURN distinct firstdegree.name, r, otherfirstdegree.name; // Find all the shared contacts between Rik and Lars START rik=node:node_auto_index(name="Rik Van Bruggen"), lars=node:node_auto_index(name="Lars Nordwall") MATCH rik-[:CONNECTED_TO]-rixsharedcontacts-[:CONNECTED_TO]-lars RETURN distinct rixsharedcontacts.name as SharedContacts;
Я
е ты в него, вы также можете поместить свою собственную интерактивную визуализацию перед базой данных графа Neo4j, что — то вроде Макса де Маой в Neovigator будет интересно.
Если у вас есть какие-либо вопросы относительно вариантов использования Neo4j или как использовать Neo4j в вашем проекте, не стесняйтесь обращаться ко мне .