## Graphing retweets with Python and GraphViz

On the microblogging site twitter, a blog post is called an update, or informally, a tweet. When someone copies a tweet and posts it to their twitter feed, it’s called a retweet. Sometimes opinions are retweeted by those who share them, other times it’s information, and other times it’s silly memes. This evening, a local friend of mine on twitter started a meme by saying “tweet.” and asking for a retweet. One person who retweeted it got his message retweeted.

I know I’m not the first person to graph retweets, but being curious as to what this particular graph would look like, I decided to do a graph in Python as a programming exercise. I did it using a GraphViz library. The code is here:

```import pydot

graph = pydot.Dot('rt', graph_type='digraph')
tweeps = ('tysoncrosbie',
('phxreguy',
('sbowerman',
('phxwebguy', 'leaky_tiki'),
'refriedchicken')),
'vhgill',
'Yartibise')

def first_flat(tree):
if isinstance(tree, tuple):
return first_flat(tree[0])
else:
return tree

def find_edges(tree):
if isinstance(tree, tuple):
source = tree[0]
for dest in tree[1:]:
find_edges(dest)

find_edges(tweeps)
graph.write_png('rt_graph.png')
```

The code takes a nested list structure (a tree) and produces edges from it, which can be graphed by GraphViz. It uses pydot, a GraphViz library for Python. Here is the resulting image:

Observations:

• Python doesn’t have a built-in list flattening function. This was irritating. Ruby’s is Array#flatten. It would have been so much nicer to have been able to grab the first element of a flattened list rather than write the first_flat function or copy/paste a list-flattening function from the Internet.
• pydot is really simple to use. I liked how it could produce a png file. I was planning just to have it create a dot file and then use GraphViz to create a png, but when I saw the write_png function I decided to just use that.
• GraphViz has reasonable defaults. It produced a nice-looking graph on the first try. I think that’s a big part of why GraphViz is as popular as it is.

I was hoping to have a little more to show for tomorrow’s Python Interest Group meeting, but this will have to do!