Graphe des relations d'ajout au groupe entre les membres du Million Project
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

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)