Статьи

Начало работы с Neo4J, используя ваши данные Twitter

При изучении новой технологии лучше иметь в виду проблему с игрушкой, чтобы вы не просто реализовали еще один прославленный проект «Hello World». Кроме того, если вам нужно много данных, лучше всего использовать интересный набор данных, с которым вы уже знакомы. Это позволяет вам опираться на уже сложившуюся интуицию набора данных, чтобы вы могли быстрее использовать эту технологию. (Кроме того, именно поэтому мы так регулярно используем набор данных StackExchange SciFi при представлении наших новых идей о Solr .)

При приближении к графику база данных технологий , такой как Neo4j , если вы , как Avid в виде пользователь Twitter , как я тогда пуф у вас уже есть лучший возможный набор данных для ознакомления с технологией — ваша собственной социальной сетью. И этот пост поможет вам загрузить и настроить Neo4J, настроить приложение Twitter (необходимое для доступа к API Twitter), развернуть вашу социальную сеть, а также любую другую социальную сеть, которая вас может заинтересовать. На этом этапе мы будем опросить сеть, используя Neo4J и синтаксис Cypher. Поехали!

Установка и настройка Neo4J

Поскольку мы не настраиваем Neo4J для производственного использования, эта часть очень проста. Просто перейдите на страницу загрузки Neo4J , нажмите на эту гигантскую синюю кнопку загрузки, и через 36.1M у вас будет собственная копия Neo4J. Разархивируйте его в какое-нибудь разумное место на вашем компьютере, перейдите в этот каталог и просто введите команду bin/neo4j start. (Как только вы закончите, bin/neo4j stopA отключит Neo4J.) Теперь, если вы укажете свой браузер на http: // localhost: 7474 и увидите вещи (а не их отсутствие), то вы готовы начать переложить данные в Neo4J. ,

Готовя Твиттер

Вам нужно будет создать приложение Twitter, прежде чем вы сможете начать разрывать свои соединения, потому что вам нужны учетные данные приложения для доступа к API Twitter. Но не волнуйтесь, это буквально занимает меньше минуты. Просто перейдите на страницу приложений разработчика Twitter, войдите в систему, и появится еще одна большая синяя кнопка, на этот раз с надписью «Создать новое приложение» — нажмите ее! Заполнив действительно короткую форму, отметив флажок «Я слепо согласен с тем, что включено в этот юридический договор», введя строку CAPTCHA и нажав кнопку «Создать собственное приложение для Twitter», вы действительно получите свой собственный Twitter приложение. Вы попадете на экран, содержащий сведения о вашем новом приложении, но самое главное — учетные данные OAuth. Изначально у вас не будет жетонов доступа, но вы можете нажать кнопку «Создать жетоны доступа» внизу, и в следующий раз, когда вы обновите страницу (подождите несколько секунд), вы увидите, что ключи доступа доступны. Следите за учетными данными здесь, потому что вам нужно будет обратиться к ним в ближайшее время.

Зачистка ваших социальных кругов из Twitter

Посмотрите на мой скрипт Python в TwitterScraper . Хотя это еще не самый красивый код, на самом деле это не имеет значения, потому что здесь не так много! Давайте на минутку пройдемся по нему. В первом разделе вы настраиваете Twitter и Neo4J. Естественно, вам pip installпонадобятся библиотеки Tweepy и Py2Neo, но у них нет никаких странных зависимостей, поэтому это не должно быть проблемой. Также обратите внимание, что именно здесь должны использоваться все ключи доступа для вашего приложения Twitter. Идите вперед и скопируйте туда свои учетные данные. Теперь вы должны быть готовы к работе.

