Representing temporal network data

Hello,

looking for a python library for analyzing and visualizing dynamic graphs I
recently came across graph-tool which seems to be quite suitable for my
needs. But before getting into my remaining question I believe a big thank
you for Tiago Peixoto is in order: Thanks for all the work you put into this
library! And secondly I should preface with the disclaimer that I am neither
a computer scientist nor mathematician, but a humanities scholar currently
diving in to graph analysis and visualization for a project.

Quickly approaching the limits of Gephi (the Software most of my colleagues
turn to) for analyzing a large dynamic network I thought that I should give
graph-tool a try. I have a large data set of the evolution of categorization
on Wikipedia, i.e. data on when a category has been assigned to or removed
from all pages in Wikipedia. (On a side note: I am currently not aiming to
visualize the entire dataset, but the evolution of topics within Wikipedia)

I searched and read through most of the documentation of graph-tool and
graphml, but there is one thing I just cannot wrap my head around:

Is there a smart or default way of representing dynamic networks in
graph-tool?

I understand that graph tool-allows for adding and removing edges / vertices
dynamically, but is there a (recommended) way of storing the data on when an
edge or a vertice is created/removed/created again/removed again... directly
in the graph? And if not, how would you suggest to do that?

This question does not only relate to the visualization of the graph, but to
analyzing and comparing the graph at multiple ponints in time as well, i.e.
calculating graph_tool.topology.similarity(g1, g2, ...) for the graph at
time 1 and time 2. Of course, I could genrate two (or more) seperate graph
objects for t1 and t2. However, for me it would be more desirable to create
just one graph and to be able to calculate the graphs properties for certain
points in time. A possible solution I could imagine is to make use of
graph.views. But then again, how should I include the data for edge/vertice
creation or removal in a property map?

I suspect this is a question which does not have just one straight forward
answer, but I appreciate any suggestions, tips or links to where to find
more on this issue. And maybe I have even overlooked the solution in the
documentation... Sorry in advance for that.

Thanks a lot and all the best,
marcus

Hi Marcus,

I am pretty sure that Tiago would have more to say on this but did you look
at the following links from the documentation?

https://graph-tool.skewed.de/static/doc/quickstart.html#graph-filtering

https://graph-tool.skewed.de/static/doc/demos/animation/animation.html#dynamic-layout

Regards
Snehal

attachment.html (4.44 KB)

There are many ways to to this, depending on what you want to do in the end.
Because of this, your question is somewhat ill defined. If you want some
sort of canonical representation of dynamical networks, I don't believe such
a thing exists.

A good starting point, however, is to store the static version of the graph,
where the edges are annotated with timestamps as property maps. Then you can
retrieve a temporal snapshot using graph views:

   u = GraphView(g, efilt = time.a == 25)

You can do a lot with this, but there are other situations where other
approaches are better.

Best,
Tiago