import networkx as nx #Knjizica, ki jo uporabljamo za ustvarjanje in analiziranje mreze
import random
import matplotlib.pyplot as plt
from IPython.display import Image
#Knjižica networkx je izredno uporabna za ustvarjanje in analiziranje različnih
#vrst mrež (tako usmerjene kot tudi neusmerjene). V prvem koraku moramo definirati
#objekt, ki bo hranil vse lasnosti o vozliščih in povezavah mreže.'''
Image(filename='SLIKA_1.png')
G=nx.Graph()
#Posamezna vozlisca lahko dodajamo v mrezo z ukazom
G.add_node(0)
#Mrezo smo tako dodali vozlišče z imenom oz. ID-jem 0
#Izpis vseh vozlisc (Nacin 1)
print("node name = ",G.nodes())
#Vozlišča lahko tudi odvzemamo
G.remove_node(0)
print("node name = ",G.nodes())
G.add_node("Rene")
for i in G:
print("node name = ",i)
#Pocistimo podatke o mrezi.
G.clear()
#V spodnji vrstici ustvarimo polje imen. Vsak zapis v
#polju pa predstavlja posamezna vozlisca mreze
nodes=["Peter","Andreja","Marko","Maja","Boris","Petra","Marjan","Monika","Milan","Tina"]
spol={}
spol["Peter"]="M"
spol["Marko"]="M"
spol["Boris"]="M"
spol["Marjan"]="M"
spol["Milan"]="M"
spol["Andreja"]="F"
spol["Maja"]="F"
spol["Petra"]="F"
spol["Monika"]="F"
spol["Tina"]="F"
#Vozlisca mreze iz zapisa ustvarimo s ukazom.
G.add_nodes_from(nodes)
#Vozliscem lahko dodamo tudi atribute
nx.set_node_attributes(G,'spol',spol)
bb = nx.betweenness_centrality(G)
node_color=[]
print ("-------------")
for i in G:
if G.node[i]['spol']=="M":
node_color.append("blue")
else:
node_color.append("pink")
print ("node name = ",i,"(",G.node[i]['spol'],")")
#Sedaj bomo ustvarili nakljucne povezave med vozlisci:
for i in G:
j=random.randint(0,len(nodes)-1)
jj=nodes[j]
while G.has_edge(i,jj)==True or i==jj:
j=random.randint(0,len(nodes)-1)
jj=nodes[j]
G.add_edge(i,jj)
'''for i in G:
print(i,"pozna %d osebo/e"%(G.degree(i)))
for j in G.neighbors(i):
print(j)'''
#Dolocitev nekaterih topoloskih mer
kavg=float(sum(G.degree().values()))/float(len(G))
print("kavg = ",kavg)
print("<l> = %.1f"%(nx.average_shortest_path_length(G)))
print("<E> = %.2f"%(1.0/nx.average_shortest_path_length(G)))
print("<C> = %.2f"%(nx.average_clustering(G)))
#Porazdelitev vozlisc
lege=nx.spring_layout(G)
ki=[]
for i in G:
ki.append(float(G.degree(i))*10.0)
print (ki)
#izris mreze
nx.draw_networkx_nodes(G,lege,node_size=ki,node_color=node_color,alpha=0.9,linewidths=0.7)
nx.draw_networkx_edges(G,lege,alpha=0.7)
plt.show()