Could social web be a graph?
Yoan Blanc — Wed, 24 Jan 2007 — Maths, Semantic Web, Social, Ruby
While I’m
playing with LinkedIn
there are some questions that comes to me.
- How to play with all these relations?
- Is it hard to know at which level is this person from me?
- Or if he/she is in my network at any level?
- Is this kind of Semantic Web? Or be expressed this way? (obviously
yes, be easily, I can’t tell)
I remembered the math lessons from two or three years ago, I love mathematics
more than ever now. Hard to pratice during lunch time. Friendship is a
graph, instead of RDF not directed. And friendship could represented as a
Simple Graph. So I tried to do a graph Graphviz that is cool for
displaying them and Ruby because I need to more (and more) about it and
the way you can hack things with it.
For the math part, I started with the
Adjacency Matrix that is a pretty simple 0 or 1
n✕n matrix.
Next step is to generate a .dot file to GraphViz. This is easy.
A rich information should be at which level from the given node are
the others? What I need is a function that gives me the levels of the
nodes from the current one. It require only a few minutes of braining,
and more to code it (especially with my poor experience, but I’m working
on it, with Ruby).
And the result could be, this nice picture.
Use this script this way (remove the
tube part to see the .dot file):
./graph.rb 26 .93 | dot -Tgif -o graph.gif
Parameters are 26 nodes and 93% chance of unknowing another node.
My conclusion is that even with only few connections by node, the depth of
the friend’s friend is very low and that it’s hard to obtain deep levels.
I think that people in a modest town can reach everybody in it with only
3 or 4 levels.
Alors que
je joue avec LinkedIn
tout un tas de questions me viennent à l’esprit, spécialement en matière de
web social et de réseau (ce dernier ne fait que du réseautage et depuis
peu du social avec partimonie).
- Comment font-ils pour jongler avec toutes ces relations ?
- Est-ce complexe de savoir à quel niveau se trouve telle ou telle
personne de moi ? Voire connaître si elle fait partie de mon réseau ou non ?
- Ceci peut-il être fait en passant par le Web Sémantique ? Si oui,
comment de manière légère, SPARQL (via FOAF) me semblant lourd, l’est-il ?
Cogitant avec tout ça, j’ai ressorti les vieilles mathématiques du tiroir,
j’apprécie beaucoup les maths mais c’est difficile d’en faire régulièrement
une fois sorti d’un cadre scolaire je trouve. Spécialement, si on ne
veut pas être considéré comme une espèce d’autiste (l’autisme étant
bien évidemment complétement différent dans 99.9% des case)
Le modèle de base de relations entre personnes est le graphe, dit graphe
simple car sans boucle ni multiple liens. Ce graphe peut être représenté
par sa matrice d’adjacence
qui se compose de 0 et de 1, un 1 indiquant un lien entre les deux noeuds.
Une fois ce modèle identifié, mon idée a été de pouvoir générer des
graphes et les visualiser simplement. L’outil de visualisation a coulé
de source : Graphviz
qui est aussi simple que flexible. Ensuite, j’ai choisi le langage Ruby
pour générer le format lu par ce dernier, nommé DOT. Ruby car, j’ai du
travail de dégrossissage avec ce langage là pour commencer à en faire
un bon usage.
Le système fonctionne ne trois étapes.
- Génération d’une matrice d’adjacence ;
- Calcul des profondeurs respectives des noeuds vis-à-vis d’un noeud choisi ;
- Génération d’un fichier au format DOT.
Un résultat est visible ici.
Il a été généré via ce script avec
le jeu de commandes suivant qui va générer un graphe de 26 noeuds qui ont
chacun 93% de chance de ne pas avoir de relation avec un autre noeud donné.
./graph.rb 26 .93 | dot -Tgif -o graph.gif
En conclusion de cette petite expérimentation je dirais qu’il n’est pas
si compliqué de jouer avec ses relations (tout en restant à des niveaux
raisonnables) et que de mettre au point un modèle entité-relation
représentant ces principes là ne me semblent pas hors de portée. Autre
point intéressant (et plutôt sociologique pur que geek pur) étant qu’il
faut malgré tout peu de relations pour que la profondeur soit faible,
qu’un noeud puisse atteindre tous les autres rapidement. Je pense que
dans une ville de dimension modeste, une personne doit pouvoir en 3 ou 4
niveau atteindre tout le monde.
Plus personnellement, je n’ai jamais aimé en rencontrant quelqu’un et me
disant que c’était une personne complètement nouvelle de me rendre compte
qu’on a un bon bout de nos d’amis, connaissances qui sont communs. Avoir
joué au scientifique fou, va peut-être me rendre plus ouvert pour ces
aspects là.