45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
"""
|
|
========
|
|
Football
|
|
========
|
|
|
|
Load football network in GML format and compute some network statistcs.
|
|
|
|
Shows how to download GML graph in a zipped file, unpack it, and load
|
|
into a NetworkX graph.
|
|
|
|
Requires Internet connection to download the URL
|
|
http://www-personal.umich.edu/~mejn/netdata/football.zip
|
|
"""
|
|
|
|
import urllib.request
|
|
import io
|
|
import zipfile
|
|
|
|
import matplotlib.pyplot as plt
|
|
import networkx as nx
|
|
|
|
url = "http://www-personal.umich.edu/~mejn/netdata/football.zip"
|
|
|
|
sock = urllib.request.urlopen(url) # open URL
|
|
s = io.BytesIO(sock.read()) # read into BytesIO "file"
|
|
sock.close()
|
|
|
|
zf = zipfile.ZipFile(s) # zipfile object
|
|
txt = zf.read("football.txt").decode() # read info file
|
|
gml = zf.read("football.gml").decode() # read gml data
|
|
# throw away bogus first line with # from mejn files
|
|
gml = gml.split("\n")[1:]
|
|
G = nx.parse_gml(gml) # parse gml data
|
|
|
|
print(txt)
|
|
# print degree for each team - number of games
|
|
for n, d in G.degree():
|
|
print(f"{n:20} {d:2}")
|
|
|
|
options = {"node_color": "black", "node_size": 50, "linewidths": 0, "width": 0.1}
|
|
|
|
pos = nx.spring_layout(G, seed=1969) # Seed for reproducible layout
|
|
nx.draw(G, pos, **options)
|
|
plt.show()
|