Оставшийся код включает в себя две функции. Первый, create_or_get_nodeсоздает или получает узел (в данном случае пользователя Twitter) от Neo4J id_str, и, если он создает узел в первый раз, он также вставляет все соответствующие метаданные пользователя в Neo4J. Кроме того, по create_or_get_nodeжеланию берется список меток, которые впоследствии будут использоваться для группировки определенных пользователей вместе. Вторая функция. insert_user_with_friendsпринимает пользователя Twitter (через его отображаемое имя), извлекает все соответствующие метаданные для этого пользователя из API Twitter и вставляет его в Neo4J. Эта функция будет делать то же самое для всех людей, за которыми следует этот пользователь Twitter. И, наконец, insert_user_with_friendsустановит FOLLOWSсвязь, связывающую пользователя Twitter с теми, за кем она следует. Опять здесь,insert_user_with_friendsпринимает необязательный список меток, которые можно использовать для группировки начальных узлов (те, которые следуют , не помечаются).

Последний кусочек сценария — забавная часть. Здесь вы программно выкладываете социальные сети и отдельных лиц, за которыми вы хотите выслеживать… э-э… наблюдать. Для вашего удобства я добавил всю команду OpenSource Connections, а также нескольких известных людей из сообщества Neo4J. Я также включил групповые ярлыки, которые, хотя и были довольно разумными дескрипторами для этих людей и групп. Как говорится в последнем комментарии в коде, обязательно добавьте несколько человек, на которых вы подписаны. Помните, что цель здесь — создать набор данных, с которым вы в высшей степени знакомы. Когда вы довольны набором данных, запустите его:python TwitterScraper.py, Он будет сбрасывать 200 пользователей одновременно и вставлять их в Neo4J как можно быстрее. Вскоре программа достигнет предела скорости Твиттера, после чего скрипт будет ждать, пока ограничение скорости не будет снято, и продолжит сбрасывать оставшиеся данные. Все вместе вы можете планировать получать около 200 обновлений в минуту.

Начните проникать в социальную сеть!

Теперь самое интересное; давайте начнем собирать некоторые запросы и собирать интересные данные. Во всех приведенных ниже примерах мы будем использовать браузер Neo4J по умолчанию, который вы все равно найдете по адресу http: // localhost: 7474 /. Здесь мы используем язык запросов Cypher. В этом посте не будет слишком подробно рассказано о самом синтаксисе Cypher, но вы можете посмотреть очень богатую документацию Neo4J . Кроме того, в качестве примера я буду использовать свое собственное псевдоним в Twitter «JnBrymn», поэтому не стесняйтесь заменять мое псевдоним своим собственным и пробовать запросы самостоятельно.

Прежде всего, давайте удостоверимся, что введенные данные кажутся разумными. Самое очевидное, что нужно сделать, это убедиться, что мы на самом деле в наборе данных:

MATCH (n {screen_name:"JnBrymn" }) 
RETURN n

Вверх появляется оранжевый узел, представляющий меня. И если я нажимаю на узел, я вижу список всех моих метаданных.

Снимок экрана 2013-11-27 в 12.57.12

Интересно, сколько пользователей мы сейчас проиндексировали?

MATCH (n) 
RETURN count(*)

7098 пользователей, неплохо. Сколько вы подписаны?

MATCH (n {screen_name:"JnBrymn"})-[:FOLLOWS]->(o)
RETURN count(*)

371 — да, это выглядит правильно. И посмотрите, насколько прост Cypher — вы рисуете ASCII-искусство соединений узлов. Так что легко задать следующий очевидный вопрос: сколько меня преследует? Здесь я просто переключаю направление стрелки отношения:

MATCH (n {screen_name:"JnBrymn"})<-[:FOLLOWS]-(o) 
RETURN count(*)

Хм … всего 10 подписчиков. Я действительно такой непопулярный? (Проверяю Twitter сейчас.) Нет, говорит, что у меня 460 друзей. О, правильно, если вы помните, мы собираем исходящие отношения FOLLOWS только от наших начальных пользователей (помечены как SeedNode). Причина этого в том, что за некоторыми людьми, например Джастином Бибером, следят миллионы пользователей Твиттера! И мы, конечно, не хотим пока отслеживать это.

