Graphe des relations d'ajout au groupe entre les membres du Million Project
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

script.py 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import math
  2. from million.model.member_movement import MovementType
  3. from million.parsing.facebook_parser import parse_facebook_exports_from_folder
  4. from million.processing.members_movements import compute_members_movements
  5. import igraph as ig
  6. facebook_data_path = './assets/facebook_exports/'
  7. facebook_exports = parse_facebook_exports_from_folder(facebook_data_path)
  8. messages = facebook_exports.messages if facebook_exports else []
  9. movements = compute_members_movements(messages)
  10. aliases = {
  11. '🥇Victor Mélou' : 'Victor Mélou',
  12. '🥉 Augustin Lhotelier Ivey' : 'Augustin Lhotelier Ivey',
  13. '🥈 Maël Delanoë' : 'Maël Delanoë',
  14. 'Lucas Roulin 👄' : 'Lucas Roulin'
  15. }
  16. edges_as_names = []
  17. seen_names = set()
  18. for move in movements:
  19. if move.movementType == MovementType.IN and move.member not in seen_names:
  20. seen_names.add(move.member)
  21. edges_as_names.append((move.initiator, move.member))
  22. vertices_as_names = [b for _,b in edges_as_names]
  23. vertices_as_names.insert(0, '')
  24. nb_vertices = len(vertices_as_names)
  25. edges_as_indexes = []
  26. for a,b in edges_as_names:
  27. if a in aliases: a = aliases[a]
  28. a_idx = vertices_as_names.index(a)
  29. b_idx = vertices_as_names.index(b)
  30. if a_idx == b_idx: a_idx = 0
  31. edges_as_indexes.append((a_idx, b_idx))
  32. g = ig.Graph(nb_vertices, edges_as_indexes)
  33. g.vs["name"] = vertices_as_names
  34. #print(g)
  35. outputfile = "./results/output_plot.png"
  36. visual_style = {}
  37. visual_style["vertex_size"] = 2
  38. visual_style["vertex_color"] = "blue"
  39. visual_style["vertex_label"] = g.vs["name"]
  40. visual_style["edge_width"] = 0.75
  41. visual_style["edge_arrow_width"] = 20
  42. visual_style["bbox"] = (1920, 1920)
  43. visual_style["layout"] = "rt_circular"
  44. visual_style["margin"] = 100
  45. visual_style["vertex_label_angle"] = math.pi * 1.5
  46. visual_style["vertex_label_dist"] = 5
  47. ig.plot(g, outputfile, **visual_style)