1105606680000 Lunarstorms sociala nätverk Detta är inget vanligt dagboksinlägg, utan en liten sammanställning utav ett experiment jag pulat med. Om du vill vidarebefordra denna text till folk utanför Lunarstorm kan du använda följande länk: http://dll.nu/dagbok/?e=20050113 Jag har experimenterat med att skapa grafrepresentationer utav de sociala nätverken på Lunarstorm. Jag har inledningsvis inriktat mig på gästboksinlägg, eftersom de ger en dynamisk ögonblicksbild utav folks relationer till varandra. Dessutom, när två personer skriver till varandra flera gånger (svarar på varandras gästboksinlägg) så kan man visa detta som en ”starkare” relation. Gör man en graf över de vanliga vännerrelationerna får man ingen indikation på hur stark en relation är, såvida man inte börjar gradera de olika relationstyperna. Som inspiration och bas använde jag programmet PieSpy [Mutton] som jag sedan modifierade till att passa mina behov. För att göra detta har jag låtit skriva ett program som utgår ifrån min egen gästbok, och för varje inlägg i gästboken så registreras en relation mellan mig och personen som skrivit inlägget. När detta är gjort så går den in i den andra personens gästbok och upprepar precis samma procedur, och så vidare. Genom att göra detta kan man få en graf över alla personers relationer. För varje persons gästbok man följer vidare kommer man att hitta nya människor, d.v.s. nya relationer, och vidare kan man följa dessa nya människors kommunikation och kartlägga deras relationer. Nivån på antalet personer man går vidare till kallar jag för ”djupet”. Med ett djup på 1 så går jag in i, förutom min egen, alla gästböcker tillhörande personer som skrivit till mig - men inte längre. I själva verket läser jag bara av de första 10-30 gästboksinläggen, d.v.s. inte hela gästboken, utan bara ett visst antal sidor utav den. Antalet sidor i gästboken som läses in kallar jag för ”historiken”. För att demonstrera hur det fungerar, betrakta följande graf: http://dll.nu/unarstorm-current.png Jag själv - ”pajp” - finns i mitten utav bilden, och utifrån mig går linjer till personer som skrivit i min gästbok. Från dessa personer går sedan linjer till de som skrivit i deras gästböcker. För personpar som skrivit flera inlägg till varandra visas en tjockare linje. Om man nu bara ökar djupet med 1, så börjar det bli lite mer spännande. Man kan då upptäcka relationer mellan människor som inte jag har haft direkt kontakt med, och man inser att antalet personer som blir inblandade i mitt ”sociala nätverk” ökar väldigt fort. Se på följande graf, med djupet två och historik två: http://dll.nu/lunarstorm_graf_2_2.png (1,4 MB) Bara på detta ”ytliga djup” kan man notera relationer som inte har något med mig att göra, förutom att man lätt kan konstatera att jag bara känner en bråkdel utav alla människor som dyker upp på bilden. Men för att visa en konkret relation som uppenbarar sig: följ linjen från mig, till ”frittsan” lite nedåt åt vänster, och sedan från ”frittsan” till ”_sebbe78_” lite nedåt och till höger. Därefter kan man då följa linjen till ”Tribeca” (uppåt, höger), och vidare till ”Evil_Pelle” (uppåt, höger). Därifrån kan man sedan gå uppåt, vänster till ”PsychosonicCindy”, ”solcrille”, och slutligen ”lilla_ansingen”, som har skrivit i min gästbok och således har en linje tillbaks till mig. Cirkeln är sluten! Men detta är bara ett exempel: hos ”Evil_Pelle” kan man t.ex. också se att han har gästbokat med ”Tux_the_penguin”, som även har gästbokat med mig. Redan på denna nivå inser man också två saker: 1) grafen är väldigt oöversiktlig - det är svårt att hitta en enskild person 2) de yttersta punkterna - det vill säga gästboksinläggen hos de som ligger ”djupast” i vår sökning - är egentligen ganska ointressanta för vårat experiment så länge de inte i uppenbarar någon ytterligare relation förutom den direkta. Dessa två går naturligtvis att råda bot på. Det första man kan göra är att göra grafen mer översiktlig genom att lägga till ett rutnät, och sedan hålla reda på var i rutnätet varje person hamnar. Man kan då upprätta ett index - eller innehållsförteckning - över alla personer som hänvisar till rätt ruta. Här är ett exempel på hur det kan se ut, en sökning med djup 3 och historik 1: http://dll.nu/lunarstorm_3_1_index.png (331 KB) Längst ned på bilden finns innehållsförteckningen med alla namn i bokstavsordning. Som exempel kan man leta reda på mitt namn, ”pajp”, och få reda på att min nod uppenbarar sig i rutan märkt A6-A6. De olika dimensionerna (vågrätt och lodrätt) i rutnätet är namngivna A0..Z9, så varje enskilt ruta får då ett namn - koordinat - som motsvarar den vågräta och lodräta raden. Mig hittar man alltså sju (första rutan är A0) rutor åt höger och sju rutor nedåt. Problem nummer två kan man åtgärda genom att, när man samlat in all data, så låter man programmet gå igenom alla personer (”noder” i grafen), och helt sonika ta bort de som har mindre än två kopplingar till andra personer. Detta kommer naturligtvis resultera i att vissa nya ”lösa ändar” uppstår, men man får bort merparten utav den ”ointressanta” informationen. För varje steg man ökar på djupet och historiken så ökar både antalet inblandade personer och antalet relationer mellan personerna explosionsartat. En enkel graf med djup och historik 5 resulterar i en bild som är 14 MB stor i komprimerad form (närmare 190 MB okomprimerad), och som en dator med litet RAM-minne kommer att ha stora problem med att visa. En sådan finns här: http://dll.nu/lunarstorm-5-5.png (OBS! Klicka inte om du inte har massor med RAM-minne.) För att gå runt det problemet bestämde jag mig för att prova att dela upp en sådan stor bild i mindre små bilder. Man fick då ett mycket mer hanterbart format, där man kunde få en ”utzoomad” version och ”zooma in” genom att klicka på bilden. Jag producerade två sådana testbilder: http://dll.nu/nularspy/test1/ I denna första bild är översikten minskad så att den är 20% utav originalets storlek. Den är gjord med djup 3, historik 3, och omfattar 1854 personer. Mig återfinner man på koordinaterna D9-E5, men som man snabbt inser är det inte direkt lätt att hitta dem, eftersom man måste zooma in mer eller mindre på måfå för att titta på koordinaterna som står i varje ruta, och sedan zooma ut och försöka träffa bättre på ren gissning. När man väl hittat ”sin” ruta så är den inte till så mycket glädje, heller: jag återfinns på den här inzoomade bilden: http://dll.nu/nularspy/test1/unarstorm_07_05.png och det är ganska hopplöst att försöka följa några linjer genom att backa (zooma ut) och sedan zooma in igen. Nästa test jag gjorde innebar en mindre översiktsvariant (10% av originalets storlek) och lite navigeringshjälpmedel för att kunna vandra mellan bildrutorna. Dessutom lade jag till tydligare koordinatbeteckningar i ”0-koordinaterna”. Den återfinns här: http://dll.nu/nularspy/test2/ Det är samma information i denna graf, med bara smärre skillnader. Jag återfinns denna gång på koordinaterna D9-E5. När man nu klickar någonstans i bilden så får man förutom den förstorade delbilden även upp länkar till bilderna över, under och till vänster och höger. Klickar man på den förstorade bilden kommer man tillbaks till översiktsläget. Det är fortfarande inte helt lätt att navigera igenom bilden, men det gick lite enklare än tidigare att hitta till min koordinat på http://dll.nu/nularspy/test2/09_06.html och därifrån med viss möda fortsätta utforska de olika relationerna. Det största problemet nu ter sig vara att det är väldigt mycket information (många personer och framförallt många relationer och streck som korsar varandra) på för liten yta. Samtidigt kan man säkerligen optimera algoritmerna som i nuläget används för att placera ut de olika noderna, för att på så sätt uppnå en mer översiktlig bild. Medan jag skriver detta arbetar mina datorer med att ta fram bilder med både större djup och högre upplösning för att få ännu mer detaljer. Att samla in informationen till Lunarstorm tar lång tid, inte minst eftersom jag enbart gör det på natten för att undvika att belasta Lunarstorms servrar i onödan. Därutöver krävs mycket kapacitetet för att bygga ihop datastrukturerna och inte minst den slutgiltiga bilden. Det finns flera fortsättningar på detta projekt som jag eventuellt kommer att ägna mig åt i mån av tid och lust. Det ena är att löpande konstruera små grafer med lågt djup och kort historik, och därifrån producera bildserier med hur de sociala nätverken förändras och muteras över tiden, såsom upphovsmannen till PieSpy, Paul Mutton, gjort med chatnätverket IRC[Mutton]. Utöver det kan man naturligtvis fortsätta att experimentera med än större grafer, samt analysera graferna för att hitta mönster och t.ex. implementera algoritmer för att hitta gemensamma bekanta och dylikt. Tekniken bakom detta projekt är till stora delar baserat på Muttons verk PieSpy. Jag anpassade PieSpy genom att lägga till funktioner för index och rutnät, samt tog bort vissa IRC-beroenden och gjorde grafritningen mer generisk. Utöver det använde jag kärnan i mitt program Nular [Nular] för att interagera med Lunarstorm - koden för att hämta information och överföra den till grafen är inte mer än dryga 100 rader i nuläget, inklusive funktionalitet för att lagra rådata mellan körningar så att man slipper begära ny information från Lunarstorm vid varje körning. För att sedan efterbehandla bilden använde jag Netpbm [Netpbm] för att, med hjälp utav ett enkelt shellscript, dela upp den i flera små delar (pamdice) samt skapa ”tumnaglar” utav dessa bilder (pnmscale). Efter att detta var gjort använde jag ett enkelt Perl-script för att generera HTML-sidor för förstasidan och de olika undersidorna. På en Pentium 4 2,8 GHz med 1 GB RAM tar det cirka fem minuter att behandla all data och producera informationen på http://dll.nu/nularspy/test2/ exklusive att ladda ner informationen från Lunarstorm. Jag har packat ihop all källkod till en liten .tgz-fil för den som är intresserad, som innehåller allting inklusive PieSpy, mina klasser och Nular. För att köra så ändrar man i nularspy.ini och sedan använder man run.sh eller run.bat för att starta. Filen finns här: http://dll.nu/nularspy/ pv2b [pv2b] använde programmet Zoomify [Zoomify] för att skapa zoombar version utav bilden - som ett första experiment verkar det mycket lovande! Resultatet finns att beskåda här: http://hemma.dll.nu/~pvz/lunarzoom/ Om du är intresserad av mer seriös forskning kring sociala nätverk och dess visualisering rekommenderar jag hemsidan refererad till som [Cederlöf] nedan. Referenser: [Mutton] http://www.jibble.org/piespy/ [Nular] http://dll.nu/nular/ [Netpbm] http://netpbm.sourceforge.net/ [pv2b] http://www.e.kth.se/~pvz/ [Zoomify] http://www.zoomify.com/ [Cederlöf] http://www.lysator.liu.se/~jc/wotsap/leafoftrust.html Tack till: * #linux.se - som uppmärksammade mig på PieSpy och gav mig idén, samt pv2b för tips och idéer till förbättringar * rydis i LysLysKOM som tipsade om Netpbm för efterbehandlingen * SnoppKOM