Différences entre les versions de « Initiation à la création d’un graphe de connaissances »

De WIKOM

 
(20 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Catégorie:Travaux Pratiques]]
== Objectif ==
== Objectif ==
L’objectif est de vous initier à la création d’un graphe de connaissances en exploitant la technologie Neo4J. Il s’agit à partir d’un jeu de données de créer un modèle de connaissances et à partir de ces deux éléments de charger la base de graphe.  
L’objectif est de vous initier à la création d’un graphe de connaissances en exploitant la technologie [https://neo4j.com/ Neo4J]. Il s’agit à partir d’un jeu de données de créer un modèle de connaissances et à partir de ces deux éléments de charger la base de graphe.  


== Préparer son environnement de travail ==
== Préparer son environnement de travail ==
=== En local ===
Télécharger Neo4J Desktop : https://neo4j.com/download/
=== Dans le nuage (ie Cloud) ===
La société Neo4J vous permet après inscription d'exploiter une instance de base de donnée gratuitement : https://neo4j.com/cloud/aura/


== Concevoir un modèle de connaissances ==
== Concevoir un modèle de connaissances ==
Ligne 8 : Ligne 15 :
=== Premier Jeu de données : Liste des CNPEs ===
=== Premier Jeu de données : Liste des CNPEs ===
Le premier jeu de données est en lien avec le [https://fr.wikipedia.org/wiki/Liste_des_r%C3%A9acteurs_nucl%C3%A9aires_en_France Parc Nucléaire de Production Français].
Le premier jeu de données est en lien avec le [https://fr.wikipedia.org/wiki/Liste_des_r%C3%A9acteurs_nucl%C3%A9aires_en_France Parc Nucléaire de Production Français].
[[Fichier:WikipediaCNPEs.jpg|alt=Fiche Wikipédia CNPEs|Fiche Wikipédia CNPEs|vignette]]
[[Fichier:WikipediaCNPEs.jpg|alt=Fiche Wikipédia CNPEs|Fiche Wikipédia CNPEs|cadre]]


A partir de la page wikipédia ci contre et des pages afférentes, on obtient un jeu de données disponible au format csv ici : [https://docs.google.com/spreadsheets/d/e/2PACX-1vRmy95-d9KoFcDtsC9t4VTDPRF2ZG2cWaa4BSj3kRVFtSUGxZRw186SsgQvF7RZYv1J96tUFOVu7Tr6/pub?output=csv]  
A partir de la page wikipédia ci contre et des pages afférentes, on obtient un jeu de données disponible au format csv ici : [https://docs.google.com/spreadsheets/d/e/2PACX-1vRmy95-d9KoFcDtsC9t4VTDPRF2ZG2cWaa4BSj3kRVFtSUGxZRw186SsgQvF7RZYv1J96tUFOVu7Tr6/pub?output=csv]  
[[Fichier:CNPEsCSV.jpg|CNPE en csv|vignette|372x372px]]
[[Fichier:CNPEsCSV.jpg|CNPE en csv|cadre]]
Les en-têtes de colonnes sont les suivantes :
Les en-têtes de colonnes sont les suivantes :
* Trigramme_centrale,
* Trigramme_centrale,
Ligne 33 : Ligne 40 :


Il s’agit d’identifier les objets élémentaires qui vont permettre que votre graphe de connaissance soit une représentation la plus riche possible à partir des données disponibles. Regarder les colonnes et leur contenu est une bonne stratégie. Par exemple, employez Excel pour explorer les données avec les filtres automatiques.
Il s’agit d’identifier les objets élémentaires qui vont permettre que votre graphe de connaissance soit une représentation la plus riche possible à partir des données disponibles. Regarder les colonnes et leur contenu est une bonne stratégie. Par exemple, employez Excel pour explorer les données avec les filtres automatiques.
[[Fichier:ExcelCNPEs.jpg|Données CNPE dans Excel|vignette|376x376px]]
[[Fichier:ExcelCNPEs.jpg|Données CNPE dans Excel|cadre|centré]]
Vous pouvez dessiner votre modèle à la main ou dans un éditeur graphique de votre choix :  
Vous pouvez dessiner votre modèle à la main ou dans un éditeur graphique de votre choix :  


Ligne 51 : Ligne 58 :
}}
}}


=== Prise en main de la base de graphe ===
== Injecter dans la base de graphe ==
 
=== Le langage cypher ===
La base de graphe se manipule avec le langage Cypher. La synthèse de ce langage est disponible ici : [https://neo4j.com/docs/cypher-refcard/current/]
[[Fichier:RefCard langage Cypher Neo4J.jpg|alt=RefCard Cypher Neo4J|centré|cadre|RefCard Cypher Neo4J]]
 
=== Préparer les données sources avant l'injection ===
 
* Préparer les fichiers en CSV
* Convertir les fichiers en UTF8 (utiliser un éditeur de texte du type Notepad++ ou SublimeText)
* Placer les fichiers à un endroit accessible par la base de graphe :
** un stockage en ligne permettant un accès via http
** '''dans le répertoire import de l'instance Neo4J'''
 
{| class="wikitable"
|[[Fichier:Ouvrir Répertoire Neo4J.png|alt=Ouvrir Répertoire Neo4J dans Neo4JDesktop|centré|vignette|Ouvrir Répertoire Neo4J dans Neo4JDesktop]]
|[[Fichier:Ouvrir répertoire Import Neo4J Desktop.png|alt=Ouvrir répertoire Import Neo4J Desktop|centré|vignette|Ouvrir répertoire Import Neo4J Desktop]]
|}
 
=== Le Browser Neo4J ===
{| class="wikitable"
|[[Fichier:Ouvrir la console Neo4J.png|alt=Ouvrir la console Neo4J|centré|vignette|400x400px|Ouvrir le Browser Neo4J]]
|[[Fichier:Le Browser Neo4J.png|alt=Le Browser Neo4J|centré|vignette|400x400px|Le Browser Neo4J]]
|}
 
=== Lire des données à partir du Browser Neo4J ===
'''''A partir d'ici les données sont lues à partir du répertoire local d'import de Neo4J. Le fichier exploité est  [https://docs.google.com/spreadsheets/d/e/2PACX-1vRmy95-d9KoFcDtsC9t4VTDPRF2ZG2cWaa4BSj3kRVFtSUGxZRw186SsgQvF7RZYv1J96tUFOVu7Tr6/pub?output=csv] évoqué ci dessus et renommé ListeCNPEs.csv.'''''
 
La commande pour lire un fichier de données (source en gras) est : 
LOAD CSV WITH HEADERS FROM ''''file:/ListeCNPEs.csv'''<nowiki/>' AS row RETURN row
On obtient le résultat suivant :[[Fichier:Lire un fichier CSV à partir de Neo4J.png|alt=Lire un fichier CSV à partir de Neo4J|centré|vignette|600x600px|Lire un fichier CSV à partir de Neo4J]]On peut spécifier la manière dont le fichier de données est délimité :
LOAD CSV WITH HEADERS  FROM 'file:/ListeCNPEs.csv' AS row '''FIELDTERMINATOR ';'''' RETURN row
La commande suivante ne lit qu’une propriété (“commune”) par ligne :
LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row '''RETURN row.Commune'''
[[Fichier:Lire pour chaque ligne la propriété Commune du Fichier .png|alt=Lire pour chaque ligne la propriété Commune du Fichier |centré|vignette|600x600px|Lire pour chaque ligne la propriété Commune du Fichier ]]
 
=== Charger des données ===
Cette page web explique de nombreux mécanisme pour charger des données dans la base : <nowiki>https://neo4j.com/developer/kb/import-csv-locations/</nowiki>
 
'''Créer des noeuds correspondant aux communes :'''
LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row '''CREATE (n:COMMUNE { nom: row.Commune })'''
[[Fichier:Création noeuds "commune".png|alt=Création noeuds "commune"|centré|vignette|600x600px|Création noeuds "commune"]]
'''Vider le graphe :'''
'''MATCH (n) DETACH DELETE n'''
[[Fichier:Vider la base.png|alt=Vider la base|centré|vignette|600x600px|Vider la base]]
'''Créer des noeuds en évitant les doublons avec la commande MERGE :'''
LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row '''MERGE''' (n:COMMUNE { nom: row.Commune })
[[Fichier:Créer des noeuds en évitant les doublons.png|alt=Créer des noeuds en évitant les doublons|centré|vignette|600x600px|Créer des noeuds en évitant les doublons]]
 
'''<br />Vider le graphe :'''
MATCH (n) DETACH DELETE n
'''A partir de la lecture des données on peut créer des noeuds et les lier entre eux en même temps :'''
LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row MERGE (n:COMMUNE { nom: row.Commune }) MERGE (m:DEPARTEMENT { nom: row.Département }) '''MERGE (n)-[:EST_DANS_LE_DEPARTEMENT]->(m)'''
 
=== Requêter les données ===
'''Obtenir tout le graphe :'''
'''MATCH (n)-[r]->(m) RETURN *'''
[[Fichier:Obtenir le graphe entier.png|alt=Obtenir le graphe entier|centré|vignette|600x600px|Obtenir le graphe entier]]
'''Obtenir les communes qui contiennent “ai” :'''
MATCH (n:COMMUNE) '''WHERE n.nom CONTAINS "ai"''' RETURN n
[[Fichier:Obtenir les communes contenant 'ai'.png|alt=Obtenir les communes contenant 'ai'|centré|vignette|600x600px|Obtenir les communes contenant 'ai']]
'''Obtenir les communes qui contiennent “ai” et les départements liés :'''
match '''(n:COMMUNE)-[r]->(m:DEPARTEMENT) where n.nom CONTAINS "ai"''' return *
[[Fichier:Obtenir les communes contenant "ai" et les départements liés.png|alt=Obtenir les communes contenant "ai" et les départements liés|centré|vignette|600x600px|Obtenir les communes contenant "ai" et les départements liés]]
 
=== Requêter les données et créer de nouvelles relations ===
'''Requête pour obtenir les communes commençant par “S” :'''
match (n:COMMUNE) '''where n.nom STARTS WITH "S"''' return *
[[Fichier:Les communes commençant par un "s".png|alt=Les communes commençant par un "s"|centré|vignette|600x600px|Les communes commençant par un "S"]]
'''Créer un noeud qui traduit la lettre “S” et lier les communes et y lier les communes qui commencent par la lettre “S” :'''
match (n:COMMUNE) '''where n.nom STARTS WITH "S" MERGE (s:LETTRE { nom: "S"}) MERGE (n)-[:COMMENCE_PAR_LA_LETTRE]->(s)''' return *
[[Fichier:Communes commençant par un "S" connectées à un noeud "S".png|centré|vignette|600x600px|Communes commençant par un "S" connectées à un noeud "S"]]
 
=== Créer un graphe complet ===
'''Vider le graphe :'''
MATCH (n) DETACH DELETE n
'''Exécuter la requête suivante (copier coller toutes les lignes ):'''<syntaxhighlight lang="cypher">
LOAD CSV WITH HEADERS  FROM 'file:/ListeCNPEs.csv' AS line FIELDTERMINATOR ',' MERGE (cnpe_root:DIRECTORY {_UID: "/ROOT/CNPE", _LABEL: "Les CNPES", _CLASS: "DIRECTORY"}) MERGE (tranche_root:DIRECTORY {_UID: "/ROOT/TRANCHE", _LABEL: "Les Tranches de Production", _CLASS: "DIRECTORY"})
 
MERGE (palier_root:DIRECTORY {_UID: "/ROOT/PALIER", _LABEL: "Les Paliers Technologiques", _CLASS: "DIRECTORY"})
 
MERGE (chronologie_root:DIRECTORY {_UID: "/ROOT/CHRONOLOGIE", _LABEL: "Les Chronologies", _CLASS: "DIRECTORY"})
 
MERGE (geographie_root:DIRECTORY {_UID: "/ROOT/GEOGRAPHIE", _LABEL: "Les Géographies", _CLASS: "DIRECTORY"}) MERGE (cnpe:CNPE { _UID: "/CNPE/"+line.Trigramme_centrale, _LABEL: "Centrale Nucléaire de "+line.Centrale_nucleaire  ,  _CLASS: "ITEM", Trigramme_centrale: line.Trigramme_centrale }) MERGE (cnpe_location:LOCALISATION { _UID: "/CNPE/LOCALISATION/"+line.Trigramme_centrale, _LABEL: "Localisation de la Centrale Nucléaire de "+line.Centrale_nucleaire ,  _CLASS: "GEODATAITEM", _LONGITUDE: line.longitude, _LATITUDE: line.latitude }) MERGE (flote:GEOGRAPHIE { _UID: "/GEOGRAPHIE/PARC_NUCLEAIRE_FRANCAIS", _LABEL: "Parc Nucléaire Français", _CLASS: "GEODATASET" }) MERGE (cnpe)-[:LOCALISATION {fr: "Localisation Géographique", en: "Geographic Location"}]->(cnpe_location)
 
MERGE (cnpe_root)-[:CLASS {fr: "Tous les CNPES", en: "All Nuclear Plants"}]->(cnpe)
 
MERGE (flote)-[:ENGLOBE {fr: "Englobe les CNPES", en: "Include Nuclear Power Plants"}]->(cnpe_location) MERGE (geographie_root)-[:CLASS {fr: "Toutes les géographies", en: "All geographics"}]->(flote) MERGE (tranche:TRANCHE { _UID: "/TRANCHE/"+line.id_reacteur, _LABEL: "Tranche "+line.Nom_du_reacteur ,  _CLASS: "ITEM", Rang: line.Rang, Palier: line.Palier, Puissance_therm_MWt: line.Puissance_therm_MWt, Puissance_nette_MWe: line.Puissance_nette_MWe, Puissance_brute_MWe: line.Puissance_brute_MWe })
 
MERGE (tranche_construction:CONSTRUCTION_TRANCHE { _UID: "/TRANCHE/CONSTRUCTION/DEBUT/"+line.id_reacteur, _LABEL: "Début de la construction de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Debut_construction})
 
MERGE (tranche_raccordement:RACCORDEMENT_TRANCHE { _UID: "/TRANCHE/RACCORDEMENT/"+line.id_reacteur, _LABEL: "Raccordement au réseau de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Raccordement_au_reseau})
 
MERGE (tranche_mis:MISE_EN_SERVICE_TRANCHE { _UID: "/TRANCHE/MISE_EN_SERVICE/"+line.id_reacteur, _LABEL: "Mise en service de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Mise_en_service}) MERGE (cnpe)-[:POSSEDE_LA_TRANCHE {fr: "Possède la tranche", en: "Owns the Unit"}]->(tranche) MERGE (tranche_root)-[:CLASS {fr: "Toutes les tranches", en: "All Units"}]->(tranche) MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_construction) MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_raccordement)
 
MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_mis) MERGE (chronologie_construction:CHRONOLOGIE { _UID: "/CHRONOLOGIE/CONSTRUCTION_PARC_NUCLEAIRE", _LABEL: "Chronologie de la Construction du Parc Nucléaire Français" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_construction)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_construction) MERGE (chronologie_raccordement:CHRONOLOGIE { _UID: "/CHRONOLOGIE/RACCORDEMENT_PARC_NUCLEAIRE", _LABEL: "Chronologie de Raccordement des Tranches Nucléaires" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_raccordement)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_raccordement) MERGE (chronologie_mise_en_service:CHRONOLOGIE { _UID: "/CHRONOLOGIE/MISE_EN_SERVICE_PARC_NUCLEAIRE", _LABEL: "Chronologie de Raccordement des Tranches Nucléaires" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_mise_en_service)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_mis) MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_raccordement) MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_construction)
 
MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_mise_en_service) MERGE (palier:PALIER { _UID: "/PALIER/"+line.Palier, _LABEL: "Palier "+line.Palier, _CLASS:"ITEM" }) MERGE (palier)-[:ENGLOBE {fr: "Englobe les Tranches", en: "Include Units"}]->(tranche)


''à faire''
MERGE (palier_root)-[:CLASS {fr: "Tous les paliers", en: "All Technologies"}]->(palier);
</syntaxhighlight>'''On obtient un graphe de connaissances sur le parc nucléaire français :'''
'''MATCH (n)-[r]->(m) RETURN *'''
[[Fichier:Graphe de connaissances sur le Parc Nucléaire Français.png|alt=Graphe de connaissances sur le Parc Nucléaire Français|centré|vignette|600x600px|Graphe de connaissances sur le Parc Nucléaire Français]]
'''Obtenir le modèle du graphe de connaissances :'''
'''call db.schema.visualization'''
[[Fichier:Modèle du graphe de connaissances.png|alt=Modèle du graphe de connaissances|centré|vignette|600x600px|Modèle du graphe de connaissances ]]

Version actuelle datée du 1 novembre 2024 à 20:42

Objectif

L’objectif est de vous initier à la création d’un graphe de connaissances en exploitant la technologie Neo4J. Il s’agit à partir d’un jeu de données de créer un modèle de connaissances et à partir de ces deux éléments de charger la base de graphe.

Préparer son environnement de travail

En local

Télécharger Neo4J Desktop : https://neo4j.com/download/

Dans le nuage (ie Cloud)

La société Neo4J vous permet après inscription d'exploiter une instance de base de donnée gratuitement : https://neo4j.com/cloud/aura/

Concevoir un modèle de connaissances

Premier Jeu de données : Liste des CNPEs

Le premier jeu de données est en lien avec le Parc Nucléaire de Production Français.

Fiche Wikipédia CNPEs
Fiche Wikipédia CNPEs

A partir de la page wikipédia ci contre et des pages afférentes, on obtient un jeu de données disponible au format csv ici : [1]

CNPE en csv

Les en-têtes de colonnes sont les suivantes :

  • Trigramme_centrale,
  • Centrale_nucleaire,
  • Commune,
  • Département,
  • id_reacteur,
  • Nom_du_reacteur,
  • Rang,
  • Palier,
  • Puissance_therm_MWt,
  • Puissance_brute_MWe,
  • Puissance_nette_MWe,
  • Debut_construction,
  • Raccordement_au_reseau,
  • Mise_en_service,
  • longitude,
  • latitude

Concevoir le modèle de connaissances

A partir d’une analyse des colonnes et de leur contenu il s’agit identifier les types de noeuds que vous souhaitez créer ainsi que les relations liants ces derniers.

Il s’agit d’identifier les objets élémentaires qui vont permettre que votre graphe de connaissance soit une représentation la plus riche possible à partir des données disponibles. Regarder les colonnes et leur contenu est une bonne stratégie. Par exemple, employez Excel pour explorer les données avec les filtres automatiques.

Données CNPE dans Excel

Vous pouvez dessiner votre modèle à la main ou dans un éditeur graphique de votre choix :

  • Powerpoint
  • Yedgraph : https://www.yworks.com/products/yed
  • Mermaid.js : https://mermaid-js.github.io/mermaid-live-editor/
  • viz.js : http://viz-js.com/
  • Xmind : https://www.xmind.net/
  • ….

Indice  : Il faut penser des phrases (sujet)(“verbe”)(“complement”) à partir des données disponibles.

Par exemple, à partir des colonnes “commune” et “département” je peux déduire :

Injecter dans la base de graphe

Le langage cypher

La base de graphe se manipule avec le langage Cypher. La synthèse de ce langage est disponible ici : [2]

RefCard Cypher Neo4J
RefCard Cypher Neo4J

Préparer les données sources avant l'injection

  • Préparer les fichiers en CSV
  • Convertir les fichiers en UTF8 (utiliser un éditeur de texte du type Notepad++ ou SublimeText)
  • Placer les fichiers à un endroit accessible par la base de graphe :
    • un stockage en ligne permettant un accès via http
    • dans le répertoire import de l'instance Neo4J
Ouvrir Répertoire Neo4J dans Neo4JDesktop
Ouvrir Répertoire Neo4J dans Neo4JDesktop
Ouvrir répertoire Import Neo4J Desktop
Ouvrir répertoire Import Neo4J Desktop

Le Browser Neo4J

Ouvrir la console Neo4J
Ouvrir le Browser Neo4J
Le Browser Neo4J
Le Browser Neo4J

Lire des données à partir du Browser Neo4J

A partir d'ici les données sont lues à partir du répertoire local d'import de Neo4J. Le fichier exploité est [3] évoqué ci dessus et renommé ListeCNPEs.csv.

La commande pour lire un fichier de données (source en gras) est :

LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row RETURN row

On obtient le résultat suivant :

Lire un fichier CSV à partir de Neo4J
Lire un fichier CSV à partir de Neo4J

On peut spécifier la manière dont le fichier de données est délimité :

LOAD CSV WITH HEADERS  FROM 'file:/ListeCNPEs.csv' AS row FIELDTERMINATOR ';' RETURN row 

La commande suivante ne lit qu’une propriété (“commune”) par ligne :

LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row RETURN row.Commune
Lire pour chaque ligne la propriété Commune du Fichier
Lire pour chaque ligne la propriété Commune du Fichier

Charger des données

Cette page web explique de nombreux mécanisme pour charger des données dans la base : https://neo4j.com/developer/kb/import-csv-locations/

Créer des noeuds correspondant aux communes :

LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row CREATE (n:COMMUNE { nom: row.Commune })
Création noeuds "commune"
Création noeuds "commune"

Vider le graphe :

MATCH (n) DETACH DELETE n
Vider la base
Vider la base

Créer des noeuds en évitant les doublons avec la commande MERGE :

LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row MERGE (n:COMMUNE { nom: row.Commune })
Créer des noeuds en évitant les doublons
Créer des noeuds en évitant les doublons


Vider le graphe :

MATCH (n) DETACH DELETE n

A partir de la lecture des données on peut créer des noeuds et les lier entre eux en même temps :

LOAD CSV WITH HEADERS FROM 'file:/ListeCNPEs.csv' AS row MERGE (n:COMMUNE { nom: row.Commune }) MERGE (m:DEPARTEMENT { nom: row.Département }) MERGE (n)-[:EST_DANS_LE_DEPARTEMENT]->(m)

Requêter les données

Obtenir tout le graphe :

MATCH (n)-[r]->(m) RETURN *
Obtenir le graphe entier
Obtenir le graphe entier

Obtenir les communes qui contiennent “ai” :

MATCH (n:COMMUNE) WHERE n.nom CONTAINS "ai" RETURN n
Obtenir les communes contenant 'ai'
Obtenir les communes contenant 'ai'

Obtenir les communes qui contiennent “ai” et les départements liés :

match (n:COMMUNE)-[r]->(m:DEPARTEMENT) where n.nom CONTAINS "ai" return *
Obtenir les communes contenant "ai" et les départements liés
Obtenir les communes contenant "ai" et les départements liés

Requêter les données et créer de nouvelles relations

Requête pour obtenir les communes commençant par “S” :

match (n:COMMUNE) where n.nom STARTS WITH "S" return *
Les communes commençant par un "s"
Les communes commençant par un "S"

Créer un noeud qui traduit la lettre “S” et lier les communes et y lier les communes qui commencent par la lettre “S” :

match (n:COMMUNE) where n.nom STARTS WITH "S" MERGE (s:LETTRE { nom: "S"}) MERGE (n)-[:COMMENCE_PAR_LA_LETTRE]->(s) return *
Communes commençant par un "S" connectées à un noeud "S"

Créer un graphe complet

Vider le graphe :

MATCH (n) DETACH DELETE n

Exécuter la requête suivante (copier coller toutes les lignes ):

LOAD CSV WITH HEADERS  FROM 'file:/ListeCNPEs.csv' AS line FIELDTERMINATOR ',' MERGE (cnpe_root:DIRECTORY {_UID: "/ROOT/CNPE", _LABEL: "Les CNPES", _CLASS: "DIRECTORY"}) MERGE (tranche_root:DIRECTORY {_UID: "/ROOT/TRANCHE", _LABEL: "Les Tranches de Production", _CLASS: "DIRECTORY"})

MERGE (palier_root:DIRECTORY {_UID: "/ROOT/PALIER", _LABEL: "Les Paliers Technologiques", _CLASS: "DIRECTORY"})

MERGE (chronologie_root:DIRECTORY {_UID: "/ROOT/CHRONOLOGIE", _LABEL: "Les Chronologies", _CLASS: "DIRECTORY"})

MERGE (geographie_root:DIRECTORY {_UID: "/ROOT/GEOGRAPHIE", _LABEL: "Les Géographies", _CLASS: "DIRECTORY"}) MERGE (cnpe:CNPE { _UID: "/CNPE/"+line.Trigramme_centrale, _LABEL: "Centrale Nucléaire de "+line.Centrale_nucleaire  ,  _CLASS: "ITEM", Trigramme_centrale: line.Trigramme_centrale }) MERGE (cnpe_location:LOCALISATION { _UID: "/CNPE/LOCALISATION/"+line.Trigramme_centrale, _LABEL: "Localisation de la Centrale Nucléaire de "+line.Centrale_nucleaire ,  _CLASS: "GEODATAITEM", _LONGITUDE: line.longitude, _LATITUDE: line.latitude }) MERGE (flote:GEOGRAPHIE { _UID: "/GEOGRAPHIE/PARC_NUCLEAIRE_FRANCAIS", _LABEL: "Parc Nucléaire Français", _CLASS: "GEODATASET" }) MERGE (cnpe)-[:LOCALISATION {fr: "Localisation Géographique", en: "Geographic Location"}]->(cnpe_location)

MERGE (cnpe_root)-[:CLASS {fr: "Tous les CNPES", en: "All Nuclear Plants"}]->(cnpe)

MERGE (flote)-[:ENGLOBE {fr: "Englobe les CNPES", en: "Include Nuclear Power Plants"}]->(cnpe_location) MERGE (geographie_root)-[:CLASS {fr: "Toutes les géographies", en: "All geographics"}]->(flote) MERGE (tranche:TRANCHE { _UID: "/TRANCHE/"+line.id_reacteur, _LABEL: "Tranche "+line.Nom_du_reacteur ,  _CLASS: "ITEM", Rang: line.Rang, Palier: line.Palier, Puissance_therm_MWt: line.Puissance_therm_MWt, Puissance_nette_MWe: line.Puissance_nette_MWe, Puissance_brute_MWe: line.Puissance_brute_MWe })

MERGE (tranche_construction:CONSTRUCTION_TRANCHE { _UID: "/TRANCHE/CONSTRUCTION/DEBUT/"+line.id_reacteur, _LABEL: "Début de la construction de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Debut_construction})

MERGE (tranche_raccordement:RACCORDEMENT_TRANCHE { _UID: "/TRANCHE/RACCORDEMENT/"+line.id_reacteur, _LABEL: "Raccordement au réseau de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Raccordement_au_reseau})

MERGE (tranche_mis:MISE_EN_SERVICE_TRANCHE { _UID: "/TRANCHE/MISE_EN_SERVICE/"+line.id_reacteur, _LABEL: "Mise en service de la tranche "+line.Nom_du_reacteur, _CLASS:"TIMEDATAITEM", _START: line.Mise_en_service}) MERGE (cnpe)-[:POSSEDE_LA_TRANCHE {fr: "Possède la tranche", en: "Owns the Unit"}]->(tranche) MERGE (tranche_root)-[:CLASS {fr: "Toutes les tranches", en: "All Units"}]->(tranche) MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_construction) MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_raccordement)

MERGE (tranche)-[:LIE_A_L_EVENEMENT {fr: "En relation avec l'événement", en: "Related to the Event"}]->(tranche_mis) MERGE (chronologie_construction:CHRONOLOGIE { _UID: "/CHRONOLOGIE/CONSTRUCTION_PARC_NUCLEAIRE", _LABEL: "Chronologie de la Construction du Parc Nucléaire Français" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_construction)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_construction) MERGE (chronologie_raccordement:CHRONOLOGIE { _UID: "/CHRONOLOGIE/RACCORDEMENT_PARC_NUCLEAIRE", _LABEL: "Chronologie de Raccordement des Tranches Nucléaires" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_raccordement)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_raccordement) MERGE (chronologie_mise_en_service:CHRONOLOGIE { _UID: "/CHRONOLOGIE/MISE_EN_SERVICE_PARC_NUCLEAIRE", _LABEL: "Chronologie de Raccordement des Tranches Nucléaires" , _CLASS: "TIMEDATASET"}) MERGE (chronologie_mise_en_service)-[:ENGLOBE { fr: "Englobe les événements", en: "Include Events"}]->(tranche_mis) MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_raccordement) MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_construction)

MERGE (chronologie_root)-[:CLASS {fr: "Toutes les chronologies", en: "All Chronologies"}]->(chronologie_mise_en_service) MERGE (palier:PALIER { _UID: "/PALIER/"+line.Palier, _LABEL: "Palier "+line.Palier, _CLASS:"ITEM" }) MERGE (palier)-[:ENGLOBE {fr: "Englobe les Tranches", en: "Include Units"}]->(tranche)

MERGE (palier_root)-[:CLASS {fr: "Tous les paliers", en: "All Technologies"}]->(palier);

On obtient un graphe de connaissances sur le parc nucléaire français :

MATCH (n)-[r]->(m) RETURN *
Graphe de connaissances sur le Parc Nucléaire Français
Graphe de connaissances sur le Parc Nucléaire Français

Obtenir le modèle du graphe de connaissances :

call db.schema.visualization
Modèle du graphe de connaissances
Modèle du graphe de connaissances