Corrected network elements importance measures

  • Corrected measures: paper
  • C:\Users\batagelj\Documents\papers\2015\CRoNoS\london\nets

Overlap weights in Pajek

23. August 2015.

  • Vincent D Blondel1, Adeline Decuyper, Gautier Krings: A survey of results on mobile phone datasets analysis, EPJ Data Science 2015, 4:10

Overlap:

O(u,v) = n(u,v) / ( (deg(u)-1) + (deg(v)-1) - n(u,v))

Network/Create New Network/Transform/Line Values/Set all line values to 1
Network/Create New Network/Transform/Remove/Loops [No]
Network/Create New Network/Transform/Arcs-> Edges [No][5] = Simple
Network/Create Vector/Centrality/Degree/All
Network/Create New Network/with Ring Counts/3-rings/Undirected = Rings
select Simple network
Operations/Network+Vector/Transform/Vector(s)->Line Values/Add = Sum
Network/Create New Network/Transform/Line Values/Add Constant [-2] = Sum2
select Sum network
File/Network/Dispose
select Sum2 as First network
select Rings as Second network
Networks/Cross-intersection/Subtract = Term
select Sum2 network
File/Network/Dispose
select Rings as First network
select Term as Second network
Networks/Cross-intersection/Divide = Overlap
select Rings network
File/Network/Dispose
select Term network
File/Network/Dispose
select Overlap network
File/Network/Change Label [Overlap weights]

macro

Transitive overlap:

Ot(u,v) = nt(u,v) / ( (outdeg(u)-1) + (indeg(v)-1) - nt(u,v))

Corrected overlap:

O(u,v) = n(u,v) / ( (min(deg(u),deg(v))-1) + (Delta-1) - n(u,v))

Overlap weights and clustering coefficient in Python

11. December 2015.

Package Graph

# corrected
# by Batagelj, V.; 11. December 2015
# Corrected network elements importance measures
# program expects as input data a Pajek file T with network with computed
# triangular weights and a file D with nodes degrees
wdir = 'c:/users/batagelj/work/python/graph/graph'
# gdir = 'C:/Users/batagelj/Documents/papers/2015/CRoNoS/london/nets/'
gdir = 'C:/Users/batagelj/Documents/manuscripts/corrected/corr/'
import sys, os
sys.path = [wdir]+sys.path
os.chdir(wdir)
import Graph
from copy import copy, deepcopy
 
T = "UsAirTri.net"
D = "deg.clu"
N = Graph.Graph.loadPajek(gdir+T)
N.loadPajekVec('deg',gdir+D)
 
P = deepcopy(N)
n = len(N)
d = [0]*n
for i in range(n): d[i] = N.getNode(i+1,'deg')-1
# --- Overlap weight
Tmed = 0
for e in N.links():
   (u,v,k) = e
   Te = N.getLink(e,'w')
   if Te > 0: Tmed = max(Tmed,min(d[u-1],d[v-1]))
   Td = d[u-1]+d[v-1]-Te
   if Td <= 0:
      over = 0; print(u,v,d[u-1],d[v-1],Te)
   else: over = Te/Td
   P.setLink(e,'over',over)
 
Tmax = 0
for e in N.links():
   (u,v,k) = e; Te = N.getLink(e,'w')
   if Te > Tmax: Tmax = Te
print('maxTe = ',Tmax)
# --- Corrected Overlap weight
for i in range(n): d[i] = N.getNode(i+1,'deg') - 1
for e in N.links():
   (u,v,k) = e
   Te = N.getLink(e,'w')
   over = 0
   if Te > 0:
      Td = Tmax + max(d[u-1],d[v-1]) - Te
      over = Te/Td
   P.setLink(e,'w',over)
P.savePajek(gdir+'CorrOverlapMax.net')
dat = open(gdir+'overlapMax.csv','w')
dat.write('"Te";"over";"cOver";"m";"M"\n')
for i in range(n): d[i] = N.getNode(i+1,'deg')
for e in P.links():
   (u,v,k) = e; Te = N.getLink(e,'w')
   over = P.getLink(e,'over'); cOver = P.getLink(e,'w')
   m = min(d[u-1],d[v-1]); M = max(d[u-1],d[v-1])
   dat.write(str(Te)+';'+str(over)+';'+str(cOver)+';'+str(m)+';'+str(M)+'\n')
dat.close()
 
# --- Clustering Coefficient --------------------------------------------------
E = [0]*n
for v in N.nodes():
   s = 0
   for e in N.edgeStar(v): s = s + N.getLink(e,'w')
   E[v-1] = s/2
for i in range(n): d[i] = N.getNode(i+1,'deg')
Cc = [0]*n
for i in range(n):
   if d[i] <= 1: Cc[i] = 0
   else: Cc[i] = 2*E[i]/d[i]/(d[i]-1)
   P.setNode(i+1,'Cc',Cc[i])
# --- Corrected Clustering Coefficient
cCc = [0]*n
for i in range(n):
   if d[i] <= 0: cCc[i] = 0
   else: cCc[i] = 2*E[i]/d[i]/Tmax
   P.setNode(i+1,'cCc',cCc[i])
P.savePajekVec('cCc',gdir+'CorrClusC.vec')
P.savePajekVec('Cc',gdir+'ClusC.vec')
csv = open(gdir+'ccMax.csv','w')
csv.write('"deg";"E";"Cc";"cCc"\n')
for i in range(n):
   csv.write(str(d[i])+';'+str(E[i])+';'+str(Cc[i])+';'+str(cCc[i])+'\n')
csv.close()

Comparison diagrams in R

# setwd("C:/Users/batagelj/Documents/papers/2015/CRoNoS/london/nets")
setwd("C:/Users/batagelj/Documents/manuscripts/corrected/corr")
f <- list("integer","numeric","numeric","integer","integer")
t <- read.table("overlapMax.csv",header=TRUE,dec=".",sep=";",colClasses=f)
head(t)
plot(t$over,t$cOver,pch=16,cex=0.7,main="Overlap weights",xlab="overlap",ylab="corrOverlap")
plot(t$Te,t$over,pch=16,cex=0.7,main="Overlap weights",xlab="#triangles",ylab="overlap")
plot(t$Te,t$cOver,pch=16,cex=0.7,main="Overlap weights",xlab="#triangles",ylab="corrOverlap")
plot(t$m/t$M,t$over,pch=16,cex=0.7,main="Overlap weights",xlab="minDeg/maxDeg",ylab="overlap")
plot(t$m/t$M,t$cOver,pch=16,cex=0.7,main="Overlap weights",xlab="minDeg/maxDeg",ylab="corrOverlap")
plot(t$M,t$over,pch=16,cex=0.7,main="Overlap weights",xlab="maxDeg",ylab="overlap")
plot(t$M,t$cOver,pch=16,cex=0.7,main="Overlap weights",xlab="maxDeg",ylab="corrOverlap")
plot(t$m,t$over,pch=16,cex=0.7,main="Overlap weights",xlab="minDeg",ylab="overlap")
plot(t$m,t$cOver,pch=16,cex=0.7,main="Overlap weights",xlab="minDeg",ylab="corrOverlap")
 
f <- list("integer","numeric","numeric","numeric")
t <- read.table("ccMax.csv",header=TRUE,dec=".",sep=";",colClasses=f)
head(t)
plot(t$Cc,t$cCc,pch=16,cex=0.7,main="Clustering coefficients",xlab="clusCoef",ylab="corrClusCoef")
plot(t$deg,t$Cc,pch=16,cex=0.7,main="Clustering coefficients",xlab="deg",ylab="clusCoef")
plot(t$deg,t$cCc,pch=16,cex=0.7,main="Clustering coefficients",xlab="deg",ylab="corrClusCoef")
plot(t$deg,t$E,pch=16,cex=0.7,main="Clustering coefficients",xlab="deg",ylab="#edges")
notes/net/correct.txt · Last modified: 2016/08/20 04:55 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki