Monadologi och sociologi 1

Jag funderar ibland på hur man skulle kunna konkretisera det resonemang om ”monader” i relation till sociologi som Latour et al. presenterar i artikeln ‘The whole is always smaller than its parts’ – a digital test of Gabriel Tardes’ monads från 2012, en artikel som jag har skrivit om tidigare här på bloggen.

I denna post tänkte jag börja fundera på ett problem som inte tas upp i just den artikeln, men som är temat för Latours An Inquiry into Modes of Existence, nämligen frågan om det finns kvalitativa skillnader mellan olika typer av monader/aktörsnätverk, exempelvis mellan vetenskapliga, religiösa, juridiska eller teknologiska nätverk. Men först till definitionen av en monad ur artikeln från 2012:

Such a radical conclusion is made at least plausible by the new
datasets that allow entities to be individualized by the never ending list of particulars that make them up. Such is what is meant by a monad, a point of view, or, more exactly, a type of navigation that composes an entity through other entities and, by doing so, particularizes all of them successively – ‘all of
them’ being an open ended list the size and precision of which always depend on more inquiries and never from the sudden irruption of a superior level accessible through a brutal shift in methods. (Latour et al. 2012: 600)

Den teoretiska konsekvensen av detta är följande: en entitet individualiseras genom en kollektivitet, alltså, en entitet definieras och får sin karaktär av alla specifika entiteter som den är sammankopplad med. Jag är ”Christopher” på grund av mina miljoner bakterier i magen, mina vänner, mina skolbetyg och skorna jag har på mig (plus tusen andra saker). Jag är, eller rättare sagt erfarenheten av att vara jag är den ”utsiktspunkt” som skapas av alla dessa kopplingar och associationer. Mina magbakterier kan hamna i obalans och jag får ont i magen, mina vänner kan överge mig och mina betyg kan rasa. Termen ”utsiktspunkt” är dock lite missvisande. Jag ser knappast mina magbakterier, men de är ändå helt essentiella för min fortsatta existens.

För att inte få informationsöverflöd behöver jag sällan tänka på bakterierna i min mage, skorna jag bär eller om mina vänner tycker om mig eller inte. Min hjärna har (som tur är) ett begränsat ”arbetsminne” och glömmer snabbt saker som är onödiga att tänka på. Men det gör inte nödvändigtvis de system som har till uppgift att ordna mitt liv. Facebook håller reda på vilka vänner jag gillar (”likear”) med sekundprecision och någonstans i en databas finns mina betyg sparade oavsett om jag försöker glömma dem eller inte. Detta är vad sociologer ibland kallar ”systemvärlden” som inte är helt och hållet tillgänglig för min begränsade perception och minne.

Nog om detta. Poängen är bara att monaderna är nästan oändliga eftersom vi kan fylla på en längre och längre lista av entiteter som är kopplade till mig, mina skor, mina magbakterier eller vad det nu är frågan om. Denna kvalitativa metod har så att säga ingen kvantitativ gräns, men inte heller något ”stoppord” för att sluta addera relationer.

En sak fattas: Denna inledande approach gör ingen essentiell skillnad mellan ett par skor, en bakterie eller en vän. Vid en första anblick är det inget problem så länge vi bara använder oss av den övergripande principen om att mångfalden definierar det enskilda. Det är ju ändå så som en monad fungerar.

Men för att demonstrera var någonstans en distinkt skillnad blir nödvändig tänkte jag tillverka några halvrealistiska exempel, kraftigt förenklade för översiktens skull.

All kod som använts finns i denna Python3/Jupyter-notebook.

Låt säga att vi har följande empirisk data om ”Bob” och ”Lisa”, här i det enkla dataformatet json:

{
"Bob": [
"Alice",
"MIT",
"Lenovo"
],
"Lisa": [
"Alice",
"Harvard",
"Macbook"
]
}

 

Bob känner Alice, han går på MIT och han har en Lenovodator. Lisa känner också Alice men går på Harvard och har en Macbook. Vi kan säga att vi har två monader, dvs. två utsiktspunkter och två listor med entiteter som på olika sätt är kopplade till Bob och Lisa. Istället för datastrukturen ovan kan man rita ett nätverk.

Bob och Lisa känner inte varandra men de har en gemensam bekant, Alice, som i någon mening kan mediera en social relation, exempelvis genom skvaller eller småprat. Bob och Lisa har hundratals andra sociala relationer som kan hjälpa till att definiera (individuera) dem mera precist. De har föräldrar, släkt, partners, kolleger osv. som i sin tur kan förnimma ett litet ”utsnitt” av Lisa och Bob.

