В рамках продвижения нашего нового курса по графовой аналитики больших данных, сегодня рассмотрим, как создать граф социальных связей в веб-консоли Neo4j и сделать запросы к нему на Cypher — внутреннем SQL-подобном языке этой NoSQL-СУБД.
Как построить граф социальных связей в Neo4j
Возьмем в качестве примера набор деловых и личных взаимоотношений между 13 людьми:
- Анна, Николай, Михаил и Олег являются тренерами, за расписание которых отвечают менеджеры по продажам (Борис, Ольга, Иван, Петр);
- Ольга управляет другими менеджерами, имеет родственницу Алису, дружит с Лизой и взаимодействует с Сергеем;
- Анна ставит задачи и проверяет результаты работы Лизы и Олега, дружит с Никитой и знает Николая, который знает Ивана и взаимодействует с Ольгой;
- Сергей дружит с Дмитрием, который является родственником Ивана и Михаила.
Чтобы построить граф связи в Neo4j, откроем ее веб-консоль по адресу https://console.neo4j.org/ и введем там следующий запрос на создание узлов (людей) и отношений между ними (связей):
create (Anna:Crew:Trainers {name: 'Анна'}), (Nick:Trainers {name: 'Николай'}), (Mike:Trainers {name:'Михаил'}),(Oleg:Trainers {name:'Олег'}), (Boris:Crew:Sales {name: 'Борис'}), (Olga:Sales {name: 'Ольга'}), (Ivan:Sales {name:'Иван'}),(Peter:Sales {name:'Петр'}), (Lisa:Crew {name:'Лиза'}),(Anna)-[:knows]->(Nick), (Ivan)-[:scheduls]->(Anna), (Olga)-[:deals]->(Nick), (Nick)-[:knows]->(Ivan), (Olga)-[:manages]->(Ivan), (Olga)-[:manages]->(Peter),(Olga)-[:manages]->(Boris), (Anna)-[:manages]->(Lisa), (Anna)-[:manages]->(Oleg), (Peter)-[:scheduls]->(Nick), (Olga)-[:scheduls]->(Oleg),(Boris)-[:scheduls]->(Mike), (Alisa:Crew {name:'Алиса'}),(Nikita:Crew {name:'Никита'}), (Dima:Crew {name:'Дмитрий'}),(Serg:Crew {name:'Сергей'}), (Ivan)-[:family]->(Dima), (Lisa)-[:friend]->(Olga),(Nikita)-[:friend]->(Anna),(Dima)-[:friend]->(Serg), (Serg)-[:deals]->(Olga), (Alisa)-[:knows]->(Ivan),(Mike)-[:family]->(Dima), (Alisa)-[:family]->(Olga)
Далее рассмотрим, как проанализировать созданный граф, выполнив к нему запросы.
Пишем запросы на Cypher
Сделаем к этому графу социальных связей несколько запросов. Например, выясним, кто с кем дружит. Для этого следует написать запрос сопоставления (MATCH) на внутреннем SQL-подобном языке запросов Cypher, который поддерживает Neo4j:
match (n:Crew)-[r:friend]-(m) return n.name, m.name
В ответ вернется таблица сопоставления узлов, которые связаны отношениями friend. Усложним MATCH-запрос, добавив фильтрацию. К примеру, найдем, с кем взаимодействует Ольга, т.е. с какими узлами графа узел с этим именем связан отношениями deals.
Для этого напишем следующий Cypher-запрос:
match (n{name: 'Ольга'})-[r:deals]-(m) return n.name, m.name
Получим список сотрудников отдела продаж и людей, с которыми они связаны:
match (n:Sales)-[r]-(m) return n.name, m.name
Выделим из этого списка только тренеров:
match (n:Sales)-[r]-(m:Trainers) return n.name, m.name
Разумеется, это далеко не все примеры запросов, которые можно делать в Neo4j с помощью Cypher, анализируя граф социальных связей. Про другие примеры подобных исследований читайте здесь.
Как сделать подобный проект самостоятельно, а также применять другие методы и средства анализа графов для аналитики больших данных в реальных проектах, вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники