IndexMed - Séminaire IndexMed 2016

Transcription

IndexMed - Séminaire IndexMed 2016
IndexMed
Visualisation des données sous forme de graphes
1
Sommaire

Bases de données orientées graphe

Introduction à Neo4j

Neo4J dans IndexMed

IndexMed Web

Quelques résultats

Prérequis
2
Bases de données orientées graphes
1464096862
Bases de données dont la spécificité est la visualisation sous forme de graphe
- Des nœuds composés de propriétés de type clé / valeur
- Des relations (orientées ou pas)
version
3
Bases de données orientées graphes
1464096862
Pourquoi utiliser des BD orientées
graphes ?
– Représentation visuelle
– Rapidité d'analyse
– Mise en avant de certaines données
– Possibilité de traiter de gros volumes
de données
– Flexibilité du schéma (les propriétés
peuvent évoluer)
4
Analogie Base relationnelle / Base graphe
1464096862
5
Introduction à Neo4J
Bases de données orientées graphes
Licence GPL – Compatible Linux, Mac, Windows
Moteur en java
Repose sur le principe des nœuds, propriétés et relations
Meta-nœud
Langage de requête : CYPHER
Interface web
V2 : limite 34 milliards de nœuds
V3 : illimité
6
Introduction à Neo4J
7
Introduction à Neo4J
Langage cypher – exemples de requêtes
Afficher une photo avec les espèces liées à la photo:
LANGAGE SQL :
SELECT *
FROM PHOTO
INNER JOIN JOINTURE
ON PHOTO.id_photo = JOINTURE.id_photo
INNER JOIN ESPECE
ON JOINTURE.id_espece = ESPECE.id_espece
WHERE PHOTO.Source = 'CIGESMED_FTF_2014091'
LANGAGE CYPHER :
MATCH (pic:PHOTO)-[r:CONTIENT]->(e:ESPECE)
WHERE pic.Source = ‘CIGESMED_FTF_2014091’
RETURN pic,r,e
8
Introduction à Neo4j
Calcul du chemin le plus court :
MATCH ()-[r:TRAVEL]->() RETURN r LIMIT 25
9
Introduction à Neo4j
Calcul du chemin le plus court :
MATCH (Jamet:Stop {name:’Jamet’}), (Commerce: Stop {name:’Commerce’}), p=shortestPath((Jamet)-[*]-(Commerce)) return p
10
Introduction à Neo4j
Les différents langages compatibles avec neo4j
Neo4j retourne les données au format JSON
11
Neo4j dans Indexmed


Pourquoi Neo4J ?

Approprié pour des jeux de données hétérogènes

Solution de référence dans le domaine des BD graphes
Intégration dans Indexmed

Avoir une interface web spécifique au projet

Système de requêtage simplifié
12
IndexMed Web
http://data.imbe.fr/neo4j
13
Prérequis
Normalisation de l’architecture des données :
• Nom des champs normalisés dans les CSV
• 1 CSV = 1 nœud ou 1 relation
• Contrainte sur les champs (unique ou pas)
• Ne pas référencer plusieurs informations dans un même champs (Par
exemple, on ne peut pas avoir René Dupont dans un champ Client. Il
faut décomposer en deux champs Nom et Prénom)
Normalisation de la donnée :
• Ne pas laisser de champs vide (données moins consistantes)
• Format des dates
14
Neo4j dans IndexMed
Import d’un CSV :
# Validation à intervalle régulier
USING PERIODIC COMMIT 500
# ligne == ligne traitée par les commandes cypher qui suivront
# fieldterminator = champs séparés par ;
LOAD CSV WITH HEADERS FROM ‘//home/jlecubin/test.csv’ AS ligne FIELDTERMINATOR ‘;’
# Creation nœud Endroit et un champ id dont la valeur == colonne id du CSV
# MERGE == CREATE ou UPDATE selon absence ou présence du noeud
MERGE (ou:Endroit {id: ligne.id})
# Ajout propriétés sur les noeuds
SET ou.numero = TOINT(ligne.numero)
SET ou.nomVoie = ligne.nom_voie
# Convertion de la valeur en float
SET ou.lon = TOFLOAT(ligne.lon)
SET ou.lat = TOFLOAT(ligne.lat)
MERGE (comm:Commune {codePostal: TOINT(ligne.’code_post’) })
SET comm.nom == ligne.nom_commune
MERGE (ville:Ville {libelle: ligne.libelle_acheminement })
SET ville.codeDepartement = left(ligne.’code_post’,2)
# Création de la relation APPARTIENT_A de la commune vers la ligne
MERGE (comm)-[:APPARTIENT_A]->(ville)
MERGE (ou)-[:SITUE_DANS]->(comm)
15