====== 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")