Monadologiska undersökningar 2 – Överlappande facebooksidor

Jag snubblade över en liten idé (eller så snubblade den på mig) när jag satt och kodade på en anonymiseringsteknik för facebookdata. Det konventionella sättet att se på politiska ideologier är ju att de formas och formuleras ”uppifrån”, att de har en normkälla och är underblåsta av en kraftig bas som skapar dess centraliserande kraft kring ett Budskap (som forskaren tolkar och säger Sanningen om till de som inte vet bättre).

Ett annat sätt att se på saken är att börja ”nedifrån och upp”, alltså i det sorlande hav av monader, divider, aktanter (vad vi kallar dem spelar inte särskilt stor roll). Här blir det intressant att studera de politiska varelsernas rörelser, eftersom det är dessa mönster och interaktioner, dessa översättningar och allianser, som i sin tur konstituerar det som vi ser som en politisk helhet. Här talar man mindre om de totalitära idéerna som texter och teser, utan letar efter totalitära affekter, begär, existensformer, interaktionsformer etc. Här hittar man inte fascismen, utan mikrofascismen.

Den empiriska data som presenteras nedan är bara ett litet test och det går inte att dra några slutsatser av dem. Själva insamlingen gjordes medelst det lilla pythonbiblioteket facepy. Jag gick till de öppna sidorna för Sverigedemokraterna, Miljöpartiet, Svenskarnas parti och Avpixlat och laddade ned så mycket jag kunde med Facebooks API-nyckel. Inga speciella tankar om urval alltså, jag hämtade bara vad jag fick, vilket varierade från några hundra till några tusen poster. Därefter valde jag ut alla kommentarer på alla poster och förvandlade varje användares unika Facebook-id till en kryptografisk hashsumma (för anonymisering). Dessa extraherades och skrevs till nya filer som sedan jämfördes i en korstabell:

Sd Mp Svp Avpixlat
Sd 80 92 47
Mp 80 22 3
Svp 92 22 5
Avpixlat 47 3 5

Vad säger då denna figur? Den visar på samförekomst (co-occurrence) av (hashade) Facebook-id mellan Facebooksidorna. Det finns alltså 80 tillfällen då samma person har kommenterat på både Miljöpartiet och Sverigedemokraternas sida, 92 gånger på Sd och Svenskanas Partis sidor, osv. Vi följer alltså konkreta personer, men har avidentifierat dem (visst skulle detta vara en läskig form av ”åsiktsregistrering”).

Men det känns ju väldigt kontraintuitivt att det skulle vara större samförekomst mellan Sd och Mp än vad det skulle vara mellan Sd och Avpixlat. Sd och Svp ligger förvisso nära varandra ”ideologiskt”, men å andra sidan konkurrerar de om om röster. Som ni märker förklarar den aggregerade nivån väldigt lite. Men den kan ändå ge oss vissa riktningar att gå i, vissa spår att följa.

Vad är det då som förklarar siffrorna? Svaret är att informationsrikedomen ökar med förstoringen. Vi måste alltså dyka ned i de 80 samförekomsterna (i ett datamaterial av tiotusentals interaktioner) för att se vad Miljöpartister och Sverigedemokrater har gemensamt (inom ramen för mitt slarvigt genomförda testurval). Men om vi gör det så bryter vi anonymiteten!

Nu kan man förvisso tänka att det är oproblematiskt att ändå analysera detaljerna i helt öppna Facebooksidor och därmed tumma på anonymiteten, eftersom de är tillgängliga för vem som helst på internet.

En viktig sak är nämligen att varje enskilt fall av samförekomst kan ha diametralt olika anledningar till varför den uppstod. Jag hittar exempelvis en miljöpartist som gillar djur som har kommenterat på Sverigedemokraternas sida med:

”Något Sd borde fundera över? Man måste inte alltid tycka som storebror?”

Å andra sidan kommenterar en Sverigedemokrat så här på Miljopartiets sida:

TBC-fall ökar och ökningen härrör uteslutande från personer som kommer hit utifrån. Vad gör ni konkret för att säkerställa att inte diverse smittsamma sjukdomar sprids (dvs det handlar om upprätthållande av folkhälsan)? Vilka resurser tillför ni nu skolor, sjukvård, sociala myndigheter,polis, säkerhetspolis, skolor, kommuner när belastningen på dem ökar kraftigt?

Två exempel av 80 möjliga, totalt icke-representativa. Poängen med detta är bara att göra en distiktion mellan det molekylära och det molära. Hade vi genomfört en opinionsundersökning hade vi fått en jämförelse av folks åsikter utefter kategoriella frågor; vad anser du om X, Y, Z? Resultat: ett genomsnitt.

Men med denna approach, å andra sidan, får vi istället ett ”omvänt arbete”. Varje monad som interagerar med andra monader definierar själva frågan som ställs av dem, men inte utifrån en given kategori, utan snarare utefter imitation/repetition.

Vad som är målet är alltså att kvantifiera dessa kvalitéer så att man dels kan se aggregatens struktur utan att tumma på monadernas myller. Men detta sker nu  utan abstraktioner och ”abstrakt tänkande”. Istället når vi framkomlighet genom repetitioner och associativt tänkande. Lättare sagt än gjort.

Vad tror ni? Förslag på saker som skulle vara intressanta att titta närmare på?

\\

Några skriptsnuttar jag använt mig av.

För att kryptera de enskilda användarnas id-nummer i kommentarsfältena:

from json import load
from os import listdir
import hmac
import hashlib


#### Multi file parser from directory
for filename in listdir("miljopartiet/"): #change path here (1/2)
    with open("miljopartiet/" + filename) as currentFile: #change path here (2/2)
        jsondata = load(currentFile) #parse json.

        #This loop extracts comments. make sure to separate "i" and "item"
        #and hashes them
        try:
            if item['comments']['data']:
                for i in item['comments']['data']:
                    digest_maker = hmac.new(b'r3placewithmegasecretk3y', i['from']['id'].encode(), hashlib.sha256)
                    print(digest_maker.hexdigest())
        except KeyError:
            break

För att räkna fram co-occurrences är det bara att jämför hashsummorna som extraherats ovan, fil för fil. Ungefär:

with open('mpencrypted.txt', 'r') as file1:
    with open('sdencryptedt.txt', 'r') as file2:
        same = set(file1).intersection(file2)

same.discard('\n')

print(same)
print("Number of co-occurences: ")
print(len(same))

4 svar på “Monadologiska undersökningar 2 – Överlappande facebooksidor”

  1. Jag skulle vilja backa ett steg i resonemanget och fråga om ”Facebooks API-nyckel”. Hur fungerar detta? Har Facebook alltså ett öppet API som alla kan använda sig av?

    Jag har tidigare skrivit boten https://twitter.com/FlashbackNu och använde då Twitters öppna API för att posta (och en parsning av Flashbacks forum-struktur för att extrahera inlägg). I samband med det tittade jag lite på att skapa poster från tweets och det vore spännande att titta på något liknande på Facebook.

  2. UddaBoktips: APIet är inte öppet. Man måste först ha ett konto och vara inloggad för att generera en nyckel på https://developers.facebook.com/tools/explorer/

    Den är bara giltig i en timme och har säkert vissa begränsningar i hur mycket man kan ladda ned. Det är lite synd för just tidsbegränsningen gör ju att man i princip inte kan ha det på en server som samlar data löpande.

    Twitter är helt klart mera generösa.

  3. En tanke – många sådana postningar är ju snarast monologer (inte sällan avsedda att dumförklara ngn). Samförekomster på flera partisidor säger då kanske inte så mycket. Om du istället kan titta på aktiv dialog (inlägg som besvaras) borde du få en bättre bild av samtalet. Ev. också värt att titta enbart på positiv dialog – dvs stödjande postningar och postningar som får stödjande respons. Mycket mer manuellt jobb då dock (misstänker jag)…

  4. Johan Hammarlund: Tack för kommentaren! Ja, aktiv dialog är en mycket bättre indikator. Jag tror att det är görbart genom att filtrera i materialet på ett smart sätt, åtminstone i den utsträckning som man kan tråda kommentarer på ett vettigt sätt. Men sedan blir det ju svårare när folk bara ”skriker rakt ut i cyberrymden”. Jfr. till exempel på Flashback där genuina dialoger varvas med meningslösa utrop i samma trådar. Tack för tipset, ska fundera på hur man tar det vidare.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Time limit is exhausted. Please reload CAPTCHA.