1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import math
- from million.model.member_movement import MovementType
- from million.parsing.facebook_parser import parse_facebook_exports_from_folder
- from million.processing.members_movements import compute_members_movements
- import igraph as ig
-
- facebook_data_path = './assets/facebook_exports/'
- facebook_exports = parse_facebook_exports_from_folder(facebook_data_path)
-
- messages = facebook_exports.messages if facebook_exports else []
- movements = compute_members_movements(messages)
-
- aliases = {
- '🥇Victor Mélou' : 'Victor Mélou',
- '🥉 Augustin Lhotelier Ivey' : 'Augustin Lhotelier Ivey',
- '🥈 Maël Delanoë' : 'Maël Delanoë',
- 'Lucas Roulin 👄' : 'Lucas Roulin'
- }
-
-
- edges_as_names = []
-
- seen_names = set()
- for move in movements:
- if move.movementType == MovementType.IN and move.member not in seen_names:
- seen_names.add(move.member)
- edges_as_names.append((move.initiator, move.member))
-
- vertices_as_names = [b for _,b in edges_as_names]
- vertices_as_names.insert(0, '')
- nb_vertices = len(vertices_as_names)
-
- edges_as_indexes = []
- for a,b in edges_as_names:
- if a in aliases: a = aliases[a]
- a_idx = vertices_as_names.index(a)
- b_idx = vertices_as_names.index(b)
- if a_idx == b_idx: a_idx = 0
- edges_as_indexes.append((a_idx, b_idx))
-
- g = ig.Graph(nb_vertices, edges_as_indexes)
- g.vs["name"] = vertices_as_names
-
- #print(g)
-
- outputfile = "./results/output_plot.png"
-
- visual_style = {}
- visual_style["vertex_size"] = 2
- visual_style["vertex_color"] = "blue"
- visual_style["vertex_label"] = g.vs["name"]
- visual_style["edge_width"] = 0.75
- visual_style["edge_arrow_width"] = 20
- visual_style["bbox"] = (1920, 1920)
- visual_style["layout"] = "rt_circular"
- visual_style["margin"] = 100
- visual_style["vertex_label_angle"] = math.pi * 1.5
- visual_style["vertex_label_dist"] = 5
- ig.plot(g, outputfile, **visual_style)
|