-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse_items.py
54 lines (45 loc) · 1.64 KB
/
parse_items.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import json
import networkx as nx
from pprint import pprint
data = []
with open('scraper/items.json') as f:
data.extend(json.load(f))
nodes = {}
status_colours = {'Active': 'green',
'Unknown': 'green',
'On hold': 'red',
'Split-up': 'red',
'Changed name': 'orange'}
relation_colours = {'Current': 'green',
'Current (Live)': 'green',
'Last known': 'green',
'Last known (Live)': 'green',
'Past': 'red',
'Past (Live)': 'red'}
relation_weights = {'Current': 1.2,
'Current (Live)': 1,
'Last known': 1.2,
'Last known (Live)': 1,
'Past': 0.8,
'Past (Live)': 0.5}
G = nx.Graph()
for band in data:
bid = band['band_id']
if bid not in nodes:
name = band['name']
status = band['status']
G.add_node(bid, label=name, color=status_colours[status])
nodes[bid] = True
for member_type, members in band['members'].items():
for member in members:
mid = member['member_id']
if mid not in nodes:
G.add_node(mid, label=member['name'], color='blue')
nodes[mid] = True
G.add_edge(bid, mid,
color=relation_colours[member_type])
for i, subgraph in enumerate(nx.connected_component_subgraphs(G)):
if len(subgraph.nodes()) > 200:
print 'graph %d' % i
H = subgraph.subgraph([n for n in subgraph if G.degree(n) > 1])
nx.write_dot(H, 'graph%d.dot' % i)