Graphe des relations d'ajout au groupe entre les membres du Million Project
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

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)