Abstract: store network using 2D array in numpy or DataFrame in pandas
The matrix of non-directions and directions network:
A B C D E
A -1 1 1 0 1
B 1 -1 0 1 0
C 1 0 -1 0 1
D 0 1 0 -1 0
E 1 0 1 0 -1
A B C D E
A -1 0 0 0 0
B 1 -1 0 0 0
C 1 0 -1 0 0
D 0 1 0 -1 0
E 1 0 1 0 -1
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 7 15:11:31 2015
@author: yuan
"""
import numpy as np
import pandas as pd
#arrange network
class network_np:
def __init__(self, connects):
self.connects=np.array(connects)
self.edges_num=len(self.connects)
self.nodes=np.unique(np.array(self.connects))
self.nodes_num=len(self.nodes)
self.nodes_dict=dict(zip(self.nodes, range(self.nodes_num)))
def read_connects(self):
net=np.zeros((self.nodes_num,self.nodes_num))
#get 2-D marix to store network
for row in range(self.edges_num):
nodeA=self.connects[row][0]
nodeB=self.connects[row][1]
indexA=self.nodes_dict[nodeA]
indexB=self.nodes_dict[nodeB]
net[indexA][indexB]=1
net[indexB][indexA]=1
net[indexA][indexA]=-1#remove self-connection
net[indexB][indexB]=-1
#print net
return net
def read_direction_connects(self):
net=np.zeros((self.nodes_num,self.nodes_num))
#get 2-D marix to store network
for row in range(self.edges_num):
nodeA=self.connects[row][0]
nodeB=self.connects[row][1]
indexA=self.nodes_dict[nodeA]
indexB=self.nodes_dict[nodeB]
net[indexA][indexB]=1
net[indexA][indexA]=-1#remove self-connection
net[indexB][indexB]=-1
#print net
return net
class network_pd:
def __init__(self, connects):
self.connects=np.array(connects)
self.edges_num=len(self.connects)
self.nodes=np.unique(np.array(self.connects))
self.nodes_num=len(self.nodes)
def read_connects(self):
net=np.zeros((self.nodes_num,self.nodes_num))
net=pd.DataFrame(net, columns=self.nodes, index=self.nodes)
#print net
#get 2-D marix to store network
for row in range(self.edges_num):
nodeA=self.connects[row][0]
nodeB=self.connects[row][1]
net[nodeA][nodeB]=1
net[nodeB][nodeA]=1
net[nodeA][nodeA]=-1#remove self-connection
net[nodeB][nodeB]=-1
print net
return net
def read_direction_connects(self):
net=np.zeros((self.nodes_num,self.nodes_num))
net=pd.DataFrame(net, columns=self.nodes, index=self.nodes)
#print net
#get 2-D marix to store network
for row in range(self.edges_num):
nodeA=self.connects[row][0]
nodeB=self.connects[row][1]
net[nodeA][nodeB]=1
net[nodeA][nodeA]=-1#remove self-connection
net[nodeB][nodeB]=-1
print net
return net
#main program
connects=[['A','C'], ['A','B'], ['A','E'], ['C','E'], ['B','D']]
#store network into 2-D list using numpy
net=network_np(connects)
net.read_connects()
net.read_direction_connects()
#store network into dat frame using panda
net=network_pd(connects)
net.read_connects()
net.read_direction_connects()
No comments:
Post a Comment