Så mycket för antropomorfism. Hade Bob och Lisa läst vid samma universitet hade istället den gemensamma nämnaren varit organisationen (ORG) universitetet. Hade de haft samma preferenser gällande datorhårdvara hade de delat en teknoorganisatorisk
(TEC/ORG) gemensam nämnare. Konventionell sociologi hade underkänt både universitetet och datortillverkaren som sociala relationer eftersom ”kontakten” (i meningen ”sladd”) upphör att vara en ”mellanmänsklig” relation. Detta är en intressant paradox eftersom den konventionella sociologin ändå gör anspråk på att kunna tala om ”MIT-studenter” eller ”Apple-användare” som populationer. Men det är ju precis denna abstraktion som är så bedräglig! Det finns inga människor som är predisponerade att studera vid MIT eller att använda Appledatorer, sådana ”identiteter” kan man bara få genom att bli en monad. Aggregatnivån förklarar inte den kvalitativa relationer, utan endast kvantitativa korrelationer (kanske finns det en korrelation mellan MIT-studenter och Appledatorer vid en population på N=1000, men en sådan korrelation kan bara försöka förklara på denna nivå, men den säger inte så mycket om varken Bob eller Lisa.

Så enkel är relationen mellan ontologi och ”kategori”. Alltså, även om det finns en statistiskt möjlig population av Harvardstudenter och Lenovoanvändare, så förklarar bara ett sådant aggregat utkomsten av en mängd sammanslagna associationskedjor, vilket leder till att detaljrikedomen försvinner.

Så hur går man då vidare in denna kvalitativa grafteori? Min poäng och min fråga i denna bloggpost är att det beror på vilket modus man väljer. Det första exemplet baseras på att man går från ”Bob” till ”Lenovo”. Alltså, man går från en människa till hens teknologiska protes (TEC).

Teknologisk mediering (som bara är ett av flera sätt att mediera något) har en fantastiskt komplexitetsreducerande förmåga, och det moderna samhället – ja, egentligen vilket samhälle som helst – måste ha denna förmåga att omvandla arbetskrävande och omsorgsfullt arbete till enkla val, kommandon och interaktioner.

När Bob interagerar med sin billigt inköpta ”dator” från kinesiska Lenovo skulle man kunna nöja sig med att säga att han ”använder sin dator”. Det är förvisso sant, men det är bara delvis sant eftersom en människa inte vanligtvis interagerar direkt med sin hemmadator. Istället sker det i flera steg. Vi tar ett utsnitt av nätverket ovan och förstorar det i riktning mot Bobs teknologiska association:

Låt oss börja med vad man brukar kalla för ”normalt användande”: Bob kan inte på ett direkt sätt interagera med ”totaliteten” av sin Lenovodator. Han kan inte ha relationer med alla miljoner transistorer och hundratals kondensatorer och litiumjoner samtidigt. Interaktionen mellan Bob och hans dator går i huvudsak via tangentbord, mus och skärm (och högtalare och webkameror…).

Dessa medierar i sin tur olika typer av signaler till datorns RAM-minne, hårddisk och processor, tolkat av ett operativsystem (ja, jag hoppar över ett tiotal steg i denna förekenkling). Varje översättning kan addera ytterligare noder i nätverket, och även om antalet teknologiska komponenter är ändligt, är det ändå i princip oöverskådligt
för en enda enskild ingenjör ju djupare ned i datorns arkitektur man kommer.

Men det som är så speciellt och så effektivt med denna specifikt teknologiska form av mediering är dess förmåga till ”blackboxing”, eller komplexitetsreducering. Utan att veta/bry sig om det interagerar mer eller mindre alla människor med teknologiska artefakter på detta sätt. Varje sekund anropas en Linuxkärna miljarder gånger när människor trycker på sina Androidlurars skärmar och världens totala RAM-minne fylls på så snabbt att det utskrivet på papper skulle ta oss till månen om man travade papprena ovanpå varandra (obs – detta är en gissning). Inte ens en ekologkisk tvål eller biodynamiskt
odlat havre tar oss närmare naturen eller bort från ”tekniken”. Om vi studerar de vad som gör de ekologiska bananernas existens möjlig på konsum finner vi bara teknik, från kniven i handen som skär bananklasen från trädet till jumbojeten som bränner flygfotogen över stilla havet.

Men låt säga att Bob är en duktig programmerare. I så fall är han inte utelämnad till att göra som användargränssnittet bestämmer. Han kan, med tillräckliga kunskaper, ta en ”genväg” och ändra på den drivrutin som bestämmer hur signalerna från tangentbordet ska omvandlas till tecken på skärmen. Även om den vardagliga teknologiska medieringen gör livet möjligt att leva utan att behöva begripa alla artefakter omkring oss, från strumporna vi tar på oss på morgonen till den djupa oljefärgen
vi målar en naturromantisk tavla med, kan den alltid kringskäras givet att vi vet hur man syr en strumpa eller blandar en färgkulör.

Teknologi i all sin ära. Det finns andra typer av monader som är minst lika omvälvande för den mänskliga existensen. En ännu mera intressant relation är den vetenskapliga. Låt säga att Lisa vill utforska hur ljus påverkas av timrummets krökning nära en stor massa. Hon behöver då mer än ett tangentbord, en mus och en skärm!

Här blir det lite lurigt eftersom teknovetenskaperna måste blanda in andra aktörer än de ”rent vetenskapliga” (vad det nu skulle vara) för att få något gjort överhuvudtaget. Det som ibland kallas för ”vetenskapssociologi” missar ofta hela poängen eftersom den konventionella sociologin bara letar efter människor. Men med människor får man väldigt lite gjort. Lisa måste istället dra nytta dels av teknologisk mediering (TEC, som Bob och hans dator) samtidigt som hon måste utsträcka sina tankar till olika tankeexperiment (REF + FIC), i det här fallet den generella relativitetsteorin, för att kunna förklara sina data, samtidigt som hon måste försvara sina observationer inför sina kolleger, samtidigt som hon måste övertyga den institution (ORG) som hon  arbetar inom att finansiera de kostsamma experimenten. När alla dessa faktorer, plus några till, faller på plats kan Lisa skapa referens (REF). En förenklad figur kan ritas som:

Skillnaden mellan Bobs och Lisas nätverk är att Bob kan, givet tillräckliga kunskaper, ta en genväg från sitt tangentbord till de maskininstruktioner som skickas mellan signalerna från tangentbordstryckningarna och vad som visas på skärmen. Teknologier är komplicerade, men de är inte omöjligt komplicerade när de väl har blivit uppfunna och tillverkade. Men för Lisa är situationen en annan, åtminstone om vi låtsas att vi har skruvat bak tiden till ca. 1920 (jo, jag vet, då hade inte Bob haft någon dator heller). Eftersom Lisa försöker hämta hem en observation av ljusets krökning, alltså något som händer oberoende av henne och hennes instrument, är situationen helt annorlunda. Lisa kan inte ta några  omvägar eller genvägar, ljusets krökning går inte att ”bygga om” eller konstrueras på ett annat sätt (”socialkonstruktivism” har alltid haft en mycket begränsad förklaringskraft).

Lisa och hennes astronomikolleger tillbringar förvisso stora delar av sina forskningsprojekt med att bygga teleskop. Men skillnaden mellan att bygga en bro och ett instrument är att brobyggaren inte behöver testa sina teorier mot den yttre gränsen för vårt vetande. Brobyggaren kan räkna med Newtons ekvationer, trots att gravitationen inte är någon ”kraft” och trots att de inte kan förutsäga ljusets bana nära en stjärna eller ett svart hål. Brobyggaren och Bob är båda konstruktivister, för deras uppfinningar är inte beroende av ny kunskap utanför de system som byggs och byggs om, lagas och optimeras. Så även om teknik och vetenskap står i en beroendeställning till varandra, fungerar de på olika sätt.

Men om vi tar en annan monad som kanske är lite mera vardaglig, till exempel en restaurang som vi kan kalla ”The Gentleman Loser”, ser vi lättare hur heterogena monaderna måste vara för att fungera.

 

Å ena sidan kräver restaurangen en organisation (ORG) där olika roller definieras, ofta genom upprättandet av anställningskontrakt och ägandebevis (som i sin tur kan kräva juridiska regler). Å andra sidan är restaurangen samtidigt ett teknologiskt system, från kassaapparaten till
kökets spisar, redskap och frysboxar. Vid strömavbrott – ingen middag. Men restaurangen kräver även kalkyler, planer och investeringar, något som chefen oroar sig för om siffrorna går med minus. Detta är  restaurangens kunskapssystem, men det är inte fråga om en vetenskap (REF) eftersom den endast hänvisar till restaurangen och dess förhållande till andra värdesystem (så kallade ”valuemeters”). Dagspriset på tonfisk baserar sig på en annan chefs kalkyler och hur mycket priset kan höjas
på en flaska vin beror på kundernas semesterbudgetar (även om dessa sällan görs i Excel).

Restaurangmonaden går inte att reducera till varken ett teknologiskt system, en organisationsform eller en ekonomisk kalkyl. Alla dessa tre aspekter är bara ”delar” av restaurangen. Men det vore också fel att säga att restaurangen ”som helhet” går att summera, ungefär som man räknar in får som varit ute på bete, eftersom restaurangen är helt beroende av en mängd exterioritetsrelationer. Flöden av gas och elektricitet, leveranser av kött, fisk, grönsaker, öl och vin, infrastrukturen av bussar som transporterar kunderna, den senaste mjukvaruupdateringen till Excel.. osv. Ingen av dessa livsuppehållande system tänker vi som ”The  Gentleman Loser”, ändå skulle det inte serveras en enda rätt utan dem.

Ibland sätter sig en statistiker på Statistiska centralbyrån ned och gör ett magiskt litet trick. Hen tar och adderar alla inrapporterade vinster och förluster, momssatser och ifyllda formulär från alla restauranger i nationen eller unionen. Därefter lägger han samman alla dessa siffror och får en siffra. ”Restaurangnäringen omsatte 2017 3.45 miljarder kronor, en ökning med fyra procentenheter” (påhittad siffra).

Det är inget fel med aggregerade kalkyler och mått. Men det luriga är att de ibland får oss att tro att det finns en ”ekonomi” som påverkas av lika generella naturlagar som de summor som statistikern på Statistiska centralbyrån räknat ut. Det finns givetvis korrelationer mellan lågkonjunkturer, finanskriser och inflationstillstånd och antalet restaurangbesök i en ”nation”, men dessa säger nästan ingenting om vad det innebär att vara en restaurang.

Existens är alltså inte ett epifenomen av olika korrelationer, utan ett sätt att vara i världen som ett gränssnitt mellan olika sätt att bli till.

Sara Ahmed, lycka, olycka och falskt medvetande

Den 9 februari håller jag föredrag om Sara Ahmed, lycka, olycka och falskt medvetande på ABFs filosofiscen. Detta knyter an till min pågående forskning om lyckoforskning, men jag kommer även att diskutera Ahmeds kritik av ”affektfilosofin” och dess betoning på ”joy”, bland så som den kommer till uttryck hos Braidotti och Colebrook. I detta mellanrum ryms en ny form av lyckokritk som går bortom Benthams och Aristoteles välkända positioner.

Samförfattarnätverk ur Swepub?

Och nu ännu mera bibliometri. Swepubs databas innehåller via API-funktionen uppgifter om forskares institutionstillhörighet. En kollega ringde för ett par veckor sedan och påpekade att detta skulle kunna användas för att studera bland annat disciplin- och fakultetsgränser i relation till den faktiska forskningen som bedrivs.

Två personer som samförfattar en artikel kan ju sägas samarbeta. Om de gör det över disciplingränser kallar vi det för inter/tvär/disciplinär/vetenskap, beroende på perspektiv. Fördelen med den monadologiska nivån är att vi varken behöver göra avkall på den kvaliativa mikronivån eller den aggregerade makronivån. Vi kan zooma in och ut.

Med Skript A (se nedan) hämtade jag alla artiklar som publicerats på Göteborgs universitet 2015-16. Sedan genererade jag en visualiserbar nätverksfil med Skript B. Därefter gjorde jag några justeringar i Gephi: Jag tog bort alla institutioner förutom de som ryms inom samhällsvetenskaplig och humanistisk fakultet. Sedan sorterade jag ut alla ensamförfattare och inkluderade bara artiklar med minst två författare.

Med lite färger och annat visuellt förtydligande får vi en bilds som vi kan ta fram i en helhet som en pdf. Här klustrar sig forskargrupperna ungefär så här:

Screenshot from 2016-01-18 22:28:33

Ett typiskt göteborgskluster: Statsvetenskap och medie- och kommunikationsvetenskap.

Eller:

Screenshot from 2016-01-18 22:30:33

Överskridande av fakultetsgränser. Bra jobbat!

Eller:

Screenshot from 2016-01-18 22:33:15

Min egen forskningsmiljö. Inte superbra. (till mitt försvar måste jag tillägga att Tillämpad IT inte är med i datamängden som jag samarbetar med).

Om någon vill laborera med visualiseringarna går Gephi-filen att ladda ned här.

Nu vet jag inte riktigt vad detta leder någonstans eller hur det kan göras mera överskådligt. Förslag?

 

// Bilagor (Python3)

Skript A

from urllib.request import urlopen

counter = 1

#while True:
while counter < 50000:
  url = 'http://libris.kb.se/xsearch?d=swepub&q=%C3%A5r%3a%282015%29&hitlist&q=l%C3%A4ros%C3%A4te%3agu&f=ext&spell=true&hist=true&n=200&start=' + str(counter)
  print ("Fetching: " + url)
  data = urlopen(url).read()
    #f not data.find(b'"identifier"') >= 0:
  #	print("No more records!")
  #	break
  with open(str(counter) + ".xml", "wb") as outputfile:
    print("Writing file...")
    outputfile.write(data)
  counter += 200

Skript B

from os import listdir
from lxml import etree as ET
from gexf import *
from itertools import combinations
#import xml.etree.ElementTree as ET #Use this if you don't have lxml installed

# Open up a gexf file
gexf = Gexf("Author-Institution network", "GU")
graph = gexf.addGraph("undirected", "static", "Swepub network")
attribute_node = graph.addNodeAttribute("University", "default_value", "string")
attribute_nodetwo = graph.addNodeAttribute("Institution", "default_value", "string")

records = 0 # Just a counter for control
therecords = [] # A list for storing many dictionaries created in the loop below

# The loop for extracting author/institution from the xml-files
for filename in listdir("GUYear2015N47761Searched20160110/"):
    with open("GUYear2015N47761Searched20160110/" + filename) as currentFile:
        tree = ET.parse(currentFile)
        root = tree.getroot()

        for child in root[0]:
            records += 1 #Add to counter above
            #print("-" * 10)
            coauthors = {}
            for c in child: #This iterates over the records
                if c.get("tag") == "100": # The 100 Value is first author
                    authorlist = []
                    for value in c:
                        if value.get("code") == "a": # a is author name
                            author = value.text
                            #print(author)
                        elif value.get("code") == "u": # u is institution
                            #print(value.text)
                            institution = value.text
                            #print(institution)
                            coauthors.update({author: institution})

                elif c.get("tag") == "700": # The 700 value is authors
                    for value in c:
                        if value.get("code") == "a":
                            author = value.text
                            #print(author)
                        elif value.get("code") == "u":
                            #print(value.text)
                            institution = value.text
                            #print(institution)
                            coauthors.update({author: institution})

            therecords.append(coauthors) # Add each dictionary to the list above

#this removes only EXACT duplicate dictionaries from therecords list
#Possible false negative: Two articles may have identical groups of authors
seen = set()
therecordsdeduplicated = []
for d in therecords:
    t = tuple(d.items())
    if t not in seen:
        seen.add(t)
        therecordsdeduplicated.append(d)

#this creates a list which can be used to create edges
edges = []
coauthorcounter = 0 #just a counter
for t in therecordsdeduplicated:
    if len(t) > 1: #This removes single author articles, only more than one authors are allowed
        coauthorcounter += 1 # counts the number of articles with minimum 2 authors
        #print("--")
        #print(len(t))
        edgelist = []
        for key, value in t.items():
            coauthoredge = list(combinations(t, 2)) #This function calculates all possible relations between authors of an article.
            for c in coauthoredge:
                edgelist.append(c)
            newvalue = value.split(', ')
            n = graph.addNode(key, key)
            try:
                print(newvalue[0])
                n.addAttribute(attribute_node, newvalue[0])
            except IndexError:
                print("nothing here...")
            try:
                print(newvalue[1])
                n.addAttribute(attribute_nodetwo, newvalue[1])
            except IndexError:
                print("nothing here...")


            #graph.addNode(value, value) #This adds the Institutions as nodes
        edges.append(edgelist)
        #print(edgelist)

#this creates a list of edges then enumerates it and creates edges
authoredges = []
for e in edges:
    for ee in e:
        #print(ee)
        authoredges.append(ee)

for enumer, e in enumerate(authoredges):
    #print(enumer, e[0], e[1])
    graph.addEdge(enumer, e[0], e[1])


# Print some meta-data
print("There are " + str(records) + " records")
print("There are " + str(coauthorcounter) + " co-authored articles (more than 1 author)\n")

#write file
gexf_file = open("coauthors.gexf", "wb")
gexf.write(gexf_file)

 

Dynamiska visualiseringar av citeringsnätverk – ett test och metodgenomgång

Jag har länge försökt hitta ett bra arbetsflöde för att skapa visualiseringar av dynamiska nätverk, dvs. nätverk som förändras över tid. Alla nätverk förändras ju, även om hastigheterna kan vara väldigt annorlunda. Ett nätverk av vägar, tågräls eller gasledningar kan se ganska oförändrade ut över flera år, även om de hela tiden måste underhållas. Ett nätverk av vänner, kolleger, politiker, lobbyister eller studiekamrater kan uppstå och försvinna inom ungefär samma tidsrymd.

Det är dock ett metodologiskt problem att de flesta sätt som vi visualiserar nätverken på består av statiska representationer. Vi skapar bilder och ”kartor” som hela tiden missar att nätverken aldrig egentligen är helt statiska. Jag och min kollega Gustaf Nelhans försökte råda bot på detta i vår artikel om lyckoforskningens framväxt genom att skapa statiska bilder för olika tidsintervaller. Med hjälp av lite hermeneutisk ifyllnade går det att ställa sig i ett processontologisk modus och få en uppfattning om själva flödet av citeringar.

Men som för de flesta metoder är det önskvärt att öka detaljrikedomen om man vill genomföra en antropologi av det moderna. Jag tänkte här lägga ut en lösning på hur man kan skapa dynamiska nätverksvisualiseringar av publikations(meta-)data hämtad från Web of Science. Exemplet utgörs av min pågående forskning om citizen science och mitt syfte är här att visualisera framväxten av ett citeringsnätverk för forskning som använder sig av medborgarforskning som metod.

Således följer en väldigt teknisk beskrivning. Med tanke på att det troligtvis bara finns en handfull av forskare som gör så här (på svenska) lägger jag ut resultated direkt för er som tänkte sluta läsa nu:

Vad kan man säga om detta nätverk? Kommentarer uppskattas som presenter på julafton!

\\

Nu över till själva metoden. Vad som följer är en ganska omständig process och det är verkligen inte den optimala metoden. Tanken är att jag framöver ska skriva några små skript som automatiserar denna process hela vägen, men jag måste först lära mig lite mera programmering. Men det är ändå bra att lägga ut hela processen så att man vet vad man ska göra.

Således. Ta fram datorkörkortet och se till att du har följande mjukvara:

  • Python (inkl. modulerna networkx och community),
  • find
  • git
  • Gephi
  • ffmpeg
  • (för bonus-features: imagemagick och perl)

Python, find och git borde följa med MacOS/Linux, medan Gephi och ffmpeg får hämtas separat. På Windows måste man (tror jag) installera separat, men var försiktig med de terminalkommandon som jag skriver ut, vissa saker skiljer sig åt. Dessa mjukvaror behövs för de tre stegen i arbetsflödet: 1) förprocessera data, 2) applicera nätverksalgoritmer, 3) rendera video utifrån statiska bilder.

