def _project_AA(self,side):
"""
Builds the projection of the bipartite network on to the chosen side.
The projection is done using the ADAMIC-ADAR index.
Parameters
----------
side : int or str
Tags for each side of the bipartite network.
"""
self._check_side(side)
aside = self.side if side == self.aside else self.aside
net = self.edges(as_df=True)[[side,aside]]
AA = merge(net,net,how='inner',left_on=aside,right_on=aside)
nodes = self.nodes(side,as_df=True)[[side]].reset_index().rename(columns={'index':side+'_index'})
AA = merge(AA,nodes.rename(columns={side:side+'_x',side+'_index':side+'_index_x'}),how='left',right_on=side+'_x',left_on=side+'_x')
AA = merge(AA,nodes.rename(columns={side:side+'_y',side+'_index':side+'_index_y'}),how='left',right_on=side+'_y',left_on=side+'_y')
AA = AA[AA[side+'_index_x']>AA[side+'_index_y']].drop([side+'_index_x',side+'_index_y'],1)
AA = merge(AA,self.degree(aside,as_df=True))
AA['AA'] = 1./log(AA['degree'])
AA = AA[[side+'_x',side+'_y','AA']].groupby([side+'_x',side+'_y']).sum().reset_index()
self.P[side] = gGraph(node_id=side)
self.P[side].add_weighted_edges_from([val[1:] for val in AA.itertuples()])
nodes = merge(self.P[side].nodes(as_df=True),self.nodes(side,as_df=True),how='left')
properties = nodes.columns.values.tolist()
properties.remove(side)
for prop in properties:
values = dict(zip(nodes[side].values,nodes[prop].values))
set_node_attributes(self.P[side],prop,values)
评论列表
文章目录