====== Temporal analysis of PEERE networks ======
===== Adding time to bibliographic networks =====
From original raw PEERE networks we obtained networks pCiteD, pWAd, pWKd, pWJd, pYearD, pNPd restricted to the works with a complete description (DC > 0). They can be transformed into corresponding temporal networks:
# transforming Pajek pubyear and two-mode network into netJSON
# by Vladimir Batagelj, October 5, 2016
# --------------------------------------------------------------
# based on:
# transforming Pajek pubyear and two-mode network into
# Ianus ten network
# by Vladimir Batagelj, June 27, 2015 / March 18, 2014
# --------------------------------------------------------------
# twoMode2netJSON('year92.clu','WA92.net','WAInst.ten',instant=True)
gdir = 'c:/users/batagelj/work/python/graph/graph'
wdir = "C:/Users/batagelj/work/Python/WoS/BM/netJSON"
import sys, os, re, datetime, json
sys.path = [gdir]+sys.path; os.chdir(wdir)
os.chdir(wdir)
import GraphNew as Graph
def twoMode2netJSON(yFile,netFile,jsonFile,instant=True,key='w',replace=True):
def timer(): return datetime.datetime.now().ctime()
print("Read network:",timer(),flush=True)
G = Graph.Graph.loadPajek(netFile)
print("Read years:",timer(),flush=True)
F = Graph.Graph()
for v in G.nodesMode(1): F.addNode(v)
F.loadPajekClu('year',yFile)
print("Make years:",timer(),flush=True)
minT = min(F.getNode(v,'year') for v in F.nodes())
maxT = max(F.getNode(v,'year') for v in F.nodes())
nr, nc = G._graph['dim']
for v in G.nodesMode(1): G.setNode(v,'tin', [(F.getNode(v,'year'),maxT+1,1)])
for v in G.nodesMode(2): G.setNode(v,'tin', [(minT,maxT+1,1)])
for e in G.links():
u,v,*r = G._links[e]; t = F.getNode(u,'year')
G._links[e][4]['tq'] = [(t,t+1,G._links[e][4][key])] if instant else \
[(t,maxT+1,G._links[e][4][key])]
if replace: del G._links[e][4][key]
print("Save temporal network:",timer(),flush=True)
G.setGraph('temporal',True); G.setGraph('mode',2)
G.setGraph('dim',(nr,nc))
G.setGraph('meta',[{"date":timer(),"title":"TwoMode2netJSON"}])
G.setGraph('time',(minT,maxT)); G.setGraph('temporal',True)
G.setGraph('title',"worksXauthors-year instant")
G.setGraph('Tlabs',{str(y):str(y) for y in range(minT,maxT+1)});
G.saveNetJSON(jsonFile,indent=2)
print("Finished:",timer(),flush=True)
return G
# N = twoMode2netJSON('pYeard.clu','pWAd.net','pWAdCum.json',instant=False)
N = twoMode2netJSON('pYeard.clu','pWAd.net','pWAdInst.json',instant=True)
In the network ''pWAd'' we have |W| = 22104, |A| = 62106], and nArcs = 80021.
N = twoMode2netJSON('pYeard.clu','pWAd.net','pWAdCum.json',instant=False)
>>>
== RESTART: C:\Users\batagelj\work\Python\WoS\BM\netJSON\twoMode2netJSON.py ==
Read network: Mon Mar 6 10:16:34 2017
Read years: Mon Mar 6 10:16:41 2017
Make years: Mon Mar 6 10:16:42 2017
Save temporal network: Mon Mar 6 10:16:42 2017
Finished: Mon Mar 6 10:16:56 2017
>>>
===== Derived temporal networks =====
We copied files ''pWAdInst.json'' and ''pWAdCum.json'' to ''/graph/JSON/peere'' .
Using multiplication of networks:
''multiply.py''
gdir = 'c:/users/batagelj/work/python/graph/graph'
wdir = 'c:/users/batagelj/work/python/graph/JSON/peere'
cdir = 'c:/users/batagelj/work/python/graph/chart'
import sys, os, datetime, json
sys.path = [gdir]+sys.path; os.chdir(wdir)
import TQ
from GraphNew import Graph
# file = 'C:/Users/batagelj/work/Python/graph/JSON/peere/pWAdCum.json'
file = 'C:/Users/batagelj/work/Python/graph/JSON/peere/pWAdInst.json'
t1 = datetime.datetime.now()
print("started: ",t1.ctime(),"\n")
G = Graph.loadNetJSON(file)
t2 = datetime.datetime.now()
print("\nloaded: ",t2.ctime(),"\ntime used: ", t2-t1)
# T = G.transpose()
# Co = Graph.TQmultiply(T,G,True)
# CR = G.TQtwo2oneRows()
CC = G.TQtwo2oneCols()
t3 = datetime.datetime.now()
print("\ncomputed: ",t3.ctime(),"\ntime used: ", t3-t2)
ia = { v[3]['lab']: k for k,v in CC._nodes.items() }
======= RESTART: C:\Users\batagelj\work\Python\graph\graph\multiply.py =======
started: Mon Mar 6 15:24:04 2017
loaded: Mon Mar 6 15:24:06 2017
time used: 0:00:01.798103
computed: Mon Mar 6 15:24:20 2017
time used: 0:00:13.585777
>>> CC._links[(ia['BORNMANN_L'],ia['DANIEL_H'])][4]['tq']
[(2005, 2006, 4), (2006, 2007, 3), (2007, 2008, 4), (2008, 2009, 7), (2009, 2010, 4),
(2010, 2011, 11), (2011, 2013, 4), (2015, 2016, 1)]
>>> CC._links[(ia['BROWN_D'],ia['RAFF_H'])][4]['tq']
[(2013, 2014, 11)]
>>> CC._links[(ia['SAPER_C'],ia['MAUNSELL_J'])][4]['tq']
[(2009, 2010, 13), (2010, 2011, 1)]
>>> CC._links[(ia['REYES_H'],ia['ANDRESEN_M'])][4]['tq']
[(1997, 1998, 3), (1998, 1999, 1), (2000, 2002, 1), (2004, 2005, 1), (2005, 2006, 2),
(2006, 2008, 1), (2009, 2010, 2), (2011, 2012, 1), (2013, 2016, 1)]
>>> CC._links[(ia['KRAVITZ_R'],ia['FELDMAN_M'])][4]['tq']
[(2010, 2016, 1)]
>>> CC._links[(ia['DEANGELI_C'],ia['FONTANAR_P'])][4]['tq']
[(2000, 2002, 1), (2003, 2004, 1), (2005, 2012, 1)]
>>> CC._links[(ia['BORNMANN_L'],ia['BORNMANN_L'])][4]['tq']
[(2005, 2006, 4), (2006, 2007, 3), (2007, 2008, 4), (2008, 2009, 9), (2009, 2010, 4),
(2010, 2011, 14), (2011, 2012, 5), (2012, 2013, 7), (2013, 2014, 2), (2014, 2015, 3),
(2015, 2016, 6)]
>>> bb = CC._links[(ia['BORNMANN_L'],ia['BORNMANN_L'])][4]['tq']
>>> tit = 'BORNMANN_L'
>>> TQmax = 15; Tmin = 1995; Tmax = 2016; w = 600; h = 150
>>> Graph.TQshow(bb,cdir,TQmax,Tmin,Tmax,w,h,tit,fill='orange')
{{notes:peere:pics:bornmann.png?400}}
{{notes:peere:pics:bordan.png?400}}
{{notes:peere:pics:daniel.png?400}}
{{notes:peere:pics:reyand.png?400}}
{{notes:peere:pics:sapmau.png?400}}
====== Main journals ======
gdir = 'c:/users/batagelj/work/python/graph/Nets'
wdir = 'c:/users/batagelj/work/python/graph/Nets/peere'
ndir = 'c:/users/batagelj/work/python/WoS/peere2'
cdir = 'c:/users/batagelj/work/python/graph/chart'
import sys, os, datetime, json
sys.path = [gdir]+sys.path; os.chdir(wdir)
from TQ import *
from Nets import Network as N
jrn = ndir+"/WJd.net"
clu = ndir+"/Yeard.clu"
WJi = N.twoMode2netsJSON(clu,jrn,'WJins.json',instant=True)
J = list(WJi.nodesMode(2))
Jt = [ (j, WJi._nodes[j][3]['lab'], TQ.cutGT(WJi.TQnetInSum(j),0)) for j in J ]
p = [0,1971,1981,1991,2001,2006,2011,2016,3000]
To library TQ we added the function ''changeTime'' that recodes a temporal quantity ''a'' to new time intervals given by ''p''
def changeTime(a,p):
i = 0; t = p[i]; v = 0; b = []; cut = False
for sc,fc,vc in a:
while t <= sc:
if v > 0:
if not cut: b.append((i,i+1,v)); v = 0
i = i+1; t = p[i]
if t < fc:
v = v + (t-sc)*vc; b.append((i,i+1,v))
v = (fc-t)*vc; cut = True
else: v = v + (fc-sc)*vc; cut = False
if v > 0: b.append((i,i+1,v))
return(b)
>>> A = [(2,6,1),(8,9,3),(10,13,2),(13,15,4),(18,19,1)]
>>> P = [0,4,11,15,17,20]
>>> changeTime(A,P)
[(1, 2, 2), (2, 3, 7), (3, 4, 12), (5, 6, 1)]
Jr = [ (j,l,TQ.changeTime(a,p)) for (j,l,a) in Jt ]
I = { Jt[j][1] : j for j in range(len(Jt)) }
JL = [ "BEHAV BRAIN SCI", "BMJ OPEN", "BRIT MED J", "CUTIS",
"J ASSOC OFF AGR CHEM", "JAMA-J AM MED ASSOC", "J SEX MED",
"LANCET", "MED J AUSTRALIA", "NATURE", "NEW ENGL J MED",
"PLOS ONE", "SCIENCE", "SCIENTOMETRICS" ]
IJ = [ I[j] for j in JL ]
Ir = [ Jr[i] for i in IJ]
''journals.csv''
"journal", "1900-70", "1971-80", "1981-90", "1991-00", "2001-05", "2006-10", "2011-15"
"BEHAV BRAIN SCI", 0, 0, 33, 26, 0, 0, 0
"BMJ OPEN", 0, 0, 0, 0, 0, 0, 489
"BRIT MED J", 15, 10, 25, 66, 32, 16, 19
"CUTIS", 0, 0, 0, 3, 40, 19, 0
"J ASSOC OFF AGR CHEM", 75, 0, 0, 0, 0, 0, 0
"JAMA-J AM MED ASSOC", 0, 11, 46, 126, 49, 33, 23
"J SEX MED", 0, 0, 0, 0, 2, 31, 17
"LANCET", 21, 0, 9, 38, 14, 10, 5
"MED J AUSTRALIA", 1, 20, 3, 10, 7, 9, 7
"NATURE", 3, 9, 29, 71, 26, 21, 16
"NEW ENGL J MED", 0, 18, 27, 9, 3, 3, 4
"PLOS ONE", 0, 0, 0, 0, 0, 27, 146
"SCIENCE", 7, 24, 42, 45, 13, 19, 15
"SCIENTOMETRICS", 0, 0, 6, 25, 18, 44, 78
A visual representation was created in R
> wdir <- "c:/users/batagelj/work/python/graph/Nets/peere"
> setwd(wdir)
> T <- read.csv("journals.csv",row.names=1)
> T
> colMax <- function(data) sapply(data, max, na.rm = TRUE)
> F <- round(t(T)/colMax(T),3)
> rownames(F) <- c("1900-70", "1971-80", "1981-90", "1991-00", "2001-05", "2006-10", "2011-15")
> t(F)
> b <- c("blue","darkred","magenta","darkgreen","orange", "black","gray","gray","red","gray",
+ "green","cyan2","brown","chartreuse4")
> x <- c(3,7,5,5,1, 4,6,4,2,3, 2,6,2,6)
> dx <- c(0.15,0.1,-0.025,-0.14,-0.1, 0,-0.1,0,0.15,0.05, -0.12,-0.05,-0.2,0.15)
> s <- F[,2];
> plot(1:7,s,xlab="years",ylab="papers",main="Proportions of papers",type="n")
> for (k in 1:14) points(1:7,F[,k],col=b[k],type="l",lw=3)
> for (k in 1:14) text(x[k]+dx[k],F[x[k],k]-0.02,as.character(k),cex=0.7)
{{notes:peere:pics:journals.png?600}}\\
{{notes:peere:pics:journals.pdf}}
journal years
1 BEHAV BRAIN SCI 1900-70
2 BMJ OPEN 1971-80
3 BRIT MED J 1981-90
4 CUTIS 1991-00
5 J ASSOC OFF AGR CHEM 2001-05
6 JAMA-J AM MED ASSOC 2006-10
7 J SEX MED 2011-15
8 LANCET
9 MED J AUSTRALIA
10 NATURE
11 NEW ENGL J MED
12 PLOS ONE
13 SCIENCE
14 SCIENTOMETRICS
====== ======
\\
[[notes:cost:peere:paper|Back to PEERE notes]]