Graphe des relations d'ajout au groupe entre les membres du Million Project
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

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)