From 0918bbb1bb4c451805ba4e75ae65342dea3bd5bb Mon Sep 17 00:00:00 2001 From: William Petit Date: Wed, 5 Sep 2018 07:30:09 +0200 Subject: [PATCH] =?UTF-8?q?CESI:=20Intro=20Big=20Data=20-=20ajout=20tuile?= =?UTF-8?q?=20+=20exercice=20BDD=20orient=C3=A9e=20graphe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cesi/intro_big_data/presentation/slides.md | 50 ++++++++++++++++++ ...tion RIL B1 - Introduction au Big Data.doc | Bin 118784 -> 107008 bytes .../cayley-compose/docker-compose.yml | 7 +++ .../ressources/cayley-compose/queries.md | 44 +++++++++++++++ .../ressources/cayley-compose/social.nquad | 21 ++++++++ 5 files changed, 122 insertions(+) create mode 100644 cesi/intro_big_data/ressources/cayley-compose/docker-compose.yml create mode 100644 cesi/intro_big_data/ressources/cayley-compose/queries.md create mode 100644 cesi/intro_big_data/ressources/cayley-compose/social.nquad diff --git a/cesi/intro_big_data/presentation/slides.md b/cesi/intro_big_data/presentation/slides.md index 4f98cbd..a1e35fa 100644 --- a/cesi/intro_big_data/presentation/slides.md +++ b/cesi/intro_big_data/presentation/slides.md @@ -117,10 +117,60 @@ William Petit - S.C.O.P. Cadoles --- +#### Le concept de "triplet" + +Un triplet est une structure de données pouvant être représenté sous la forme `(sujet, prédicat, objet)`. + +Un corpus de triplets permet de représenter un graphe orienté. + +Exemple: + +`` `` `` +`` `` `` +`` `` `Entreprise>` +etc... + +--- + #### Exemple avec le projet Cayley --- +#### Exercice + +Soit Jean, Silvia, Camille, Charlie et Nicolas cinq membres d'un même réseau social. + +- Jean est ami avec Silvia. +- Silvia est amie avec Jean. +- Camille est ami avec Charlie. +- Charlie est amie avec Jean. +- Nicolas est ami avec Camille. +- Nicolas est ami avec Silvia. + +Les relations sont évidemment bidirectionnelles. + +Chaque personne a également les attributs suivants: + +- Un age +- Un plat préféré + +--- + +##### Consignes + +1. Représenter sous forme de triplets ces 4 entités et leurs relations d'amitiés respectives. + +2. Écrire la requête (Gizmo) permettant de récupérer la liste des plats préférés d'une personne. + +3. Écrire la requête (Gizmo) permettant de récupérer la liste des "amis d'amis" d'une personne. + +4. Écrire la requête (Gizmo) permettant de récupérer la liste plats préférés partagés avec des "amis d'amis". + +[Documentation de l'API Gizmo](http://localhost:64210/docs/GizmoAPI) + +--- + + ## Exploitation des données et cadre légal --- diff --git a/cesi/intro_big_data/ressources/Fiche de préparation RIL B1 - Introduction au Big Data.doc b/cesi/intro_big_data/ressources/Fiche de préparation RIL B1 - Introduction au Big Data.doc index d8f6c70629bd9091646180752959d82175a7735a..9b11d48f5c5245cdcb9abac01577c326c3748276 100644 GIT binary patch delta 38617 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 delta 37915 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 diff --git a/cesi/intro_big_data/ressources/cayley-compose/docker-compose.yml b/cesi/intro_big_data/ressources/cayley-compose/docker-compose.yml new file mode 100644 index 0000000..0058dbc --- /dev/null +++ b/cesi/intro_big_data/ressources/cayley-compose/docker-compose.yml @@ -0,0 +1,7 @@ +version: '2.2' +services: + cayley: + image: quay.io/cayleygraph/cayley + ports: + - 64210:64210 + command: [ "--verbose", "10", "-l", "10" ] \ No newline at end of file diff --git a/cesi/intro_big_data/ressources/cayley-compose/queries.md b/cesi/intro_big_data/ressources/cayley-compose/queries.md new file mode 100644 index 0000000..8580254 --- /dev/null +++ b/cesi/intro_big_data/ressources/cayley-compose/queries.md @@ -0,0 +1,44 @@ +# Gizmo + +## Trouver les plats préférés de chaque personne + +```js +g.V().Has("").Tag("source").Out("").Tag("target").All() +``` + +## Afficher l'ensemble des relations du réseau social + +```js +g.V().Has("").Tag("source").Out("").Tag("target").All() +``` + +## Trouver les amis des amis de Jean + +```js +g.V("").Tag("source").Out("").ForEach(function(directFriend) { + + g.Emit({ id: directFriend.id, source: "", target: directFriend.id }); + + g.V(directFriend.id).Out("").ForEach(function(friendOfFriend) { + g.Emit({id: friendOfFriend.id, source: directFriend.id, target: friendOfFriend.id }); + }); + +}); +``` + +## Trouver les amis des amis de Jean qui aiment un plat commun + +```js +var jean = g.V(""); +var jeanFavoriteDishes = jean.Out(""); + +jean.Out("").ForEach(function(directFriend) { + g.V(directFriend.id).Out("").ForEach(function(friendOfFriend) { + jeanFavoriteDishes.Intersect(g.V(friendOfFriend.id).Out("")).ForEach(function(favoriteDish) { + g.Emit({ id: directFriend.id, source: "", target: directFriend.id }); + g.Emit({ id: friendOfFriend.id, source: directFriend.id, target: friendOfFriend.id }); + g.Emit({ id: favoriteDish.id, source: friendOfFriend.id, target: favoriteDish.id }); + }); + }); +}); +``` \ No newline at end of file diff --git a/cesi/intro_big_data/ressources/cayley-compose/social.nquad b/cesi/intro_big_data/ressources/cayley-compose/social.nquad new file mode 100644 index 0000000..59c13d9 --- /dev/null +++ b/cesi/intro_big_data/ressources/cayley-compose/social.nquad @@ -0,0 +1,21 @@ + . + . + . + . + . + . + . + . + . + . + . + + 25 . + 30 . + 26 . + 32 . + + "Boeuf bourguignon" . + "Boeuf bourguignon" . + "Gateau au chocolat" . + "Crepe" .