Comment ce graphique «États-Unis de Reddit» est-il créé?

9

Voici un graphique de p. 202 du Dataclysm de Christian Rudder , bien qu'il ait été fait par James Dowdell. Il illustre les relations entre les 200 principaux sous-mariages, qui sont des domaines d'intérêt sur reddit.com où les utilisateurs peuvent soumettre des liens, des commentaires et des votes. Ils sont similaires aux balises de ce site. La taille des régions subreddit représente leur popularité. Les subreddits sont regroupés par des commentaires croisés, et la teinte plus foncée représente le pourcentage de personnes qui restent dans ce subreddit et ne publient pas à d'autres.

S'agit-il simplement d'un partitionnement Voronoi standard, avec une certaine coloration pour l'insularité, ou est-ce quelque chose de plus impliqué?

Comment peut-on s'y prendre pour en faire un?

États-Unis de Reddit

Dimitriy V. Masterov
la source
3
Je ne sais pas, mais je suppose que c'est un cartogramme de Voronoi - on ajuste les centres de points (non représentés) jusqu'à ce que chacune des zones de la région de Voronoi soit proportionnelle à une valeur prédéterminée.
whuber

Réponses:

7

Tout d'abord, je suis James Dowdell, donc je suis plutôt qualifié pour répondre (créé un compte pour répondre, peut confirmer l'identité si quelqu'un est inquiet).

La réponse simple est en effet ce que d'autres ont supposé: il s'agit d'un http://en.wikipedia.org/wiki/Voronoi_diagram . Nous avons utilisé le même concept à la page 194, où les sites voronoi sont les paires de longitude latitude répertoriées par craigslist.org.

Malheureusement, cette connaissance elle-même n'est en fait pas très utile. Avec le graphique Craigslist, il est clair quelles valeurs utiliser pour les sites. Mais quel tour de magie Dataclysm a-t-il utilisé pour attribuer des coordonnées x / y dans ce graphique?

La réponse à cette question est beaucoup plus complexe que la plupart des gens ne le pensent, et je ne peux pas dire que je recommande de refaire ce que nous avons fait. Je parie que quelqu'un d'autre ici pourrait recommander une approche qui obtient plus ou moins le même résultat et qui est beaucoup plus simple.

La vérité est:

Christian et moi avons fait des va-et-vient pendant plus de 3 mois pour créer des graphiques pour ce chapitre, que nous ne pourrions jamais faire fonctionner. Mais, les résultats d'une approche ont souvent alimenté la suivante.

  1. La chose la plus critique implique malheureusement une technique et certains actifs d'image que je ne suis pas libre d'explorer ou de partager de manière significative, car nous pouvons encore les utiliser d'une manière ou d'une autre. Ce que je vais dire, c'est que nous avons pris un http://en.wikipedia.org/wiki/Graph_theory#Graph compliqué que nous avons compilé avec la permission des données de Reddit, impliquant des userids et des subreddits, et nous avons joué avec ce graphique et divers dérivés à l'intérieur de http://gephi.github.io/(Je suis particulièrement fan de "OpenOrd" ces jours-ci). En fait, nous avons obtenu une image magnifique - aurait été le point culminant du livre s'il avait été publié - mais même si cela aurait bien fonctionné sur un site Web, il ne s'imprimait pas bien dans un livre - pas assez de place ou de résolution. Christian envisageait à l'origine de le définir comme un dépliant dans le livre, mais ce n'était tout simplement pas rentable pour Crown.

  2. Cependant, à ce stade, nous avions une image qui avait des coordonnées x / y pour les sous-redits et ils étaient au moins relativement bien organisés dans l'espace x / y. Nous étions également pressés car le délai de publication approchait. Je suis un programmeur d'abord et un gars de données ensuite, donc pour tenir compte des limites extrêmement serrées de la page dans le livre et du temps restant sur l'horloge, mon instinct était d'écrire un programme dans Box2D qui simulait les limites de la page comme murs, mettre une version extrêmement rétrécie du graphique à l'intérieur et simuler la croissance de ces nœuds (pas naturel pour Box2D d'ailleurs, il s'attend à des corps rigides qui ne changent pas) jusqu'à ce que tout soit aligné contre les murs et entre eux. Les nœuds ont augmenté à un rythme proportionnel à la taille du sous-crédit qu'ils représentaient, ce qui signifie que les tailles finales seraient également proportionnelles de la même manière.capture d'écran du programme box2d en cours d'exécution

  3. Le résultat de cela n'était pas très joli du tout, mais cela m'a donné quelque chose de très précieux: les sites voronoi. J'ai pris les centroïdes des polygones box2d résultants, les ai soumis à un processus standard, et c'est ce qui a été utilisé pour le graphique dans le livre. Les étiquettes de texte ont été appliquées à la main dans Photoshop, je crois.

Par ailleurs, la coloration des cellules était liée à une statistique que nous avions développée pour former le graphique en (A)

jdowdell
la source
1
Bienvenue sur le site. C'est proche de la façon dont j'aurais pu essayer de le faire. Utilisez n'importe quelle disposition de graphique pour affecter des coordonnées xy aux nœuds. (Il peut être possible dans certaines dispositions basées sur la force de rendre les cellules approximativement de la taille souhaitée en fonction de la spécification des poids et de la masse des bords, mais je doute qu'elles soient exactes.) Après avoir créé les zones voronoi de la disposition du graphique d'origine, alors je utilisez un outil de cartogramme, comme Scapetoad , pour rendre les zones de fin proportionnelles à la statistique d'intérêt. Cela finit par être assez similaire au programme que vous proposez dans box2d.
Andy W
0

Il ressemble plus à un problème de nuage de mots avec une apparence de polygone Voronoi. Vous devez utiliser le mot fréquence pour décider de l'emplacement (haute fréquence signifie centre). Tant que l'emplacement des mots est déterminé, dessiner le polygone de Voronoi ne devrait pas être un gros problème.

Xiaoyue
la source