1

I have this tsv file i would like to read and somehow count the numbers of nodes in a path

This is how the parts of tsv file looks like:

  6a3701d319fc3754  1297740409  166  14th_century;15th_century;16th_century;Pacific_Ocean;Atlantic_Ocean;Accra;Africa;Atlantic_slave_trade;African_slave_trade  NULL
  3824310e536af032  1344753412  88  14th_century;Europe;Africa;Atlantic_slave_trade;African_slave_trade 3

the paths is only the ones looking like this : 14th_century;15th_century; seperated by ';'

my code so fare :

import networkx as nx

fh = open("test.tsv", 'rb')
G = nx.read_edgelist("test.tsv", create_using=nx.DiGraph())
print G.nodes()
print G.edges()

So my question is how do i count the numbers of nodes touched by a path?

4
  • which parts are the nodes and edges here? Are you saying that this string 14th_century;15th_century;16th_century;Pacific_Ocean;Atlantic_Ocean;Accra;Africa;Atlantic_slave_trade;African_slave_trade needs to be parsed? Are these all edges or nodes? Commented Apr 5, 2014 at 21:06
  • the edge is the 14th.... and the nodes is the other ones if it gives any sense Commented Apr 6, 2014 at 11:06
  • So are you saying that in 14th_century;15th_century;16th_century;Pacific_Ocean;Atlantic_Ocean;Accra;Africa;Atlantic_slave_trade;African_slave_trade that 14th Century is connected to 15th, 16th century and also pacific ocean etc..? Commented Apr 6, 2014 at 14:49
  • yes they are connected Commented Apr 6, 2014 at 17:54

1 Answer 1

2

I'm using the pandas library here for speed, you can install using pip install pandas and also check here: http://pandas.pydata.org/

Firstly construct our dataframe from your sample code:

In [39]:

temp = """6a3701d319fc3754  1297740409  166  14th_century;15th_century;16th_century;Pacific_Ocean;Atlantic_Ocean;Accra;Africa;Atlantic_slave_trade;African_slave_trade  NULL

  3824310e536af032  1344753412  88  14th_century;Europe;Africa;Atlantic_slave_trade;African_slave_trade 3"""

# construct the dataframe
# in your case replace io.String() with the path to your tsv file
df = pd.read_csv(io.StringIO(temp), sep='\s+', header=None, names=['a','b','c','d','e'])

df
Out[39]:

                  a           b    c  \
0  6a3701d319fc3754  1297740409  166   
1  3824310e536af032  1344753412   88   

                                                   d   e  
0  14th_century;15th_century;16th_century;Pacific... NaN  
1  14th_century;Europe;Africa;Atlantic_slave_trad...   3  

[2 rows x 5 columns]

In [65]:

# use itertools to flatten our list of lists
import itertools

def to_edge_list(x):
    # split on semi-colon
    split_list = x.split(';')
    #print(split_list)
    # get our main node
    primary_node = split_list[0]
    # construct our edge list
    edge_list=[]
    # create a list comprehension from the split list
    edge_list = [(primary_node, x) for x in split_list[1:] ]
    #print(edge_list)
    return edge_list

# now use itertools to flatten the list of lists into a single list
combined_edge_list = list(itertools.chain.from_iterable(df['d'].apply(to_edge_list)))

print(combined_edge_list)

[('14th_century', '15th_century'), ('14th_century', '16th_century'), ('14th_century', 'Pacific_Ocean'), ('14th_century', 'Atlantic_Ocean'), ('14th_century', 'Accra'), ('14th_century', 'Africa'), ('14th_century', 'Atlantic_slave_trade'), ('14th_century', 'African_slave_trade'), ('14th_century', 'Europe'), ('14th_century', 'Africa'), ('14th_century', 'Atlantic_slave_trade'), ('14th_century', 'African_slave_trade')]

# Now construct our networkx graph from the edge list
In [66]:

import networkx as nx

G = nx.MultiDiGraph()
G.add_edges_from(combined_edge_list)
G.edges()


Out[66]:

[('14th_century', '15th_century'),
 ('14th_century', 'Africa'),
 ('14th_century', 'Africa'),
 ('14th_century', 'Atlantic_slave_trade'),
 ('14th_century', 'Atlantic_slave_trade'),
 ('14th_century', 'African_slave_trade'),
 ('14th_century', 'African_slave_trade'),
 ('14th_century', '16th_century'),
 ('14th_century', 'Accra'),
 ('14th_century', 'Europe'),
 ('14th_century', 'Atlantic_Ocean'),
 ('14th_century', 'Pacific_Ocean')]

draw the graph (doesn't look pretty but what the hell):

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.