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)