1. Separera datamängder årsvis

När man har hämtat en datamängd från Web of Science består den av en enda textfil. För att Gephi ska kunna bygga dynamiska nätverk måste man antingen ha byggt en färdig .gexf-fil, eller så instruerar man Gephi att ta uppstyckade datamängder och ge dem en tidsstämpel. Den förra metoden är det som saknas rent skriptmässigt (min ambition är att skapa ett sådant skript i framtiden), den senare metoden är den som jag presenterar här (den är mera omständig, men funkar).

Först och främst behöver vi ladda hem en knippe skript som jag hittade på Github skrivna av Reid McIlroy-Young för John McLevey.


git clone https://github.com/mclevey/web_of_science_isi.git

Det är oklart varför dessa skrevs, men de är väldigt användbara, även om de måste modifieras för att breddas i användningsområde. Forskare skriver ju ofta specialiserade verktyg för en viss forskningsfråga. För att sedan anpassa dessa till den fråga man själv ställer måste man koda om dem. Men för detta exempel kommer jag använda dem ganska rakt av.

Ta datamängden från Web of Science och lägg txt-filen i katalogen ISIcollectors. Om du har klistrat ihop flera dataset är det viktigt att du tar bort alla gånger som strängen VR 1.0 förekommer, förutom på andra raden, precis i början av filen. Om denna rad kommer mitt i datamängden kommer skriptet att stoppa.