Но все это заставляет меня задуматься о тех семенных пользователях, за которыми я следую, кто не последует за мной назад?

MATCH (n {screen_name:"JnBrymn"})-[:FOLLOWS]->(o:SeedNode)
WHERE NOT (o)-[:FOLLOWS]->(n)
RETURN o.screen_name

Это возвращает одно имя: mesirii. Это Майкл Голод, один из горячих снимков Neo4J. Если он не последует за мной, то я определенно пока не проделываю хорошую работу по проникновению в сообщество Neo4J. Неважно … Держу пари, он в любом случае последователь @justinbeiber … давайте проверим:

MATCH (n:SeedNode)-[:FOLLOWS]->(o {screen_name:"justinbieber"})
RETURN n.screen_name

К сожалению … никто из нашего списка не следует за Джастином Бибером … Я был уверен, что у меня будет хороший корм для шантажа! (Но, эй, может быть, вы обнаружите несколько белиберов в вашем собственном наборе данных :П)

Хм … ну, если я собираюсь проникнуть в сообщество Neo4J, мне нужно найти мои вероятные векторы. Давайте создадим список всех людей, которые следуют за мной, и упорядочим их по количеству подписчиков Neo4J. Может быть, я смогу познакомиться с этими друзьями:

MATCH (n:Neo)-[:FOLLOWS]->(m:SeedNode {screen_name:"JnBrymn"}),
      (n)-[:FOLLOWS]->(o:Neo)
RETURN count(*), n.screen_name
ORDER BY count(*) desc
LIMIT 10

Это возвращает:

count(*) |  n.screen_name
---------+---------------
13       |  wefreema
11       |  technige

Милый, так что мои друзья wefreema и technige выглядят как мои привратники к сообществу Neo4J. Осталось только определить, к каким людям мне нужно подключиться.

MATCH (n:Neo)-[:FOLLOWS]->(o)
RETURN count(*), o.screen_name
ORDER BY count(*) desc
LIMIT 10

Этот запрос перечисляет самых популярных людей из сообщества Neo4J, основываясь на том, за кем следуют мои начальные узлы Neo. И результаты этого запроса выглядят так:

count(*) |  n.screen_name
---------+---------------
13       |  mesirii
12       |  emileifrem
12       |  jimwebber
12       |  digitalstain
11       |  apcj
11       |  cleishm
11       |  pandamonial
11       |  iansrobinson
11       |  p3rnilla
11       |  neo4j

Как и ожидалось, многие из этих людей — это SeedNode, которые я выбрал, потому что я уже знал, что они лидеры в сообществе: mesirii, emileifrem, jimwebber, p3rnilla, neo4j . Но кто эти парни: digitalstain, apcj, cleishm, pandamonial, iansrobinson ? После быстрого поиска их в Твиттере, я думаю, что мы обнаружили несколько новых ключевых игроков в пространстве Neo4J.

Вывод

Это только вступление к Neo4J. Есть много вещей, о которых мы могли бы поговорить здесь: я мог бы подробнее рассказать о синтаксисе запросов Cypher, я мог бы добавить индексы, чтобы ускорить время запросов, и я мог бы собрать некоторые даже более безумные запросы Cypher, которые использовать более широкий синтаксис Cypher. Но это хорошее начало. Я думаю, что вы согласитесь: просмотрев свой собственный социальный график в Twitter, вы сразу же подумаете о вопросах, которые хотите задать, и лучше поймете, какие есть возможности.

Хотите узнать больше о Cypher? Ну, я мог бы просто стать соавтором книги на эту тему! Оставайтесь в курсе.

Обновление — краудсорсинг коллекции ключевых фигур сообщества

Очевидно, некоторые люди уже используют этот пост для поиска в своих сообществах интересов. Давайте помогать друг другу. Если вы отслеживаете сообщество, то прокомментируйте ниже с помощью имен пользователей в Twitter. Я отредактирую комментарии позже, чтобы объединить чистые списки.