In [1]:
    
import cPickle as pickle
author_full_name_dict = pickle.load(open("authors_full_name_dict.p", "rb"))
    
In [2]:
    
import sqlite3
conng = sqlite3.connect('pmcv1-graph.db') 
cg = conng.cursor()
    
In [3]:
    
import Queue
import networkx as nx
def buildfnauthortree(rootnode, mastergraphcursor, fndict, depth = 2):
    _g =nx.DiGraph()
    q = Queue.Queue()
    q.put((rootnode, 0))
    while not q.empty():
        node = q.get()
        if node[1] < depth:
            mastergraphcursor.execute('''SELECT coauthors FROM coauthors WHERE author = ?''', [node[0]])
            coauthors = cg.fetchone()[0].split(',')
            for author in coauthors:
                if unicode(fndict[author][0]+" "+fndict[author][1]) not in _g.nodes():
                    _g.add_edge(unicode(fndict[node[0]][0]+ " "+fndict[node[0]][1]), 
                                unicode(fndict[author][0]+" "+fndict[author][1]))
                    q.put((author, node[1]+1))
    return _g
    
In [19]:
    
rootauthor = u'padubidriv.shivaprasad'
g = buildfnauthortree(rootauthor, cg, author_full_name_dict, 2)
    
In [5]:
    
import matplotlib.pyplot as plt
%matplotlib inline
nx.draw(g)
    
    
In [23]:
    
#dump graph in json format for d3 to plot
from networkx.readwrite import json_graph
import io, json
with io.open('testgraphdata.json', 'w', encoding='utf-8') as f:
    f.write(unicode(json.dumps(json_graph.tree_data(g, u"Padubidri V. Shivaprasad", 
                                                    attrs={'children': 'children', 'id': 'name'}))))
f.close()
    
In [3]:
    
import sqlite3
conng = sqlite3.connect('pmcv1-graph.db') 
cg = conng.cursor()
    
In [16]:
    
