TP : Découverte de Neo4j et du langage Cypher
De WIKOM
Révision datée du 1 novembre 2024 à 16:50 par Admin (discussion | contributions) (→8. Export des résultats)
TP : Découverte de Neo4j et du langage Cypher
Objectif
Apprendre à :
- Comprendre les bases de données orientées graphes.
- Installer et configurer Neo4j.
- Manipuler les données de graphe avec Cypher (création de noeuds, relations, requêtes).
- Interroger et analyser des données de graphe.
1. Introduction aux bases de données orientées graphe
Neo4j est une base de données orientée graphe, idéale pour gérer des réseaux sociaux, des chaînes logistiques, des réseaux de dépendance, etc. Dans ce modèle :
- Noeuds : Les entités de votre graphe (par exemple :
Person
,City
). - Relations : Les connexions entre les noeuds (par exemple :
FRIEND
,LIVES_IN
). - Propriétés : Attributs stockés pour chaque noeud ou relation (par exemple :
name
,age
,date
).
2. Mise en place de Neo4j
Installation de Neo4j
- Télécharger Neo4j : Rendez-vous sur Neo4j Download Center pour télécharger la version compatible avec votre système d'exploitation.
- Installer Neo4j Desktop :
- Suivez les instructions d'installation fournies sur le site.
- Lancez Neo4j Desktop et créez un projet en cliquant sur “New Project” (nommez-le "TP_Neo4j").
- Créez une base de données (Database) dans votre projet et démarrez-la.
- Accéder à Neo4j Browser :
- Ouvrez
Neo4j Browser
pour exécuter les requêtes Cypher. - Par défaut, accédez-y à l'adresse suivante :
http://localhost:7474
.
- Ouvrez
- Se connecter :
- Par défaut, utilisez l'utilisateur
neo4j
et le mot de passe défini lors de l’installation.
- Par défaut, utilisez l'utilisateur
Modélisation du graphe : Cas d'un réseau social simple
Dans ce TP, nous allons modéliser un réseau social. Voici les éléments principaux :
- Noeuds :
Person
: chaque personne possède des attributsname
,age
, etcity
.City
: ville avec l'attributname
.
- Relations :
FRIEND
: relation d'amitié entre deux personnes.LIVES_IN
: relation entre une personne et sa ville.
- Exemple de données :
- Noeuds :
- Alice, 30 ans, vit à Paris.
- Bob, 25 ans, vit à Lyon.
- Carol, 35 ans, vit à Paris.
- Relations :
- Alice est amie avec Bob et Carol.
- Alice et Carol vivent à Paris ; Bob vit à Lyon.
- Noeuds :
Création du graphe avec Cypher
Étape 1 : Création des noeuds
- Dans Neo4j Browser, exécutez les commandes Cypher pour créer les noeuds.
CREATE (a:Person {name: 'Alice', age: 30, city: 'Paris'});
CREATE (b:Person {name: 'Bob', age: 25, city: 'Lyon'});
CREATE (c:Person {name: 'Carol', age: 35, city: 'Paris'});
CREATE (paris:City {name: 'Paris'});
CREATE (lyon:City {name: 'Lyon'});
Étape 2 : Création des relations
- Maintenant, créez les relations entre les noeuds.
// Amis
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:FRIEND]->(b);
MATCH (a:Person {name: 'Alice'}), (c:Person {name: 'Carol'})
CREATE (a)-[:FRIEND]->(c);
// Lien avec les villes
MATCH (a:Person {name: 'Alice'}), (paris:City {name: 'Paris'})
CREATE (a)-[:LIVES_IN]->(paris);
MATCH (c:Person {name: 'Carol'}), (paris:City {name: 'Paris'})
CREATE (c)-[:LIVES_IN]->(paris);
MATCH (b:Person {name: 'Bob'}), (lyon:City {name: 'Lyon'})
CREATE (b)-[:LIVES_IN]->(lyon);
- Vérifiez que vos noeuds et relations ont été correctement créés en exécutant :
MATCH (n) RETURN n;
Manipulation des données
Ajouter des informations supplémentaires
- Ajouter un nouveau noeud pour David, un ami de Bob vivant à Lyon
CREATE (d:Person {name: 'David', age: 28, city: 'Lyon'});
MATCH (b:Person {name: 'Bob'}), (d:Person {name: 'David'})
CREATE (b)-[:FRIEND]->(d);
MATCH (d:Person {name: 'David'}), (lyon:City {name: 'Lyon'})
CREATE (d)-[:LIVES_IN]->(lyon);
Modifier des données
- Changer la ville de Bob pour Paris :
MATCH (b:Person {name: 'Bob'})
SET b.city = 'Paris';
MATCH (b)-[r:LIVES_IN]->(lyon:City {name: 'Lyon'})
DELETE r;
MATCH (b), (paris:City {name: 'Paris'})
CREATE (b)-[:LIVES_IN]->(paris);
Requêtes Cypher : Interroger le graphe
Requêtes de base
- Lister les noms de toutes les personnes :
MATCH (p:Person) RETURN p.name;
- Trouver les personnes vivant à Paris :
MATCH (p:Person)-[:LIVES_IN]->(c:City {name: 'Paris'})
RETURN p.name;
- Trouver tous les amis d'Alice :
MATCH (a:Person {name: 'Alice'})-[:FRIEND]->(friend)
RETURN friend.name;
- Trouver les amis des amis de Bob :
MATCH (b:Person {name: 'Bob'})-[:FRIEND]->()-[:FRIEND]->(fof)
RETURN DISTINCT fof.name;
Requêtes avancées
- Trouver toutes les personnes âgées de plus de 30 ans et vivant à Paris :
MATCH (p:Person)-[:LIVES_IN]->(c:City {name: 'Paris'})
WHERE p.age > 30
RETURN p.name, p.age;
- Lister toutes les personnes avec leur nombre d’amis :
MATCH (p:Person)-[:FRIEND]->(f)
RETURN p.name AS person, COUNT(f) AS friend_count
ORDER BY friend_count DESC;
- Lister toutes les villes avec le nombre d’habitants :
MATCH (c:City)<-[:LIVES_IN]-(p:Person)
RETURN c.name AS city, COUNT(p) AS population
ORDER BY population DESC;
7. Suppression de noeuds et relations
- Supprimer la relation d'amitié entre Alice et Carol :
MATCH (a:Person {name: 'Alice'})-[r:FRIEND]->(c:Person {name: 'Carol'})
DELETE r;
- Supprimer un noeud et toutes ses relations (par exemple, le noeud David) :
MATCH (d:Person {name: 'David'})
DETACH DELETE d;
8. Export des résultats
- Exporter une requête en CSV (optionnel) :
- Neo4j permet d’exporter le résultat de requêtes en CSV. Par exemple, pour exporter les personnes et leur nombre d'amis :
CALL apoc.export.csv.query(
"MATCH (p:Person)-[:FRIEND]->(f) RETURN p.name AS person, COUNT(f) AS friend_count",
"/path/to/export/friends_count.csv",
{}
)
9. Chargement de données avec LOAD CSV
Objectif de cette partie
Nous allons voir comment :
- Charger un fichier CSV contenant des données.
- Créer des noeuds et des relations en utilisant les données importées.
- Utiliser
LOAD CSV
pour des imports plus complexes.
Exemple de fichier CSV
Supposons que vous ayez un fichier persons.csv
qui contient des informations sur des personnes et un autre fichier friendships.csv
qui contient des relations d'amitié entre elles.
9.1 Structure des fichiers CSV
Fichier persons.csv
(personnes avec leurs attributs) :