I wanted to investigate the internal Jana network by looking at how connected we are on Slack. To do so, I used the Slack API to pull the list of all unarchived Slack channels and the list of Jana employees in each channel. As I was looking into this, I learned that I was dealing with a bipartite graph, like this example from Wikipedia below:
A bipartite graph is a graph whose nodes you can split into two groups (like U and V above) such that each node only connects to nodes in the other group. For the Jana network on Slack, these two groups of nodes are the channels and the users. This grouping satisfies the condition for a bipartite graph, since channels can’t themselves be members of other channels, and (since this analysis doesn’t look at direct messages – that would be an invasion of privacy, and also requires Slack admin privileges) users are not directly connected to other users. Even though users aren’t directly connected with each other, we can still explore their connections through the Slack channels they are in.
To do so, I used the python package NetworkX to project this bipartite graph onto the set of users. In this projection, there is an edge between two users if they are in at least one Slack channel together, and the weight of that edge is proportional to the number of channels they have in common.
This graph was a little too big to visualize in two dimensions in a way that doesn’t look like a hairball and crash your browser. Originally, it had 89 nodes – one for each active Jana employee, and 3,547 edges representing all the connections between employees through Slack channels. To pare it down to a more reasonable size, I set a minimum edge weight and looked at a subset of the graph that only had 70 nodes and 903 edges. Here’s a screenshot of an interactive visualization I made with D3:
Unfortunately, we can’t embed the interactive version on the blog, but you can play with it here! Currently, you can hover over nodes to see their name and click and drag on them for fun.
By the way, we’re hiring!