Skip to content

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

Notifications You must be signed in to change notification settings

dessyd/python-social-graph

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,David
Bob,Alice,Eve,Frank
Charlie,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

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

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

from 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')

Ajouter des amitiés manuellement

graph = SocialGraph(bidirectional=True)

# Ajouter des relations
graph.add_friendship('Alice', 'Bob')
graph.add_friendship('Alice', 'Charlie')

# Export
graph.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é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

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é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")

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, 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

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

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages