










Hallo zusammen,
Ich habe eine 3D-Visualisierung zusammengestellt, die praktisch alle Konversationen, Beiträge, Kommentare und DMs abdeckt, die ich jemals auf Reddit, Twitter, Instagram und Discord geführt habe.
Vor einiger Zeit habe ich eine kleinere Version davon erstellt und versprochen, sie als Open Source bereitzustellen. und dann völlig vergessen. Das tut mir wirklich leid.
Wenn Sie nur den Code sehen möchten: https://github.com/Sarthak-Sidhant/sarthink
Hier sehen Sie, was Sie sehen und wie es tatsächlich unter der Haube funktioniert:
Die Skala: Es werden 302.000 Nachrichten in 61.000 Threads mit 21.000 Personen verfolgt. Das entspricht etwa 82.000 Knoten, die durch 81.000 Beziehungen verbunden sind.
Die Knoten sind entweder bestimmte Threads oder echte Personen.
Wie ich die Daten gesammelt habe:
Ich begann damit, meine Datenarchive von allen vier Plattformen herunterzuladen. Aber Standardarchive geben Ihnen nur dein Nachrichten, denen der gesamte umgebende Kontext fehlt.
Um das zu beheben:
- Für Reddit: Ich habe verwendet
asyncprawmit einer Reihe gleichzeitiger Arbeiter. Es nimmt meine archivierten Kommentar-IDs, lädt den Beitrag, erweitert rekursiv den gesamten Kommentarbaum und speichert den gesamten Thread (übergeordneten Beitrag) als JSON. - Für Twitter: Ich habe eine API eines Drittanbieters (Social Data Tools) aufgerufen, um die Antwortketten meiner Tweets nach oben zu crawlen und die vollständigen Konversationsbäume abzurufen.
- Für Discord: Ich habe DiscordChatExporter verwendet. (Und dabei wurde mein Discord-Konto gesperrt, was ich als Pluspunkt für dieses bestimmte Projekt betrachte)
Sobald die Daten abgerufen waren, habe ich sie analysiert und alles in eine überraschend minimalistische SQLite-Datenbank eingespeist. Alles auf allen vier Plattformen passt sauber in nur drei Tabellen:
Users(id, Plattform, raw_id, display_name)Threads(id, Plattform, platform_thread_id, Titel)Messages(msg_id, thread_id, author_id, timestamp_utc, content, parent_msg_id)
Die Visualisierung:
Mein ursprünglicher Plan war, Cosmograph zu verwenden und ihm einfach eine CSV-Datei zuzuführen. Im Grunde jeder (author_id, thread_id) Paar wird zu einer Kante. Die Größe der Knoten richtet sich nach der Nachrichtenaktivität und die Farbe nach Gruppe.
Das Problem bestand darin, dass physikalische Simulationen für 80.000 Knoten ausgeführt werden mussten d3.js Belastete meine CPU, bis sie Computerschulden hatte.
Um dies zu umgehen, habe ich die XYZ-Koordinaten direkt in die CSV-Datei vorgebacken.
Die Positionen sind nach Clustern gruppiert (z. B. enthält der Reddit-Cluster seine jeweiligen Beiträge, Kommentare, Chatnachrichten usw.).
Aus diesem Grund muss der Browser keine physikalischen Berechnungen durchführen oder irgendetwas simulieren, er rendert lediglich statische Geometrie. Es sind nur Kugeln (Cluster) innerhalb größerer Kugeln, die Mega-Cluster bilden.
Das Frontend ist lediglich ein in ThreeJS geschriebener WebGL-Renderer. Es verwaltet die Kanten/Knoten und Cluster und verfügt über eine anständige Tiefenfunktion (Tiefe 3 gibt Ihnen oft den vollständigen Überblick über den spezifischen Cluster, da Sie für einige Benutzer in Tiefe 2 vorgehen), zusammen mit einem funktionalen (wenn auch etwas idiotischen) Such- und Gruppierungssystem.
Ich wollte nur den Prozess teilen. Lassen Sie mich wissen, wenn Sie Fragen zum Daten-Scraping, -Rendering oder zur Datenaufnahme haben.
Slidewise-Beschriftung:
Folie 1: Eine wunderschöne Collage aus Fotos
Folie 2: Knoten mit Tiefe 3, mit Kanten bis Tiefe 2, nur weit genug gezoomt
Folie 3: d3.js rendert Tausende von Knoten
Folie 4: Cosmograph für Twitter in Blau
Folie 5: Cosmograph für Reddit in Rot/Orange
Folie 6: Kosmograph für ein Twitter Mutual
Folie 7: Konische Knotenbeziehungen zu einem Mutual in Tiefe 1 (jetzt geändert in Kugel)
Folie 8: Person auf Reddit, die auf einen Beitrag mit Tiefe 2 verlinkt, der auf 2,4 Tausend Benutzer verweist
Folie 9: Alle Knoten in 3D, ohne sphärische Begrenzung und mit geringer Schwerkraft, sodass die Knoten nicht aneinander ziehen und im freien Raum liegen
Folie 10: Das Gleiche, ich fand es einfach wirklich cool
Folie 11: Diesmal sehen Sie Beziehungen, aber jetzt in 2D, also von oben nach unten
Von SarthakSidhant