Kör sedan bara:


python ISISplitter.py

Om allt går vägen kommer du nu få massor med nya textfiler, en för varje år. År är ju den högsta ”upplösningen” vi kan få ur Web of Science, så allt är väl än så länge.

Nu skulle man kunna stanna här och sedan ta varje fil till Sci2 för för-processering och sedan vidare till Gephi. Men det optimala är ju att automatisera detta steg, alltså direkt skapa nätverksfiler från Web of Science-filerna. Det intressanta skriptet co-Citemaker.py gör precis detta. Men, det är inställt på att bara arbeta med en fil åt gången. Som tur är går det att köra det på massor av filer med det finurliga programmet find. Flytta först den ursprungliga filen ur katalogen och kör sedan:


find *.txt -exec python co-citeMaker.py {} \; -exec mv co-CiteNetwork.graphml {}.graphml \;

Vad jag gör övan är att 1) hitta alla .txt-filer 2) köra pythonskriptet på varje fil 3) döpa om oputpufilen till ursprungsfilnamnet + filändelsen graphml. Visst är datorer finurliga!

Nu har vi en .graphml-fil för varje tidsintervall (år). Nu vill man få in detta till Gephi. Den lösning som man borde jobba med på sikt är att direkt jobba mot Gephi’s java-bibliotek, men det får bli ett framtida projekt. Istället jobbade jag mot Gephis grafiska gränssnitt. Här har vi mitt skrivbord avfilmat:

