The graph is created using sigma.js. All nodes are created immediately. The algorithm loops through all characters and creates or increases the weight for the edges between the nodes. Nodes represent race and profession, so each edge will then represent a character of that race and profession. The closer the nodes are (higher edge weight), the more frequent that type of character appears in the list.