Skip to content

Repository files navigation

Python Social Graph

Gestionnaire de graphe social avec import CSV et export JSON. Supporte l'analyse FOAF (Friend of a Friend).

Fonctionnalités

  • ✅ 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

Setup

Prérequis

  • Python 3.12+

Note: Ce projet n'utilise que des modules Python standards. Aucune installation de dépendances n'est requise.

Format CSV

Chaque ligne du fichier CSV représente un utilisateur et ses amis:

Utilisateur,Ami1,Ami2,Ami3,...

Exemple (friends.csv)

Alice,Bob,Charlie,DavidBob,Alice,Eve,FrankCharlie,Alice,David,George

Notes:

  • Les espaces avant/après les noms sont automatiquement supprimés
  • Les doublons sont automatiquement éliminés
  • Les lignes vides sont ignorées

Usage

Le script utilise uniquement des modules Python standards, aucune installation n'est requise.

Script principal

./social-graph <fichier_csv> [options]

Options

OptionDescription
--no-bidirectionalRelations 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)
--statsAffiche les statistiques du graphe
--query-user <nom>Affiche les amis et FOAF d'un utilisateur

Exemples

1. Import basique avec export JSON

./social-graph data/input/friends.csv

Sortie: social_graph.json

2. Avec statistiques

./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

3. Générer un rapport FOAF

./social-graph data/input/friends.csv --foaf-report data/output/foaf_report.json --stats

4. Requête pour un utilisateur spécifique

./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

5. Export GraphML pour visualisation

./social-graph data/input/friends.csv --graphml data/output/friends.graphml --stats

Le fichier .graphml peut être ouvert avec:

  • Gephi - Visualisation et analyse de graphes
  • yEd - Éditeur de diagrammes
  • Cytoscape - Analyse de réseaux biologiques et sociaux

6. Mode unidirectionnel

./social-graph data/input/friends.csv --no-bidirectional --output data/output/graph_unidirectional.json

Utilisation programmatique

Import de la classe

fromsocial_graphimportSocialGraph# Créer un graphe bidirectionnelgraph=SocialGraph(bidirectional=True)
# Charger depuis CSVgraph.load_from_csv('data/input/friends.csv')
# Obtenir les amis d'un utilisateurfriends=graph.get_friends('Alice')
print(f"Amis d'Alice: {friends}")
# Obtenir les amis d'amisfoaf=graph.get_foaf('Alice')
print(f"FOAF d'Alice: {foaf}")
# Statistiquesstats=graph.get_statistics()
print(f"Total utilisateurs: {stats['total_users']}")
# Export JSONgraph.to_json('data/output/my_graph.json')
# Export GraphML (pour visualisation)graph.to_graphml('data/output/my_graph.graphml')
# Rapport FOAFgraph.export_foaf_report('data/output/foaf_report.json')

Ajouter des amitiés manuellement

graph=SocialGraph(bidirectional=True)
# Ajouter des relationsgraph.add_friendship('Alice', 'Bob')
graph.add_friendship('Alice', 'Charlie')
# Exportgraph.to_json('custom_graph.json')

Structure des exports JSON

Graphe complet (social_graph.json)

{
"Alice": ["Bob", "Charlie", "David"],
"Bob": ["Alice", "Eve", "Frank"],
"Charlie": ["Alice", "David", "George"]
}

Rapport FOAF (foaf_report.json)

{
"Alice": {
"direct_friends": ["Bob", "Charlie", "David"],
"friends_of_friends": ["Eve", "Frank", "George", "Helen", "Ivan"],
"total_foaf": 5
}
}

Tests

Exécuter les exemples d'utilisation:

python examples/advanced_usage.py data/input/friends.csv

Ré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

API de la classe SocialGraph

Méthodes principales

MéthodeDescription
__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

Structure du projet

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

Exemples de cas d'usage

1. Analyse de réseau social

graph=SocialGraph()
graph.load_from_csv('mon_reseau.csv')
# Trouver les utilisateurs les plus connectésstats=graph.get_statistics()
foruseringraph.get_all_users():
friend_count=len(graph.get_friends(user))
iffriend_count>=stats['avg_friends_per_user']:
print(f"{user}: {friend_count} amis")

2. Recommandations d'amis

# Suggérer des amis potentiels (FOAF)user="Alice"suggestions=graph.get_foaf(user)
print(f"Suggestions d'amis pour {user}: {suggestions}")

3. Export pour visualisation

# Export GraphML pour Gephi, yEd, Cytoscapegraph.to_graphml('network.graphml')
# Export JSON pour D3.js ou autres outils webgraph.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

Licence

MIT

About

Social graph analyzer for CSV friendship data with FOAF analysis and Gephi export. Zero dependencies, Python standard library only.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages