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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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