Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdle:tmes:graphes-neo4j

Calculs sur les graphes en Neo4J

Le graphe qui sera utilisé pendant le TME représente des personnages de la bande dessinée “Asterix” avec les albums dans lesquels ils apparaissent. Les commandes de création de ce graphe se trouvent dans ce fichier à télécharger.

Création du graphe

Créer et visualiser le graphe en copiant dans la ligne de commande les instructions présentes dans le fichier.

Après l'exécution de cette commande l'interface affichera le message suivant:

Created 42 nodes, set 128 properties, created 67 relationships

Remarque: pour passer à la ligne suivante dans la ligne de commande du browser Neo4J dans le cas d'une requête sur plusieurs lignes utiliser Shift+Enter. Pour exécuter une commande sur plusieurs lignes utiliser Ctrl+Enter.

Exemple de données (voir également la source de ce graphe):

  • noeuds personnages avec des propriétés, par exemple:
"personnageid": 56,
  "nationalite": "Egyptienne",
  "name": "Cleopatre",
  "personnagetype": "Les autres"
  • noeuds album, sans étiquette, ont des propriétés, par exemple:
   "name": "Asterix le Gaulois",
  "albumid": 1,
  "premiereedition": "1961",
  • noeuds type de personnage, par exemple:
 "name": "Les Romains",
  "personnagetypeid": 2
  • noeuds de type nationalité, par exemple:
  "name": "Egyptien",
  "nationaliteid": 9
  • arcs dirigés avec une étiquette COMPAGNON_AVENTURE sans propriétés qui relient des noeuds personnages
  • arcs dirigés avec une étiquette APPARAIT_DANS sans propriétés qui relient des noeuds personnages et albums
  • arcs dirigés avec une étiquette PERSONNAGE_TYPE sans propriétés qui relient des noeuds personnages et des noeuds type de personnage
  • arcs dirigés avec une étiquette NATIONALITE sans propriétés qui relient des noeuds personnages et des noeuds nationalité
Interrogation

Écrire les requêtes suivantes:

Q1) Visualiser le graphe (afficher tous les noeuds et tous les arcs). Quelles sont les propriétés et les étiquettes des noeuds et des arcs?

Q2) Ajouter une étiquette :PERSONNAGE aux noeuds qui ont une propriété “personnageid” (utiliser set et exists).

Réponse: Added 11 labels

Q3) Compter le nombre de noeuds.

Réponse: 42

Q4) Compter le nombre d'arcs.

Réponse: 67

Q5) Trouver l'étiquette du noeud dont le nom est 'Jules Cesar'.

Réponse: [“PERSONNAGE”]

Q6) Trouver l'étiquette des arcs vers le noeud dont le nom est 'Le Domaine des dieux'.

Réponse: “APPARAIT_DANS”

Q7) Afficher toutes les propriétés de n'importe quels trois noeuds parmi les noeuds de type PERSONNAGE.

Réponse:

{
  "personnageid": 56,
  "nationalite": "Egyptienne",
  "name": "Cleopatre",
  "personnagetype": "Les autres"
}
{
  "personnageid": 44,
  "nationalite": "Romain/Egyptien",
  "personnagetype": "Les autres",
  "name": "Cesarion (Ptolemee XVI)"
}
{
  "personnageid": 91,
  "nationalite": "Romain",
  "name": "Jules Cesar",
  "personnagetype": "Les Romains"
}

Q8) Afficher les noms des personnages qui n'ont pas d'arc sortant dont le type est COMPAGNON_AVENTURE.

Réponse:

"Cesarion (Ptolemee XVI)"
"Numerobis"
"Brutus"
"Assurancetourix"
"Briseradius"
"Epidemais"
"Lupus"

Q9) Calculer les triangles du graphe et afficher seulement deux parmi ces triangles (pour chacun de ces deux triangles afficher les noms des noeuds correspondants). On considère le graphe comme étant non-dirigé.

Réponse:

"Les Romains"	"Caius Obtus"	"Jules Cesar"
"Caius Obtus"	"Jules Cesar"	"Les Romains"

Q10) Afficher les noms des trois couples de personnages qui apparaissent dans le même album, pour chaque couple de personnages affichez l'id de album commun.

Réponse:

"Jules Cesar"	"Caius Obtus"	4
"Cleopatre"	"Numerobis"	34
"Jules Cesar"	"Cleopatre"	6

Q11) Afficher le sous-graphe des personnages reliés par des arcs de type COMPAGNON_AVENTURE qui ne contient pas 'Cleopatre'.

Réponse:

afficher les propriétés de 9 noeuds et 11 arcs de type  COMPAGNON_AVENTURE.

Q12) Afficher le sous-graphe contenant comme noeuds source 'Cleopatre', 'Jules Cesar' ou 'Caius Obtus' et comme noeuds destination 'Cesarion (Ptolemee XVI)' ou 'Caligula Alavacomgetepus'. Les noeuds sont reliés par des arcs de type COMPAGNON_AVENTURE.

Réponse:

 
│56              │44              │
├────────────────┼────────────────┤
│91              │44              │
├────────────────┼────────────────┤
│91              │38              │
└────────────────┴────────────────┘

Q13) Afficher le sous-graphe contenant les noeuds qui se trouvent à une distance 3 de 'Cleopatre' ainsi que les arcs de type COMPAGNON_AVENTURE qui les relient. On considère uniquement les arcs dirigés de type COMPAGNON_AVENTURE.

Réponse:

10 noeuds de type PERSONNAGE et 14 arcs de type COMPAGNON_AVENTURE

Q14) Afficher le plus court chemin et sa longueur entre Jules Cesar et Epidemais.

Réponse:

3 noeuds PERSONNAGE, 3 arcs de type COMPAGNON_AVENTURE, longueur de chemin : 2

Q15) Afficher le plus long chemin de type COMPAGNON_AVENTURE et sa longueur entre Jules Cesar et Brutus (graphe non-dirigé).

Réponse:

5 noeuds PERSONNAGE, 7 arcs de type COMPAGNON_AVENTURE, longueur de chemin : 7

Q16) Afficher les 3 noeuds qui ont le degré le plus élevé. Affichez pour chacun de ces noeuds son nom et son degré. Pour calculer le degré considérer uniquement les arcs de type NATIONALITE ou PERSONNAGE_TYPE.

Réponse:

"Les Romains"	6
"Romain"	6
"Les autres"	4

Q17) Afficher pour chaque couple de personnages reliés par un arc (non-dirigé) de type COMPAGNON_AVENTURE le nombre d'albums qu'ils ont en commun (afficher le triplet contenant les noms des personnages et le nombre d'albums en commun). Chaque couple de personnages doit apparaître une seule fois. Trier par nombre total d'albums décroissant. Réponse:

"Cleopatre"	"Jules Cesar"	3
"Cleopatre"	"Numerobis"	2
"Cesarion (Ptolemee XVI)"	"Cleopatre"	1
"Caius Obtus"	"Jules Cesar"	1
"Caligula Alavacomgetepus"	"Jules Cesar"	1

Q18) Modifier la requête précédente afin d'ajouter à l'arc de type COMPAGNON_AVENTURE qui relie les personnages retournés une propriété 'albums' dont la valeur est le nombre total d'albums en commun. Retourner les noms des personnages ainsi que la propriété ajoutée (utiliser WITH pour enchaîner les opérations).

Réponse:

"Cesarion (Ptolemee XVI)"	"Cleopatre"	1
"Caligula Alavacomgetepus"	"Jules Cesar"	1
"Caius Obtus"	"Jules Cesar"	1
"Cleopatre"	"Jules Cesar"	3
"Cleopatre"	"Numerobis"	2

Q19) Degré total des noeuds

  1. Afficher pour chaque valeur de degré le nombre de noeuds avec ce degré. Considérer tous les arcs, ordonner par degré.
  2. Pour chaque noeud enregistrer son degré comme nouvelle propriété. Affichez les 3 premières noeuds avec le degré le plus élevé.

Chacune de ces questions impliquent un enchaînement de deux opérations (utiliser WITH).

Réponse:

1	23
2	2
3	7
4	2
5	2
6	3
9	1
10	1
31	1

et

"Jules Cesar"	31
"Cleopatre"	10
"Caius Obtus"	9

Q20) Afficher pour chaque noeud son nom et son degré sortant. Pour les noeuds sans liens sortants afficher 0. Ordonner par ordre décroissant des degrés. Considérer uniquement les arcs de type NATIONALITE et PERSONNAGE_TYPE.

Q21) Afficher les noms des personnages sur le plus court chemin de type COMPAGNON_AVENTURE entre Numerobis et Assurancetourix (utiliser la fonction EXTRACT) (graphe non-dirigé).

Q22) Afficher le diamètre du graphe en considérant uniquement les noeuds de type PERSONNAGE et les arcs de type COMPAGNON_AVENTURE

Q23) Afficher les noms des noeuds sur tous les plus courts chemins entre Numerobis et Assurancetourix. Afficher uniquement les plus courts chemins contenant plus de 4 noeuds (utiliser la fonction EXTRACT)(graphe non-dirigé).

Q24) On considère la propriété 'albums' des arcs de type COMPAGNON_AVENTURE comme poids des arcs. Afficher le chemin avec la distance la plus courte entre Numerobis et Assurancetourix qui considère ces poids (même résultat que celui obtenu avec l'algorithme de Dijkstra). Considérer uniquement les arcs de type COMPAGNON_AVENTURE et leur poids (aide (utiliser shortestPath… WITH REDUCE): WITH REDUCE(dist = 0, rel in rels(path) | dist+rel.albums)).

Q25) Effacer tous les noeuds et leur arcs

Q26) Effacer tous les nodes qui n'ont pas d'arcs

site/enseignement/master/bdle/tmes/graphes-neo4j.txt · Dernière modification: 24/01/2020 12:12 par camelia