Gestionnaire de graphe social avec import CSV et export JSON. Supporte l'analyse FOAF (Friend of a Friend).
- ✅ Import CSV avec gestion automatique des espaces et doublons
- ✅ Relations bidirectionnelles ou unidirectionnelles
- ✅ Export JSON du graphe complet
- ✅ Export GraphML (Gephi, yEd, Cytoscape)
- ✅ Analyse FOAF (Friend of a Friend)
- ✅ Statistiques du réseau social
- ✅ Rapport détaillé FOAF pour tous les utilisateurs
- Python 3.12+
Note: Ce projet n'utilise que des modules Python standards. Aucune installation de dépendances n'est requise.
Chaque ligne du fichier CSV représente un utilisateur et ses amis:
Utilisateur,Ami1,Ami2,Ami3,...Alice,Bob,Charlie,David
Bob,Alice,Eve,Frank
Charlie,Alice,David,GeorgeNotes:
- Les espaces avant/après les noms sont automatiquement supprimés
- Les doublons sont automatiquement éliminés
- Les lignes vides sont ignorées
Le script utilise uniquement des modules Python standards, aucune installation n'est requise.
./social-graph <fichier_csv> [options]| Option | Description |
|---|---|
--no-bidirectional |
Relations unidirectionnelles (défaut: bidirectionnelles) |
--output <fichier> |
Fichier JSON de sortie (défaut: social_graph.json) |
--foaf-report <fichier> |
Génère un rapport FOAF détaillé |
--graphml <fichier> |
Export GraphML pour visualisation (Gephi, yEd, Cytoscape) |
--stats |
Affiche les statistiques du graphe |
--query-user <nom> |
Affiche les amis et FOAF d'un utilisateur |
./social-graph data/input/friends.csvSortie: social_graph.json
./social-graph data/input/friends.csv --stats📈 Statistiques du graphe:
- Nombre d'utilisateurs: 9
- Nombre de relations: 12
- Mode: bidirectionnel
- Moyenne d'amis par utilisateur: 2.67
- Maximum d'amis: 3
- Minimum d'amis: 2
./social-graph data/input/friends.csv --foaf-report data/output/foaf_report.json --stats./social-graph data/input/friends.csv --query-user Alice👤 Informations pour 'Alice':
- Amis directs (3): Bob, Charlie, David
- Amis d'amis (4): Eve, Frank, George, Helen
./social-graph data/input/friends.csv --graphml data/output/friends.graphml --statsLe fichier .graphml peut être ouvert avec:
- Gephi - Visualisation et analyse de graphes
- yEd - Éditeur de diagrammes
- Cytoscape - Analyse de réseaux biologiques et sociaux
./social-graph data/input/friends.csv --no-bidirectional --output data/output/graph_unidirectional.jsonfrom social_graph import SocialGraph
# Créer un graphe bidirectionnel
graph = SocialGraph(bidirectional=True)
# Charger depuis CSV
graph.load_from_csv('data/input/friends.csv')
# Obtenir les amis d'un utilisateur
friends = graph.get_friends('Alice')
print(f"Amis d'Alice: {friends}")
# Obtenir les amis d'amis
foaf = graph.get_foaf('Alice')
print(f"FOAF d'Alice: {foaf}")
# Statistiques
stats = graph.get_statistics()
print(f"Total utilisateurs: {stats['total_users']}")
# Export JSON
graph.to_json('data/output/my_graph.json')
# Export GraphML (pour visualisation)
graph.to_graphml('data/output/my_graph.graphml')
# Rapport FOAF
graph.export_foaf_report('data/output/foaf_report.json')graph = SocialGraph(bidirectional=True)
# Ajouter des relations
graph.add_friendship('Alice', 'Bob')
graph.add_friendship('Alice', 'Charlie')
# Export
graph.to_json('custom_graph.json'){
"Alice": ["Bob", "Charlie", "David"],
"Bob": ["Alice", "Eve", "Frank"],
"Charlie": ["Alice", "David", "George"]
}{
"Alice": {
"direct_friends": ["Bob", "Charlie", "David"],
"friends_of_friends": ["Eve", "Frank", "George", "Helen", "Ivan"],
"total_foaf": 5
}
}Exécuter les exemples d'utilisation:
python examples/advanced_usage.py data/input/friends.csvRésultat:
🚀 ======================================================== 🚀
EXEMPLES AVANCÉS - Social Graph Manager
🚀 ======================================================== 🚀
📂 Fichier CSV utilisé: data/input/friends.csv
============================================================
Exemple 1: Recommandations d'amis
============================================================
👤 Suggestions d'amis pour Alice:
Vous pourriez connaître: Eve, Frank, George, Helen
============================================================
Exemple 2: Analyse du réseau
============================================================
📊 Statistiques globales:
- Total utilisateurs: 9
- Total relations: 12
- Moyenne d'amis: 2.67
🌟 Utilisateurs les plus connectés:
- Eve: 3 amis
- Alice: 3 amis
- Bob: 3 amis
- Charlie: 3 amis
- Helen: 3 amis
============================================================
Exemple 3: Portée du réseau
============================================================
🔍 Portée du réseau pour chaque utilisateur:
Alice:
- Amis directs: 3
- Amis d'amis: 4
- Portée totale: 7 personnes
[... output continues for all 9 users ...]
============================================================
Exemple 4: Amis communs
============================================================
👥 Amis communs entre Alice et Bob:
Aucun ami commun
============================================================
Exemple 5: Graphe personnalisé
============================================================
📱 Graphe de followers (unidirectionnel):
Alice suit: Bob, Charlie
Bob suit: Alice
Charlie suit: David
💾 Graphe exporté vers 'data/output/custom_followers.json'
============================================================
Exemple 6: Force des connexions
============================================================
💪 Force des connexions pour Alice:
- Charlie: 1 amis communs
- David: 1 amis communs
- Bob: 0 amis communs
============================================================
✨ Tous les exemples ont été exécutés!
============================================================
Exemples inclus:
- ✅ Recommandations d'amis (FOAF)
- ✅ Analyse du réseau et statistiques
- ✅ Portée du réseau (amis + FOAF)
- ✅ Amis communs entre utilisateurs
- ✅ Graphe personnalisé (unidirectionnel)
- ✅ Force des connexions
| Méthode | Description |
|---|---|
__init__(bidirectional=True) |
Initialise le graphe |
load_from_csv(filepath) |
Charge depuis CSV |
add_friendship(user, friend) |
Ajoute une relation |
get_friends(user) |
Retourne les amis d'un utilisateur |
get_foaf(user) |
Retourne les amis d'amis |
get_all_users() |
Retourne tous les utilisateurs |
get_statistics() |
Retourne les statistiques |
to_json(filepath) |
Export en JSON |
to_graphml(filepath) |
Export en GraphML (visualisation) |
export_foaf_report(filepath) |
Export rapport FOAF |
python-social-graph/
├── src/social_graph/ # Package source
│ ├── __init__.py
│ ├── cli.py # Interface CLI
│ └── graph.py # Classe SocialGraph
├── data/
│ ├── input/ # Fichiers CSV sources
│ │ └── friends.csv # Exemple
│ └── output/ # Fichiers générés (ignorés par git)
├── docs/
│ └── gephi-guide.md # Guide Gephi
├── examples/
│ └── advanced_usage.py # Exemples d'utilisation
├── social-graph # Script wrapper (point d'entrée)
├── setup.py # Configuration du package
├── pyproject.toml # Configuration moderne
├── requirements.txt # Aucune dépendance requise
├── CLAUDE.md # Guide pour Claude Code
└── README.md # Ce fichier
graph = SocialGraph()
graph.load_from_csv('mon_reseau.csv')
# Trouver les utilisateurs les plus connectés
stats = graph.get_statistics()
for user in graph.get_all_users():
friend_count = len(graph.get_friends(user))
if friend_count >= stats['avg_friends_per_user']:
print(f"{user}: {friend_count} amis")# Suggérer des amis potentiels (FOAF)
user = "Alice"
suggestions = graph.get_foaf(user)
print(f"Suggestions d'amis pour {user}: {suggestions}")# Export GraphML pour Gephi, yEd, Cytoscape
graph.to_graphml('network.graphml')
# Export JSON pour D3.js ou autres outils web
graph.to_json('network_data.json')Ouvrez le fichier .graphml dans Gephi pour:
- Visualiser le réseau social
- Détecter les communautés
- Calculer les métriques de centralité
- Générer des mises en page automatiques
MIT