pythonigraphsna

How can I mark all triads of a specific type (e.g. 030T) in a graph?


I have a dataframe df with:

Source, Target
aaaa, bbbb
aaaa, cccc
aaaa, dddd
bbbb, cccc
cccc, dddd

and so on.

File "total_edges.csv" (71kb): https://uni-duisburg-essen.sciebo.de/s/WLDD4ytkjekVcIL

I get a graph object and, according to the github issue tracker (https://github.com/igraph/python-igraph/issues/253) the triad nodes/edges but it fails:

import pandas as pd
import igraph as ig

df_edges = pd.read_csv("total_edges.csv")

g = ig.Graph.TupleList(df_edges.itertuples(index=False), directed=True)
tc = g.triad_census()
ffl = ig.Graph.Formula("A --> B --> C, A --> C")
result = g.get_subisomorphisms_lad(ffl, induced=True)
print(result)

Error message (VM with updated Pop_OS x64, Python 3.7.5):

Traceback (most recent call last):
  File "count_triads.py", line 20, in <module>
    ffl = ig.Graph.Formula("A --> B --> C, A --> C")
  File "/home/admin/.local/lib/python3.7/site-packages/igraph/formula.py", line 209, in construct_graph_from_formula
    for start_names, end_names, arrowheads in generate_edges(part):
  File "/home/admin/.local/lib/python3.7/site-packages/igraph/formula.py", line 90, in generate_edges
    raise SyntaxError(msg)
SyntaxError: invalid token found in edge specification: A --> B --> C

How can I mark all nodes in that graph with the triad value (A, B, C, None) for triad type 030T so that I can filter/plot triads and non-triads differently?


Solution

  • About the error, it looks like you're hit by an issue similar to this issue in the formula parser.

    Trying to apply the recent changes or installing the development version of python-igraph may help here.