You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.1 KiB
Python

#!/usr/bin/env python3
from itertools import combinations
from math import comb
import networkx as nx
from pyvis.network import Network
net = Network(height='100%', width='100%', directed=False, bgcolor='#1e1f29', font_color='white')
with open('data/FilmFiltrati.txt') as ifs:
for line in ifs:
if line.strip():
movie_id, movie_name = line.split(maxsplit=1)
net.add_node(int(movie_id), label=movie_name)
actors = {} # {actor_id: [movie_id, ...]}
with open('data/Relazioni.txt') as ifs:
for line in ifs:
if line.strip():
movie_id, actor_id = line.split(maxsplit=1)
actor_id = int(actor_id)
movie_id = int(movie_id)
if movie_id not in net.node_ids:
continue
if actor_id in actors:
actors[actor_id].append(movie_id)
else:
actors[actor_id] = [movie_id]
edges = set() # set of unique tuples (actor_id, actor_id)
for actor_id, actors in actors.items():
actors.sort()
for movie_id_1, movie_id_2 in combinations(actors, 2):
edges.add((movie_id_1, movie_id_2))
for movie_id_1, movie_id_2 in edges:
net.add_edge(movie_id_1, movie_id_2)
# net.hrepulsion(node_distance=500, central_gravity=0.3, spring_length=500, spring_strength=0.05, damping=0.2)
# net.repulsion(node_distance=500, central_gravity=0.3, spring_length=200, spring_strength=0.05, damping=0.2)
# net.show_buttons()
# I suggest to modify this parametres using the GUI
net.set_options(""""
var options = {
"nodes": {
"shapeProperties": {
"borderRadius": 11
}
},
"edges": {
"color": {
"inherit": true
},
"font": {
"size": 32
},
"smooth": false
},
"physics": {
"forceAtlas2Based": {
"gravitationalConstant": -443,
"centralGravity": 0.005,
"springLength": 255,
"springConstant": 0.07,
"damping": 0.91,
"avoidOverlap": 0.06
},
"maxVelocity": 57,
"minVelocity": 0.75,
"solver": "forceAtlas2Based"
}
}
""")
net.show('html-files/imdb-movie-graph.html')