Först generera jag bara ett dynamiskt nätverk som jag genast tar bort. Sedan öppnar jag första filen som jag vill ha in och väljer Time frame som jag sedan definierar årsvis. På så sätt får man fram en tidslinje som man kan laborerar med. Här är min gephi-fil

Nu kan det uppstå ett problem. Kanske är det så att vi vill ha en ”kumulativ” visualisering. Alltså, att noderna inte försvinner för varje år, utan att de ”varar” längre. Detta är i mindre utsträkning en teknisk fråga, utan i första hand en teoretisk: Hur långt ska vi sträcka ut ”relationismen” i vår analys? Finns bara det som hela tiden upprätthålls? I Så fall ska vi låta noderna förfalla när de inte längre är aktiva. Eller, tillåter vi en viss ”eko-effekt” på grund av pragmatisk-epistemiska överväganden? I detta exempel lutar jag åt det senare.

För att göra så att alla noder permanenteras vill vi att de ska vara till och med slutet av vår tidslinje (här 2015). Om man först exporterar från Gephi till .gexf-formatet kan man enkelt jobba mot rådatan.

Så här ser rådatan i gexf-filen ut:


<node id="CIRIACYWANTRUP SV 1975" label="CIRIACYWANTRUP SV 1975" start="1991.0" endopen="1992.0">