import Queue
import networkx as nx
def buildcitenetwork(rootnode, mastergraphcursor, indepth = 0, outdepth = 2):
    _g =nx.DiGraph()
    q = Queue.Queue()
    #first go in out direction
    q.put((rootnode, 0))
    while not q.empty():
        node = q.get()
        if node[1] < outdepth:
            mastergraphcursor.execute('''SELECT outcites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        _g.add_edge(node[0], cite)
                        q.put((cite, node[1]+1))
            except ValueError: #when there are none
                pass
    #now go in in direction
    q.put((rootnode, 0))
    while not q.empty():
        node = q.get()
        if node[1] < indepth:
            mastergraphcursor.execute('''SELECT incites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        _g.add_edge(cite, node[0])
                        q.put((cite, node[1]+1))
            except ValueError:
                pass
    return _g
    
In [32]:
    
g= buildcitenetwork(21437221, cg, 2, 2)
    
In [33]:
    
import matplotlib.pyplot as plt
%matplotlib inline
nx.draw(g)
    
    
In [34]:
    
#dump graph in json format for d3 to plot
from networkx.readwrite import json_graph
import io, json
with io.open('citetestdata.json', 'w', encoding='utf-8') as f:
    f.write(unicode(json.dumps(json_graph.node_link_data(g, attrs={'source': 'source', 
                                                                   'target': 'target', 
                                                                   'key': 'key', 
                                                                   'id': 'name'}))))
f.close()
    
In [87]:
    
import sqlite3
conng = sqlite3.connect('pmcv1-graph.db') 
cg = conng.cursor()
    
In [88]:
    
import Queue
import networkx as nx
import colorbrewer
def buildcitenetwork(rootnode, mastergraphcursor, indepth = 0, outdepth = 2, colorscheme = colorbrewer.PuOr):
    _g =nx.DiGraph()
    q = Queue.Queue()
    #set up colors
    _colors = colorscheme[max(outdepth,indepth)*2+1]
    #first go in out direction
    q.put((rootnode, 0))
    _g.add_node(rootnode, color = rgbtohex(_colors[(len(_colors)-1)/2]))
    while not q.empty():
        node = q.get()
        if node[1] < outdepth:
            mastergraphcursor.execute('''SELECT outcites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        _g.add_node(cite, color = rgbtohex(_colors[(len(_colors)-1)/2+node[1]+1]))
                        _g.add_edge(node[0], cite)
                        q.put((cite, node[1]+1))
            except ValueError: #when there are none
                pass
    #now go in in direction
    q.put((rootnode, 0))
    while not q.empty():
        node = q.get()
        if node[1] < indepth:
            mastergraphcursor.execute('''SELECT incites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        _g.add_node(cite, color = rgbtohex(_colors[(len(_colors)-1)/2-node[1]-1]))
                        _g.add_edge(cite, node[0])
                        q.put((cite, node[1]+1))
            except ValueError:
                pass
    return _g
import struct
def rgbtohex(rgbtupleorlistoftuples):
    if type(rgbtupleorlistoftuples) == list:
        returnlist = []
        for tup in rgbtupleorlistoftuples:
            returnlist.append(struct.pack('BBB',*tup).encode('hex'))
        return returnlist
    else:
        return struct.pack('BBB',*rgbtupleorlistoftuples).encode('hex')
    
In [89]:
    
g= buildcitenetwork(21437221, cg, 2, 2)
    
In [90]:
    
#g.nodes(data=True)
    
In [95]:
    
#dump graph in json format for d3 to plot
from networkx.readwrite import json_graph
import io, json
with io.open('citetestdata.json', 'w', encoding='utf-8') as f:
    f.write(unicode(json.dumps(json_graph.node_link_data(g, attrs={'source': 'source',  
                                                                   'target': 'target', 
                                                                   'key': 'key', 
                                                                   'id': 'name',
                                                                   'color': 'color'
                                                                  }))))
f.close()
    
In [1]:
    
import sqlite3
conng = sqlite3.connect('pmcv1-graph.db') 
cg = conng.cursor()
connfull = sqlite3.connect('pmcv1-full.db') 
cf = connfull.cursor()
    
In [2]:
    
import Queue
import networkx as nx
import colorbrewer
def buildcitenetwork(rootnode, mastergraphcursor, authcursor, indepth = 0, outdepth = 2, 
                     colorscheme = colorbrewer.PuOr):
    _g =nx.DiGraph()
    q = Queue.Queue()
    #set up colors
    _colors = colorscheme[max(outdepth,indepth)*2+1]
    #first go in out direction
    q.put((rootnode, 0))
    authcursor.execute('''SELECT ln FROM authors WHERE pmid = ? AND authnum = 0''', [rootnode])
    _g.add_node(rootnode, color = rgbtohex(_colors[(len(_colors)-1)/2]), ln = authcursor.fetchone()[0])
    while not q.empty():
        node = q.get()
        if node[1] < outdepth:
            #authcursor.execute('''SELECT ln FROM authors WHERE pmid = ? AND authnum = 0''', [21437221])
            mastergraphcursor.execute('''SELECT outcites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        authcursor.execute('''SELECT ln FROM authors WHERE pmid = ? AND authnum = 0''', [cite])
                        try: 
                            lastname = authcursor.fetchone()[0]
                        except TypeError:
                            lastname = cite
                        _g.add_node(cite, color = rgbtohex(_colors[(len(_colors)-1)/2+node[1]+1]), ln = lastname)
                        _g.add_edge(node[0], cite)
                        q.put((cite, node[1]+1))
            except ValueError: #when there are none
                pass
    #now go in in direction
    q.put((rootnode, 0))
    while not q.empty():
        node = q.get()
        if node[1] < indepth:
            mastergraphcursor.execute('''SELECT incites FROM cites WHERE pmid = ?''', [node[0]])
            try:
                cites = map(int, cg.fetchone()[0].split(','))
                for cite in cites:
                    if cite not in _g.nodes():
                        authcursor.execute('''SELECT ln FROM authors WHERE pmid = ? AND authnum = 0''', [cite])
                        try: 
                            lastname = authcursor.fetchone()[0]
                        except TypeError:
                            lastname = cite
                        _g.add_node(cite, color = rgbtohex(_colors[(len(_colors)-1)/2-node[1]-1]), ln = lastname)
                        _g.add_edge(cite, node[0])
                        q.put((cite, node[1]+1))
            except ValueError:
                pass
    return _g
import struct
def rgbtohex(rgbtupleorlistoftuples):
    if type(rgbtupleorlistoftuples) == list:
        returnlist = []
        for tup in rgbtupleorlistoftuples:
            returnlist.append(struct.pack('BBB',*tup).encode('hex'))
        return returnlist
    else:
        return struct.pack('BBB',*rgbtupleorlistoftuples).encode('hex')
    
In [5]:
    
g = buildcitenetwork(18593145, cg, cf, 2, 2)
    
In [7]:
    
from networkx.readwrite import json_graph
import io, json
with io.open('citetestdata.json', 'w', encoding='utf-8') as f:
    f.write(unicode(json.dumps(json_graph.node_link_data(g, attrs={'source': 'source',  
                                                                   'target': 'target', 
                                                                   'key': 'key', 
                                                                   'id': 'name',
                                                                   'color': 'color',
                                                                   'ln': 'ln'
                                                                  }))))
f.close()