I am working on a very large graph of companies and wanted to make some
functions to easily filter out certain subgraphs I would need for some
So I made a graph G and populated it with nodes and edges and some internal
property maps because I don't want to always remake this graph. The point is
to just write the complete graph out to a file once I get through all the
data cleaning and have a final graph in a file.
So this gives me:
G, a <Graph object, directed, with 11944189 vertices and 7828750 edges at
ID (vertex) (type: string)
company_country (edge) (type: string)
shareholder_country (edge) (type: string)
shareholderdirect (edge) (type: double)
Now I just want to do a filtering based on these properties as suggested
earlier in this forum:
g_AT = GraphView(G, efilt=G.ep.company_country.a == 'AT')
But as mentioned in the docs for internal properties: "Internal graph
property maps behave slightly differently. Instead of returning the property
map object, the value itself is returned from the dictionaries"
Which I guess is why running G.ep.company_country.a gives me None, and
running G.ep['company_country'][G.edges().next()] gives me 'AT'.
So for filtering I now do:
ep_filter = G.new_ep('bool')
for e in G.edges():
ep_filter[e] = G.ep['company_country'][e] == 'AT'
But I was wondering if there is some way to not have to go through this edge
by edge but rather just get the whole PropertyArray returned which would be
more elegant and avoid having to constantly make new boolean properties.
PS: for the double type, G.ep.shareholderdirect.a does give me a nice
PropertyArray which I can directly use in the form of
G.ep.shareholderdirect.a > .5, which gives me an easy to use filtering array
to input into GraphViews.
Thanks in advance,