Protein Database Explorer est une application web complète permettant de stocker, rechercher, analyser et visualiser des données protéiques à l'aide de bases de données NoSQL (MongoDB et Neo4j). L'application se distingue par son système de propagation de labels configurable permettant de prédire les fonctions enzymatiques (numéros EC) des protéines non annotées selon plusieurs stratégies algorithmiques.
- 🔍 Recherche avancée dans MongoDB avec auto-complétion en temps réel
- 📊 Visualisation interactive des réseaux de similarité dans Neo4j (zoom, déplacement, physique des nœuds)
- 🏷️ Propagation automatique des annotations EC avec 3 stratégies (Baseline, Consensus, Cascade)
- 📈 Tableau de bord statistique avec historiques et graphiques comparatifs
- ➕ CRUD complet (Ajout/Suppression synchronisée MongoDB/Neo4j)
- 🧪 Validation du modèle via Cross-Validation configurable
- Python 3.9+
- MongoDB (version 5.0+)
- Neo4j (version 5.0+)
- Streamlit
pip install -r requirements.txtrequirements.txt :
pandas
neo4j
pymongo
python-dotenv
tqdm
streamlit
streamlit-searchbox
streamlit-agraph # Nécessaire pour la visualisation du graphe
plotly
numpy
scikit-learn
- Installer MongoDB
- Démarrer le service MongoDB
- Télécharger Neo4j Desktop
- Créer une nouvelle base de données
- Noter les identifiants de connexion
# MongoDB
MONGO_URI=mongodb://localhost:27017
DB_NAME=protein_database
COLLECTION_NAME=proteins
# Neo4j
NEO4J_URI=neo4j://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=votre_mot_de_passe
NEO4J_DATABASE_NAME=project- Placer votre fichier
uniprot.tsvdansbackend/data/raw/ - Exécuter les scripts de remplissage des bases de données :
python backend/app/graph_builder.py # Génération des CSV (nodes/edges)
python backend/app/neo4j_graph_builder.py # Import Neo4j
python backend/app/mongo_builder.py # Import MongoDBstreamlit run frontend/app/pages/front.pyL'application sera accessible à l'adresse : http://localhost:8501
- Barre de recherche centrale : Auto-complétion en temps réel
- Filtres avancés dans la sidebar :
- Recherche par mot-clé
- Filtres EC (logique AND/OR avancée : ajout dynamique de champs)
- Filtres InterPro
- Longueur de séquence
- Organisme
- Cliquez sur "Afficher le graphe" dans un résultat
- Paramètres ajustables :
k: Nombre de voisins directs (Niveau 1)m: Nombre de voisins de voisins (Niveau 2)
- Légende des couleurs :
- 🔴 Rouge : Protéine centrale (Target)
- 🔵 Bleu : Voisins directs
- 🟢 Vert : Voisins de niveau 2
- Interactivité : Les nœuds sont cliquables et déplaçables.
- Ajouter une protéine : Formulaire modal avec validation des champs.
- Supprimer une protéine : Bouton dans les détails de la protéine (avec confirmation).
- Synchronisation : Toute modification est répercutée instantanément dans MongoDB et Neo4j.
- Accédez aux statistiques globales en bas de page.
- Snapshots : Calculez et stockez l'état de la base à un instant T.
- Visualisation : Graphiques camemberts (Pie Charts) pour les ratios Labellisées/Isolées.
L'interface propose 3 onglets pour gérer l'IA :
- Explications : Détail des concepts.
- Validation : Lancer une Cross-Validation sur le jeu de données actuel pour estimer la précision.
- Prédiction (Production) : Appliquer les calculs pour écrire les nouvelles annotations en base.
Sélecteur de stratégie :
- Baseline (Weighted Voting) : Vote pondéré standard (rapide).
- Consensus (Fallback) : Tente le niveau 4, se replie sur le niveau 3 si incertain (robuste).
- Cascade (Multi-Run) : Propagation itérative par niveaux successifs (maximise le rappel).
backend/app/
├── mongo_queries.py # Moteur de recherche MongoDB
├── neo4j_query.py # Extraction de sous-graphes pour la viz
├── label_propagation_with_hierarchy.py # Cœur algorithmique (Baseline, Consensus, Cascade)
├── graph_builder.py # ETL : Parsing TSV -> CSV
├── neo4j_graph_builder.py # ETL : Chargement Batch Neo4j
├── mongo_builder.py # ETL : Chargement MongoDB
├── add_protein.py # Logique d'ajout (CRUD)
├── delete_protein.py # Logique de suppression (CRUD)
├── stats.py # Calcul des métriques globales
└── mongo_reset.py # Utilitaires de reset
L'algorithme repose sur l'hypothèse que des protéines partageant des domaines fonctionnels (InterPro) ont probablement la même fonction enzymatique (EC).
- Construction du Graphe : Les arêtes
:SIMILARsont pondérées par l'indice de Jaccard sur les domaines InterPro. - Stratégies implémentées :
- Baseline : Pour une protéine cible, on additionne les poids des voisins pour chaque label EC. Le label avec le score le plus élevé l'emporte, peu importe son niveau (tous niveaux confondus).
- Consensus : Vérifie la confiance du meilleur candidat. Si < seuil, on agrège les scores au niveau hiérarchique supérieur (ex: 1.14.14 -> 1.14) jusqu'à trouver un consensus fiable.
- Cascade : Exécute 4 passes. Passe 1 : Prédit uniquement les EC niveau 4 très sûrs. Ces nouvelles prédictions deviennent des sources ("Training set") pour la Passe 2 (niveau 3), etc. Cela permet de propager l'information plus loin dans le graphe.
# Installation (exemple Ubuntu)
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb.gpg
echo "deb [ arch=amd64 signed-by=/usr/share/keyrings/mongodb.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-orgDans un terminal :
mkdir mongobin
cd mongobin
mongod --dbpath .