In [1]:
import networkx as nx
In [2]:
from prettytable import PrettyTable
Data is political blogs linked to each other. Most of these blogs links are dead
Lada A. Adamic and Natalie Glance, "The political blogosphere and the 2004 US Election", in Proceedings of the WWW-2005 Workshop on the Weblogging Ecosystem (2005)
In [3]:
G = nx.read_gml("polblogs.gml")
In [4]:
G.node[345]
Out[4]:
In [5]:
nx.is_directed(G)
Out[5]:
In [6]:
G.number_of_edges()
Out[6]:
In [7]:
G.number_of_nodes()
Out[7]:
In [8]:
nx.is_strongly_connected(G)
Out[8]:
In [9]:
nx.is_weakly_connected(G)
Out[9]:
In [10]:
i=nx.weakly_connected_component_subgraphs(G)
In [11]:
l = max(i, key = len)
In [12]:
l.number_of_nodes()
Out[12]:
In [13]:
nx.is_weakly_connected(l)
Out[13]:
In [14]:
deg=nx.degree(G)
In [15]:
deg_cent=nx.degree_centrality(G)
In [16]:
deg_sort=sorted(deg_cent.iteritems(),key=lambda(k,v):(-v,k))
In [17]:
deg_sort[0:9]
Out[17]:
In [18]:
bet_cent=nx.betweenness_centrality(G)
In [19]:
bet_sort=sorted(bet_cent.iteritems(),key=lambda(k,v):(-v,k))
In [20]:
bet_sort[0:9]
Out[20]:
In [21]:
clo_cent=nx.closeness_centrality(G)
In [22]:
clo_sort=sorted(clo_cent.iteritems(),key=lambda(k,v):(-v,k))
In [23]:
clo_sort[0:9]
Out[23]:
In [ ]:
G2=nx.Graph(G)
In [46]:
eig_cent = nx.eigenvector_centrality(G2)
eig_sort = sorted(eig_cent.iteritems(), key = lambda(k,v):(-v,k))
eig_sort[0:9]
Out[46]:
In [47]:
names1=[x[0] for x in deg_sort[:10]]
names2=[x[0] for x in bet_sort[:10]]
names3=[x[0] for x in clo_sort[:10]]
names4=[x[0] for x in eig_sort[:10]]
names=list(set(names1)|set(names2)|set(names3)|set(names4))
In [48]:
table=[[name,G.node[name]['label'],G.node[name]['value'],deg[name],round(deg_cent[name],4),round(bet_cent[name],4),round(clo_cent[name],4),round(eig_cent[name],4)] for name in names]
In [49]:
table=sorted(table,key=lambda x: -x[3])
In [50]:
t = PrettyTable(['ID','Link','Value','Degree','Degree Cent','Betweenness','Closeness','EigenCent'])
for i in range(0, len(table)):
t.add_row(table[i])
In [51]:
print(t)
In [29]:
nodes0=[]
nodes1=[]
In [30]:
for i,j in G.nodes_iter(data=True):
if j['value']==0:
nodes0.append(i)
else:
nodes1.append(i)
In [31]:
G_node0 = G.subgraph(nodes0)
G_node1 = G.subgraph(nodes1)
In [32]:
G_node0.number_of_nodes()
Out[32]:
In [62]:
G_node0.number_of_edges()
Out[62]:
In [33]:
G_node1.number_of_nodes()
Out[33]:
In [63]:
G_node1.number_of_edges()
Out[63]:
In [52]:
def createTable(graph):
deg=nx.degree(graph)
deg_cent=nx.degree_centrality(graph)
deg_sort=sorted(deg_cent.iteritems(),key=lambda(k,v):(-v,k))
bet_cent=nx.betweenness_centrality(graph)
bet_sort=sorted(bet_cent.iteritems(),key=lambda(k,v):(-v,k))
clo_cent=nx.closeness_centrality(graph)
clo_sort=sorted(clo_cent.iteritems(),key=lambda(k,v):(-v,k))
G2=nx.Graph(graph)
eig_cent = nx.eigenvector_centrality(G2)
eig_sort = sorted(eig_cent.iteritems(), key = lambda(k,v):(-v,k))
names1=[x[0] for x in deg_sort[:10]]
names2=[x[0] for x in bet_sort[:10]]
names3=[x[0] for x in clo_sort[:10]]
names4=[x[0] for x in eig_sort[:10]]
names=list(set(names1)|set(names2)|set(names3)|set(names4))
table=[[name,graph.node[name]['label'],graph.node[name]['value'],deg[name],round(deg_cent[name],4),round(bet_cent[name],4),round(clo_cent[name],4),round(eig_cent[name],4)] for name in names]
table=sorted(table,key=lambda x: -x[3])
t = PrettyTable(['ID','Link','Value','Degree','Degree Cent','Betweenness','Closeness','EigenCent'])
for i in range(0, len(table)):
t.add_row(table[i])
return t
In [53]:
print(createTable(G_node0))
In [54]:
print(createTable(G_node1))
In [55]:
def getDetails(G, deg, deg_cent, bet_cent, clo_cent, eig_cent, name):
table=[[name,G.node[name]['label'],G.node[name]['value'],deg[name],round(deg_cent[name],4),round(bet_cent[name],4),round(clo_cent[name],4),round(eig_cent[name],4)]]
table=sorted(table,key=lambda x: -x[3])
t = PrettyTable(['ID','Link','Value','Degree','Degree Cent','Betweenness','Closeness','EigenCent'])
for i in range(0, len(table)):
t.add_row(table[i])
return t
In [56]:
print(getDetails(G,deg,deg_cent,bet_cent,clo_cent,eig_cent,363))
In [57]:
print(getDetails(G,deg,deg_cent,bet_cent,clo_cent,eig_cent,1000))
In [58]:
def neighbor_details(G, node):
count0 = 0
count1 = 0
for i in G.neighbors(node):
if G.node[i]['value'] == 0:
count0 +=1
else:
count1 +=1
return [count0,count1]
In [59]:
neighbor_details(G, 363)
Out[59]:
In [60]:
neighbor_details(G, 1000)
Out[60]:
In [90]:
from scipy import stats
import numpy as np
In [91]:
stats.ttest_ind((np.array([[deg_cent[name]] for name in nodes0])),(np.array([[deg_cent[name]] for name in nodes1])))
Out[91]:
In [92]:
stats.ttest_ind((np.array([[bet_cent[name]] for name in nodes0])),(np.array([[bet_cent[name]] for name in nodes1])))
Out[92]:
In [93]:
stats.ttest_ind((np.array([[clo_cent[name]] for name in nodes0])),(np.array([[clo_cent[name]] for name in nodes1])))
Out[93]:
In [94]:
stats.ttest_ind((np.array([[eig_cent[name]] for name in nodes0])),(np.array([[eig_cent[name]] for name in nodes1])))
Out[94]: