====== Corrected network elements importance measures ======
* Corrected measures: {{notes:vlado:pdf:corrected.pdf|paper}}
* [[https://github.com/bavla/corrected|GitHub]]
* 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, [[http://www.epjdatascience.com/content/4/1/10|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.
[[https://github.com/bavla/Graph|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")