Vad som behöver göras är att byta ut alla endopen mot årtalet 2015. Det är bara att söka och ersätta med din favoriteditor, eller så kör man bara följande lilla rad perl (perl är redan inbyggt i vettiga operativsystem och det är smidigare att använda för stora filer):


perl -p -i -e 's/endopen="\d\d\d\d.\d"/endopen="2015.0"/g' filnamn.gexf

Gexf-filen kan nu importeras tillbaka till Gephi. Lite omständigt, jag vet. Men i framtiden kommer jag förhoppningsvis kunna knåpa ihop lite python-skript som fixar till .gexf-filerna som man vill ha dem redan från början.

Nu kommer man till sista steget. Jag hoppar över hur man skapar fina visualiseringar i Gephi, det är ett annat ämne. Men när man har fått det snyggt måste man exportera en bild för varje år. Detta gör man i preview-fönstret och det går bra att bara exportera png-filer till en katalog och numrera dem 1.png, 2.png, 3, 4 osv.

Sedan kan man bara ställa sig i katalogen och köra:


ffmpeg -r 1 -pattern_type glob -i '*.png' -c:v libx264 -pix_fmt yuv420p out.mp4

Så får man en liten filmfil.

För att göra en animerad gif kan man använda sig av smidiga imagemagic och snabbt baka ihop en fil med:


convert -delay 100 -loop 0 *.png animation.gif

För att göra den lite mindre:


convert animation.gif -coalesce temporary.gif; convert -size 1024x1024 temporary.gif -resize 300x300 animationsmall.gif

Så får man:

Det finns flera saker att förbättra här. Bland annat har noderna statiska storlekar (trots att deras ”degree” ändras över tid). Sedan har jag inte kört någon community detection på detta ännu. Men man kan tänka sig att det uppstår och försvinner små (algoritmdefinierade) communities av citeringar. Jag har heller inte kollat mera exakt hur co-citeringen går till i python-skriptet jag använde. Men det är något jag ska jobba med framöver.

Nu ska jag åter dyka in i mitt sommarprojekt. Kommentera gärna!

Destruktion av nationalsånger?

När jag rättar tentor upprätthåller jag strikt objektivitet genom att uteslutande lyssna på Bachs Goldbergvariationer. På en dag hinner man igenom dem tre-fyra gånger. Universum hålls konstant i Leibnizianska monader. Mitt känsloliv är fromt.

Men då och då smyger sig små disruptiva glapp in i min universella Turingmaskin (Personal Computer). Under en vild jakt på The Pirate Bay lyckades jag vid något tillfälle ladda ned en slags studiorepetition av när Goldbergvariationerna spelades in av Glenn Gould. Ett av spåren innehåller någon form av ”feltagningar” där Gould helt plötsligt börjar improvisera fram saker han har ”funderat på”. Resultet är en mashup av Star Spangled Bannner och God Save the Queen, fast med barocka förtecken. Jag transkriberar vad Gould säger:

One of these times I’m gonna be invited to give a concert on the 4th of July, I’m sure. And when I do, I figured out that by leaving out the repeats in the Star Spangled Banner and starting the entry on the thirteenth bar of God Save the King [Queen] and then playing God Save the King over again, and altering the harmony of the second half of God Save the King to modulate to the supertonic region, it has the most marvellous effect. Listen to this /…/

Så lyssnar vi:

Booklooking* The Quadruple Object: Gdansk – Warzaw ICC

Two of my favourite objects are books and trains. Two of my dearest friends are Opalmar and Isabelle. Assembling these four objects in an event equals a great time!

So, I had them starting to read The Quadruple Object, while simultaneously giving mini-lectures on Heidegger’s tool analysis and OOO-philosophy. The train served as my example, and it is a fantastic one because it is clearly a system, a very complex one in fact, where components interact all the time. But as an object, it withdraws from the rails, the wires and the passengers, and must do so in order to be more than just an effect, or a temporary occasion.

Poland is by the way one of my favourite places, and while re-reading the section ”Anti-Copernicus” in TQO, I came to think about the fun fact that Copernicus actually stayed in Gdansk. Oh, and Schopenhauer was born there too. Philosophical travel at its best!

The fact that we had an early morning and a late night before us, the train after a while gently withdrew from our human consciousness and tucked us in for a nap.

Finally home again in Gothenburg, it is time to give all of my attention to my dissertation again, so expect heavy texts in English in a near future.

* Footnote: To ”booklook” something is a philosophical fashion-hack invented by my friend Karl, who here wears a DeLanda book.

GBG vs. Uppsala – 1980

Den senaste tiden har det varit tyst här på bloggen, och så kommer det förbli ett tag framöver då jag är i slutfasen av mitt avhandlingsskrivande. Inte för att det egentligen är ”mer” att göra än annars, utan för att jag bara kan hålla en sak i huvudet samtidigt.

Så, de regelbundna läsarna skall härmed tas med till tidigt 1980-tal då det, ursäkta ordvalet, rasar en debatt om opinionsundersökningars metod och politik.

Vi börjar historien icke-linjärt och baklänges. I torsdags såg jag på SVT Debatt hemma hos min vän Johannes. Programmet handlade om huruva vi ska ha kärnkraft eller inte, och följande bild uppenbarade sig:

SVT hade beställt en opinionsundersökning av Sifo. För det otränade ögat är det business as usual, men en samhällsvetare identifierar genast detta som opinionsjournalistik. Om opinionsjournalistik är bra eller dåligt för det offentliga samtalet finns det många teorier om. Exempelvis var Jürgen Habermas kritisk till att det reducerade samtalet till siffror och blev en teknologi snarare än en diskussion. Andra, framför allt Walter Lippman tyckte att det var en bra idé och gav uttryck för folkviljan. I vissa länder förbjuds att man publicerar opinionsundersökningar, medan Frankrike och USA dryper av enkätundersökningar.

Men det där är ju bara teori, på flödesontologiskt vis gäller det att undvika ”kritik”. Istället framträder det intressanta när vi ser hur saker och ting utvecklar sig när vi går bakåt (le pli).

Från samma SVT-Debatt transkriberar jag följande uttalande av Kjell Jansson, VD Svensk Energi:

Den här undersökningen som du relaterar till den är ju väldigt mycket i affekt /så att/ Jag tror faktiskt att SOM-institutet som faktiskt finns här i Göteborg gör en hel del undersökningar om inställningar till energifrågor… jag tycker att dom… ja

Sifo-undersökningar och opinionsundersökningar sker i affekt, men det finns vetenskapliga undersökningar som är bättre, enligt Jansson. Frågan är dock inte om han har rätt eller fel (kritiken igen) utan hur det blev möjligt för honom att säga så.

Vi måste därmed skruva tillbaka tiden till omkring 1980 och se hur det blev som det blev. Givetvis kan man gå längre tillbaka än så, men, nu var det här bara en bloggpost :).

SOM-institutet, som Jansson har förtroende för, grundades 1986 och bygger på postalenkäter. Undersökningarna har gjorts varje år, och idag är de så stora att de går ut till ett urval av 9000 respondenter.

Men, varken metoden postalenkäter eller den stundande debatten om opinionsjournalistiken var givna vid åttiotalets början.

Vi börjar med postalenkätsmetoden, och citerar ur Hans Zetterberg 1978 (1), som då var chef på Sifo:

Postenkäter till allmänheten ger för stora avvikelser för att kunna användas i seriösa opinionsundersökningar. Efter påminnelser och löften om belöning för insända formulär återstår ändå vanligen ett bortfall av 40 à 50 procent. Man brukar säga att postenkäter visar opinionen hos ”korsordsfolket”, alltså de människor som tycker om att fylla i rutor och skicka in lösningar. Korsordsfolk tänker och tycker annorlunda än andra och inga vägningar eller poststraftifieringar i världen kan göra dem lika andra” (146)

Zetterberg kommer att få fel 1986 när SOM-institutet gör sin första postalenkät, som får 68 procents svarsfrekvens, och utförs av SCB.

Den andra delen av debatten kan man säga handlar om opinionsundersökningarnas ”politik” (i den där bortglömda betydelsen ”partier”). Zetterberg igen:

”Eftersom pressen i Sverige (på ledarsidorna) har en stark borgerlig dominans får man ibland intrycket att SIFO är borgerligt och att opinionsundersökningarna alltid stöder de borgerliga. I verkligheten är Sifo partipolitiskt neutralt och instititutets siffror stöder ingalunda systematiskt varken den ena eller den andra. Tyvärr handlar kommentarerna ofta om små skillnader som ligger inom felmarginalen. Det vore bättre om kommentarerna rörde allmänna trender snarare än enstaka fluktuationer”. (158)

Men hur ser det då ut på den vetenskapliga sidan? I den moderna konstitutionen skall ju vetenskaperna hållas fria från den gamla politiken, och inte minst vara epistemologiskt särskild från andra kunskapsformer. Vi vänder oss till Ulf Himmelstrand som 1985 (2) skriver:

”Svenska akademiska sociologer har med några få undantag varit ointresserade av opinions- och attitydundersökningar och deras metodik alltsedan mitten på 60-talet. Sådana undersökningar har i gengäld blivit en viktig angelägenhet för massmedia, politiska partier och kommersiella opinionsundesökningsinstitut.” (59)

”Just därför är det av vikt att opinionsundersökare inte bara använder de bästa vetenskapliga metoder för att belägga majoritetsförhållanden utan också ägnar uppmärksamhet åt de andra frågor som ovan antytts…” (64)

För att göra en lång historia bloggkort: Sedan slutet av 40-talet bedrev the Uppsala School of Sociology, som Zetterberg har en hel del gemensamt med, en radikalt kvantitativ sociologi, som sedan avtog under 60-talet.

På åttiotalet rasade även en annan debatt, den om den offentliga sektorns storlek. Från höger tyckte man den var för stor och från vänster ville man fortsätta ha en stark offentlig sektor. Givetvis blir då vad ”opinionen” tycker en politisk fråga, precis som opinionsaffekterna efter Fukushima som presenterades ovan. Här tar Himmelstrand Göteborgarnas sida istället för Sifos:

”Sammanställer man resultaten av en rad återkommande SIFO-undersökningar och väljarundersökningar utförda vid Göteborgs universitets statsvetenskapliga institution från början av 70-talet till 1982, så kommer man till följande resultat i stora drag. Svenska folkets stöd för den offentliga sektorn kvarstår. (65)

Således bjöd jag på ett litet smakprov ur det mycket smala, men ack så relevanta ämnet samhällsontologi. Kanske blir det mer på svenska här på bloggen, om jag hinner. Avhandlingen skrivs dock på engelska och inte i det lediga och slarviga formatet som karaktäriserar den här webbplatsen.

Referenser
(1). Zetterberg, Hans L. (1978) ‘Om Opinionsundersökningar’, Statsvetenskaplig Tidskrift 1978:3.
(2). Himmelstrand, Ulf 1985 ‘Opinioner, sakfrågor och förtroende’, Sociologisk Forskning, no. 2-3, 1985