Статьи

Изучение LinkedIn в Neo4j

Первоначально созданный Rik Van Bruggen

С тех пор, как я работал на Neo , мы старались дать нашей аудитории как можно больше ярких примеров мест, где графические базы данных могли бы действительно сиять. И одним из очевидных мест всегда были социальные сети . Вот почему я написал пост о Facebook, и поэтому многие другие графисты смотрят на Facebook и других, чтобы объяснить, что можно сделать.  


Но хотя Facebook, вероятно, является самой известной социальной сетью, я профессионально использую LinkedIn. Некоторые называют это самой
жуткой сетью, но в том-то и дело, что эта профессиональная сеть является и всегда была очень полезным способом получить и поддерживать связь с другими людьми из других организаций. И угадайте, что: LinkedIn делает фантастические вещи со своими собственными, специально разработанными графиками. Одна из этих вещей является InMaps — фантастическая визуализация и цветной анализ вашей профессиональной сети. На самом деле, именно здесь этот блог получил свое вдохновение.


Интерактивная карта


Дело в том, что вышеприведенный InMap — это «статичная» картина вашей сети.
Вы ничего не можете * сделать * с этим. Вы не можете просматривать его. Вы не можете запросить это. Итак, начались мои поиски способа получить данные из InMap и в Neo4j. Я ожидал, что это займет дни или недели — но от первого поиска Google до публикации этого поста, буквально потребовалось всего 2-3 часа работы. Это очень легко.

Ну, я должен это квалифицировать. Конечно, у вас должно быть место для начала; Мне нужно было место, где я мог бы получить данные из LinkedIn в формате, с которым я мог бы работать для импорта в neo4j. Таким образом , после пяти минут Googling, я наткнулся на этом Dataiku блог по Томас Кабролю , что написал несколько простых сценарии питона , чтобы меня идти.

Шаг 1: Доступ к LinkedIn API

Сценарии Томаса работают с API разработчика LinkedIn. Этот API требует от вас аутентификации, и, следовательно, вам действительно нужно зарегистрировать приложение (в данном случае скрипты Python) в вашей конфигурации. Это легко сделать: просто зайдите на сайт разработчика LinkedIn и зарегистрируйте приложение.

Здесь важно то, что этот процесс будет генерировать несколько ключей, токенов и секретов OAuth, которые вам нужно будет вставить в ваши скрипты.
Легко peasy — но вы должны сделать это, прежде чем продолжить.

Работа Томаса была основана на трех сценариях (один для получения учетных данных OAuth, один для извлечения данных из LinkedIn и один для очистки некоторых дубликатов), но для цели этого сообщения в блоге (и из-за некоторых изменений в OAuth LinkedIn политики), вам действительно нужен только один скрипт. Поэтому я должен был раскошелиться сценарий Томаса , и я поставил свою версию здесь . Обратите внимание, что вам нужно будет ввести свои учетные данные и имя для этого сценария, чтобы иметь смысл. Подсказка: убедитесь, что вы установили oauth2 и urlparse, импортированные модули — в противном случае скрипт python не будет работать.

Получив скрипт, просто откройте терминал, запустите скрипт python (python linkedin-query.py) — и подождите пару минут. Если все пойдет хорошо, он сгенерирует файл connected.csv, который содержит все необходимые вам соединения (пары имен) — в вашей сети 1-й степени. Это означает:

  • подключения от себя к людям в вашей сети
  • соединения от людей в вашей сети, с другими людьми в вашей сети.
Именно то, что показывает InMaps. В моем конкретном случае это означало 1516 узлов (я признаю, я опытный пользователь LinkedIn;)) и 5345 соединений / отношений. 

Важное примечание : LinkedIn фактически ограничивает количество вызовов API, которые вы можете совершать на своих серверах. Вы можете прочитать больше об этом на страницах разработчиков LinkedIn . Для моей сети это означало, что я мог запускать скрипт python только один раз в день . Так что будьте осторожны!

Шаг 2 — простая часть — импорт .csv в Neo4j


Теперь все, что нам нужно сделать, это загрузить 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;

создать отношения. Опять же: легко.

Запустите сервер Neo4j. Возьмите электронную таблицу, скопируйте / вставьте запросы шифров в консоль, подключенную к серверу (bin / neo4j-shell), и все готово. Если вы хотите пропустить все это, вы также можете просто загрузить импортированную графическую базу данных neo4j и взглянуть на мою профессиональную сеть — но, честно говоря, гораздо интереснее, если вы сделаете это с собственной сетью.

Затем вы можете просто перейти к консоли webadmin , и там у нас есть наш интерактивный эквивалент InMap. Никаких цветовых кодов (пока) — но много интерактивности.


Шаг 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 в вашем проекте, не стесняйтесь обращаться ко мне .