Graphe des relations d'ajout au groupe entre les membres du Million Project
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

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)