Files
graph-mesamis/exercice2.md
2025-10-25 14:50:26 +02:00

113 lines
2.4 KiB
Markdown

```shell
docker compose up -d
```
Rendez vous ensuite à l'adresse : http://localhost:7474
## Réseau routier
### Charger les données
Les points
```cypher
LOAD CSV WITH HEADERS
FROM 'file:///points.csv' AS row
MERGE (p:Point { id: toInteger(row.id) })
SET p.nom = row.nom,
p.altitude = toInteger(row.altitude),
p.location = point({
longitude: toFloat(row.longitude),
latitude: toFloat(row.latitude)
});
```
Les routes entre les points
```
LOAD CSV WITH HEADERS FROM 'file:///routes.csv' AS row
WITH row
MATCH (a:Point {id: toInteger(row.source)})
WITH a, row
MATCH (b:Point {id: toInteger(row.target)})
MERGE (a)-[r:ROUTE {route_id: toInteger(row.route_id)}]->(b)
SET r.tag = row.tag, r.cout = toFloat(row.cout);
```
les routes inverses si cout_inverse est différent de -1
```
LOAD CSV WITH HEADERS FROM 'file:///routes.csv' AS row
WITH row
WHERE toFloat(row.cout_inverse) <> -1
MATCH (a:Point {id: toInteger(row.source)})
WITH a, row
MATCH (b:Point {id: toInteger(row.target)})
MERGE (b)-[r:ROUTE {route_id: toInteger(row.route_id) * 1000}]->(a)
SET r.tag = row.tag, r.cout = toFloat(row.cout_inverse);
```
Supprimer les points et les routes.
```sql
MATCH (p:Point) DETACH DELETE p;
```
### Questions
1. Quelle est la distance entre le casino et la falaise
2. Quel est le plus court chemin entre le casino et la falaise
a. Un chemin comportant au maximum 10 segments (mais ce n'est pas le plus court !)
![](route.png)
## Réseau d'amis
### Charger les données
```cypher
LOAD CSV WITH HEADERS
FROM 'file:///individus.csv' AS row
MERGE (i:Individu { id: toInteger(row.id) })
SET i.prenom = row.prenom,
i.age = toInteger(row.age),
i.sexe = row.sexe,
i.etudes = toInteger(row.etudes),
i.richesse = toInteger(row.richesse),
i.lecture = toFloat(row.lecture),
i.musique = toFloat(row.musique),
i.sport = toFloat(row.sport);
```
```cypher
CREATE CONSTRAINT individu_id IF NOT EXISTS
FOR (i:Individu)
REQUIRE i.id IS UNIQUE;
```
```cypher
LOAD CSV WITH HEADERS
FROM 'file:///edges.csv' AS row
MATCH (a:Individu {id: toInteger(row.source)})
MATCH (b:Individu {id: toInteger(row.target)})
MERGE (a)-[r:AMI]->(b)
MERGE (b)-[r2:AMI]->(a);
```
### Questions
1. Combien d'amis a l'id 58 ?
2. Quels sont les amis de l'id 58 ?
3. Quels sont les amis des amis de l'id 58
4. Quelle est la chaine de relation entre l'id 58 et 40 ?
5. Quels sont les personnes qui ont un niveau d'études à 3 et un niveau de richesse à 0