||[Jan. 25th, 2003|12:00 pm]
LiveJournal Client Discussions
Using a free graphing library, I threw together a quick and dirty program for visualising your friends neighbourhood. It screen-scrapes userinfo pages to grab lists of friends, and their friends, and then draws them. It's very much a one-hour prototype right now, I wanted to see how it'd look before investing any real time on things like interface or navigation.
I got this far into the prototype, and sort of lost faith because the whole thing is just too dense to get any real information out of. I could make it a little more readable by changing the colour/opacity/z-order of the nodes based on how well-linked they are, but I have a feeling I need something more before this can be a worthwhile toy.
It's fun, though.
Any ideas on how the data could be better visualised? I thought at first that hiding "unimportant" nodes would help, but the outliers (nodes with a single link to them) are the only things that prevent the graph from totally collapsing in on itself. It's not the edges that are the problem, it's the big, honking mess in the middle.
Skipping communities might help.
Can the length of the connecting line be proportional to the number of friends of that node. In other words, users with many friends would be farther away than users with only a few. Or, people who run in small circles stay closer together. Maybe that would be geometrically impossible.
Also, using something smaller than the full usernames as labels might make easier to see.
I'd like to play with the source. If you're really too embarrassed to post it, you could email it to me. :-)
There's no way to tell from the userinfo page which is a community and which is a regular user. The screen-scraper doesn't return any "friends" when it scrapes a community page, though.
As far as I'm aware (which isn't very far since I haven't looked at the source), the graphing code works by making nodes repulse each other, and the connecting lines try to drag the nodes closer together. The graph stabilises around those two forces. So people who share a lot of friends will end up clumped together.
I don't think there's much point to the graph if you can't see the names. Maybe only directly label "important" nodes (ones with lots of links), and have less important nodes labeled by tool-tip...
I'll release the source in a couple of days.
2003-01-24 06:36 pm (UTC)
We used to have this very feature built-in to LJ on the userinfo pages, but as you found out yourself most people have too many friends for it to look cool.
I haven't looked at the code yet, but two thoughts:Use differing colors for nodes (& lines between nodes?) that are friends than for friend-of-friend nodes.
Only one line between each node; if they are both listed as friends of each other, then use a diff color, or some other visual method to indicate that.
Is there any function that determines the distance each node is supposed to have between the other nodes? If that could be turned up an users with, say, more than 100 [direct] friends, that might help.
You may try to do a repelling algorthm(where labels try to repel each other and repel a user defined boundry).
Another possiblility is to do a tree structure, that expands and collapses...
Sorry my ANSI isn't that good...
Then you can balance this tree, so that the middle has less nodes coming off of it then the edges,(which has more room to expand).
Another way you may attempt this is done on this web site:http://www.theyrule.net/
Enter and view a chart that is somewhat simular to what your doing...
hope this helps
Thoughts, not in order:
1) Make it more Dynamic. From the applet, type in the names to add, thus allowing you to see how, myself and eac
are connected to tavalon
2) toggle to exclude communities. This one is a must.
3) toggle to use Friend of
list, instead fo Friend
5) Ability to change font size.
6) Color shift based on distance from a defined node, or number of connections. Or chosen.
7) Ability to save it, and compare against later.
4) put up the source, so others can tinker.
Trees wouldn't work. The dataset is a cyclic directed graph, you just can't map that onto a tree.
2003-01-28 05:28 pm (UTC)
whiny user desires feature :-)
The applet first finds a list of my own [the starting user's] friends. Good place to start.
It then finds full lists of all of my friends. Also wouldn't be useful without this step.
Would it be possible at this step to NEVER display a friend-of-a-friend that isn't also my friend? What this would give you is a picture of which of your friends know each other/cluster near each other. Without the exponential growth (and associated jumble of labels) of FriendsFriends.
2003-01-28 07:41 pm (UTC)
Re: whiny user desires feature :-)
Version 0.2, to be released in about 24 hours from now, works exactly the way you described, but with the additional feature that you can expand on individuals so you can see (for example) how your friends intersect with someone else's.