Skip to the content.

Mise en place de l’environnement

Installation des dépendances (requirements.txt)


Structure actuelle des dossiers

.
├── data
│   ├── db
│   ├── raw
│   └── tests
├── docker
├── docs
├── notebooks
├── requirements.txt
├── tests
└── venv

Chargement et transformation des données

Création du notebook de chargement


Nettoyage des données TSV

Étapes de préparation et de nettoyage


Méthode

Étapes d’importation

Limitation d’importation de fichier SQL

Approche 1 : Créer un fichier SQlite (.db) à partir des TSV avec Python et l’importer dans Docker

Exécution de SQLite en mode interactif

docker exec -it moviesdb_sqlite sqlite3 /data/newIMDB.db

NB- ctrl d pour quitter

Pour utiliser un fichier sql avec des requêtes

docker exec -i $CONTAINER sqlite3 /data/newIMDB.db ".read /tmp/marvel_queries.sql"

Pour formatter une table dans SQLite

.mode column
.headers on

Pour exécuter les requêtes et sauvegarder données en tant que fichier csv

docker exec $CONTAINER sqlite3 /data/newIMDB.db \
  ".headers on" ".mode csv" \
  ".output $CONTAINER_FILE_PATH/nom_du_fichier.csv" \
  "SELECT primary_title, rating, votes FROM titles JOIN ratings ON titles.title_id = ratings.title_id WHERE LOWER(primary_title) LIKE '%marvel%';" \
  ".output stdout"

Limitations

Approche 2 : Conversion de fichiers TSV en BDD MYSQL

Copier les fichiers pour créer et charger les données dans un dossier /tmp/

Définir les variables suivantes pour faciliter la réutilisation des chemins et noms de conteneurs :

CONTAINER=moviesdb_mysql
CSV_HOST_PATH=data/tests
SQL_FILE_PATH=utils
CONTAINER_FILE_PATH=/tmp/

Utiliser ces variables dans les commandes :

docker cp data/raw/ $CONTAINER:/tmp/raw/
docker cp mysql/imdb-create-tables.sql $CONTAINER:/tmp/
docker cp mysql/imdb-load-data.sql $CONTAINER:/tmp/
docker exec -it $CONTAINER mysql -u root -p --local-infile IMDb

Commandes MYSQL utilisées

SOURCE /tmp/imdb-create-tables.sql
SOURCE /tmp/imdb-load-data.sql
SOURCE /tmp/imdb-add-constraints.sql
SOURCE /tmp/imdb-add-index.sql
SOURCE /tmp/marvel_movies.sql
docker cp ${SQL_FILE_PATH}/marvel_movies.sql $CONTAINER:/tmp/
SOURCE /tmp/marvel_movies.sql
docker cp $CONTAINER:/tmp/marvel_movies.csv ${CSV_HOST_PATH}/marvel_movies.csv

Exécuter le script dans le dossier pipeline (Run_pipeline.py) pour créer la base, charger les données, et lancer les requêtes sql

Rajouter un fichier .env dans le dossier racine avec les identifiants:

Exemple:

MYSQL_ROOT_PASSWORD=changeme
MYSQL_DATABASE=IMDb
MYSQL_USER=appuser
MYSQL_PASSWORD=changeme

Logging

Logging avec la lib logging et une structure try & except pour catché les erreurs + mise en place de 4 niveaux de logs : INFO, WARNING, ERROR, DEBUG

Le script prendre en argument -d pour activer le mode DEBUG, -db pour créer la base de donnée et -csv pour créer les csv


Application Streamlit — Exploration du graphe MCU

L’application Streamlit permet d’explorer interactivement le graphe Marvel Cinematic Universe stocké dans Neo4j ou AuraDB.

Prérequis

Configuration

Créer un fichier .env dans le dossier Streamlit-App/ :

NEO4J_URI=bolt://localhost:7687        # ou neo4j+s://xxxx.databases.neo4j.io
NEO4J_USER=neo4j
NEO4J_PASSWORD=votre-mot-de-passe

Installation et lancement

cd Streamlit-App
pip install -r requirements.txt
streamlit run app.py

L’application s’ouvre automatiquement sur http://localhost:8501.

Fonctionnalités

Graphe interactif

Filtres (barre latérale)

Filtre Description
Labels Sélectionner les types de nœuds à afficher (Person, Movie, Character)
Types de relations Filtrer les relations (PLAY, APPEAR_IN, DIRECTED, PRODUCED)
Film Afficher le sous-graphe centré sur un film spécifique
Rafraîchir Vider le cache et recharger les données depuis Neo4j

Mode Analyse topologique

Activé via le toggle “Mode Analyse (Betweenness Centrality)” dans la sidebar.

Betweenness Centrality (BC)

Détection de communautés

Sélection de l’algorithme via le sélecteur :

Algorithme Description
Louvain Optimisation de la modularité (recommandé)
Greedy Modularity Fusion gloutonne de communautés
Label Propagation Propagation d’étiquettes (rapide)
Girvan-Newman Suppression d’arêtes (lent sur grands graphes)

Les communautés sont colorées automatiquement dans le graphe.

Tableau Top-N nœuds ponts

Affiché sous le graphe en mode Analyse — liste les nœuds les plus centraux avec leur score BC.

Cache

Toutes les requêtes Neo4j sont mises en cache via st.cache_data :

Structure du code

Streamlit-App/
├── app.py                  # Point d'entrée principal
├── requirements.txt        # Dépendances Python
├── config.toml             # Configuration du thème Streamlit
├── assets/
│   ├── css/avengers.css    # Thème visuel
│   ├── style.grass         # Style Neo4j Browser
│   └── components/
│       └── countdown.html  # Compte à rebours HTML/JS
└── modules/
    ├── neo4j_connector.py  # Connexion et requêtes Neo4j
    ├── graph_builder.py    # Construction du graphe PyVis
    ├── graph_analyzer.py   # Analyse topologique (BC, communautés)
    └── ui_helpers.py       # Composants UI (sidebar)