Genuskontroll av högskoleläckan, del 2: Ämnen (falsifierade)

Jag söndagsprogrammerade lite och passade på att uppdatera mina skrap-skript. För ett par veckor sedan gjorde jag en liten genusanalys av facebookgrupen Högskoleläckan. Men så hittade jag en liten bugg i mitt skript som gjorde att jag bara fick de 25 första kommentarerna. Nu har jag löst detta och upptäckte då att det finns några riktigt långa trådar som i sig kan vara värda att inspektera.

Jag fick även justera mina siffror lite grann (en procent cirka). Så här ser genusrepresentationen ut baserat på vem som skrivit de 30629 kommentarerna på Högskoleläckan:

Män: 20225 (66%)

Kvinnor: 7306 (24%)

Icke-identifierade: 3098 (10%)

Men under vilka omständigheter skapas denna mansdominans? Finns det några speciella ämnen i diskussionerna? Jag undersökte de tjugo längsta trådarna i hela gruppen. I tabellen indikerar en * att det finns mer än 35% kvinnor i tråden. Min hypotes var att det skulle ha med innehåll att göra. Men den får nog betraktas som falsifierad. Jag ser inget samband.

(för att kunna klicka på länken måste ni vara medlemmar i Högskoleläckan. Men det är bara att göra en förfrågan, gruppen är de facto öppen).

1 Länk  Identitetspolitik/Rasifiering Total: 428 Män: 322 (75.23 %) Kvinnor: 105 (24.53 %) X: 1 (0.23 %)
2 *Länk  Kunskapsfömedling/Pedagogik *Total: 262 *Män: 119 (45.42 %) *Kvinnor: 143 (54.58 %) *X: 0 (0.0 %)
3 Länk  Studieavgifter Total: 171 Män: 158 (92.4 %) Kvinnor: 9 (5.26 %) X: 4 (2.34 %)
4 Länk  Utbildningspolitik Total: 161 Män: 138 (85.71 %) Kvinnor: 17 (10.56 %) X: 6 (3.73 %)
5 Länk  LAS / Utlysningar av tjänster Total: 153 Män: 143 (93.46 %) Kvinnor: 1 (0.65 %) X: 9 (5.88 %)
6 *Länk  Normkritik / Pedagogik *Total: 145 *Män: 79 (54.48 %) *Kvinnor: 56 (38.62 %) *X: 10 (6.9 %)
7 Länk  Studenter / Tentamensrät Total: 133 Män: 90 (67.67 %) Kvinnor: 31 (23.31 %) X: 12 (9.02 %)
8 Länk  Sanningsrelativism / Postmodernism Total: 133 Män: 78 (58.65 %) Kvinnor: 36 (27.07 %) X: 19 (14.29 %)
9 Länk  Tillträde till Campus Total: 128 Män: 71 (55.47 %) Kvinnor: 38 (29.69 %) X: 19 (14.84 %)
10 Länk  Pedagogik / Behöriga lärare Total: 127 Män: 96 (75.59 %) Kvinnor: 23 (18.11 %) X: 8 (6.3 %)
11 Länk  Pedagogik Total: 121 Män: 67 (55.37 %) Kvinnor: 34 (28.1 %) X: 20 (16.53 %)
12 Länk  Utlysningar av tjänster / Högskolepedagogik Total: 120 Män: 63 (52.5 %) Kvinnor: 42 (35.0 %) X: 15 (12.5 %)
13 Länk  Högskolepolitik Total: 104 Män: 84 (80.77 %) Kvinnor: 9 (8.65 %) X: 11 (10.58 %)
14 Länk  Pedagogik / Utbildningspolitik Total: 103 Män: 82 (79.61 %) Kvinnor: 20 (19.42 %) X: 1 (0.97 %)
15 *Länk  Genus *Total: 100 *Män: 54 (54.0 %) *Kvinnor: 41 (41.0 %) *X: 5 (5.0 %)
16 Länk  Högskolepolitik / ”Traditioner” Total: 99 Män: 65 (65.66 %) Kvinnor: 25 (25.25 %) X: 9 (9.09 %)
17 Länk  Genus Total: 96 Män: 64 (66.67 %) Kvinnor: 24 (25.0 %) X: 8 (8.33 %)
18 *Länk  Pedagogik *Total: 95 *Män: 50 (52.63 %) *Kvinnor: 44 (46.32 %) *X: 1 (1.05 %)
19 *Länk  Kårpolitik *Total: 95 *Män: 48 (50.53 %) *Kvinnor: 40 (42.11 %) *X: 7 (7.37 %)
20 Länk  Excellenssatsningar Total: 91 Män: 71 (78.02 %) Kvinnor: 8 (8.79 %) X: 12 (13.19 %)

Efter denna besvikelse harvade jag runt i datamängden, och eventuellt hittade jag något som kanske kan vara intressant. Det verkar nämligen som att könsbalansen blir jämnare för mindre trådar med färre kommentarer. Om man kollar på trådar som får kring 9 kommentarer så blir det genast bättre, men å andra sidan är det så få analysenheter att det blir lite meningslöst att kvantifiera.

995 *Länk *Total: 9 *Män: 5 (55.56 %) *Kvinnor: 4 (44.44 %) *X: 0 (0.0 %)
996 *Länk *Total: 9 *Män: 3 (33.33 %) *Kvinnor: 5 (55.56 %) *X: 1 (11.11 %)
997 *Länk *Total: 9 *Män: 4 (44.44 %) *Kvinnor: 5 (55.56 %) *X: 0 (0.0 %)
998 *Länk *Total: 9 *Män: 5 (55.56 %) *Kvinnor: 4 (44.44 %) *X: 0 (0.0 %)
999 Länk Total: 9 Män: 4 (44.44 %) Kvinnor: 0 (0.0 %) X: 5 (55.56 %)
1000 Länk Total: 9 Män: 7 (77.78 %) Kvinnor: 0 (0.0 %) X: 2 (22.22 %)
1001 *Länk *Total: 9 *Män: 3 (33.33 %) *Kvinnor: 4 (44.44 %) *X: 2 (22.22 %)
1002 Länk Total: 9 Män: 8 (88.89 %) Kvinnor: 1 (11.11 %) X: 0 (0.0 %)
1003 Länk Total: 9 Män: 8 (88.89 %) Kvinnor: 0 (0.0 %) X: 1 (11.11 %)
1004 *Länk *Total: 9 *Män: 3 (33.33 %) *Kvinnor: 6 (66.67 %) *X: 0 (0.0 %)
1005 Länk Total: 9 Män: 9 (100.0 %) Kvinnor: 0 (0.0 %) X: 0 (0.0 %)
1006 *Länk *Total: 9 *Män: 5 (55.56 %) *Kvinnor: 4 (44.44 %) *X: 0 (0.0 %)

Längre än så kom jag inte denna gång. Tar gärna emot förslag på vad man skulle kunna operationalisera till kod för att hitta alternativa förståelser av detta fenomen (om några sådana ens finns i denna datatyp). Eller så ligger frågan någon annan stans, jag vet inte riktigt.

Uppdatering

Jag fick en fråga om det skiljer sig något i längden på kommentarerna mellan män och kvinnor. Jag undersökte det genom att anropa min sqlite3-databas med följande kommando (minnesantekning):

select sum(length(trim(comment))
- length(replace(trim(comment), ' ', '')) + 1) from main where gender='X';

Det gav följande totalresultat (totalt antal ord per kön):

Män: 932342
Kvinnor: 278074
X: 122732

Om vi sedan tar och delar dessa totalsiffror med antalet kommentarer får vi följande genomsnitt av ord/kommentar.

Män: 46.09
Kvinnor: 38.06
X: 39.61

Mäns kommentarer är alltså 21 % längre än kvinnors. Genererar detta kanske en hypotes om ”mansplaining”?

Uppdatering 2

Ett genomsnitt säger ju inte så mycket om fördelningen. Dessutom är genomsnitt känsliga för (i detta fall) att ett fåtal mycket långa kommentarer drar upp siffrorna alldeles för mycket. Så jag gjorde en snabb bar plot i R. Jag är inte så bra på att göra snygga diagram, men rådata kan laddas ned i två csv-filer (män (N=20225), kvinnor (N=7306) för den som vill räkna på ytterligare mått.

Jag laddar in de båda datamängderna som variabler (m = män, w = kvinnor) i R.

summary(m)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.0   13.0    28.0  46.1  58.0  1059.0

summary(w)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00  10.00  23.00 38.06 49.00  1173.00

men

kvinnorboxplot

För att generera dessa figurer använde jag följande lilla R-skript:

mydata = read.csv("kvinnor.csv")
counts <- table(mydata$freq)
barplot(counts, main="Kvinnor", xlab="Antal ord per kommentar")
boxplot(m, w, names=c("Män", "Kvinnor")

Det ser ganska likt varandra ut.

Uppatering 3

Även visuell inspektion kan vara vilseledande. Med lite hjälp lyckades jag göra ett MWU-test i R (jag måste lära mig syntaxet ordentligt någon dag, R har verkligen vissa fördelar gentemot Python när det kommer till statistik).

# Läs in data
men = read.csv("men.csv")
women = read.csv("kvinnor.csv")
# Skapa arrayer
m = men$freq
w = women$freq
#Kör MWU-testet
wilcox.test(m, w, conf.int=TRUE)


Wilcoxon rank sum test with continuity correction
data: m and w
W = 81899000, p-value < 2.2e-16
alternative hypothesis: true location shift is not equal to 0
95 percent confidence interval:
3.999971 4.999997
sample estimates:
difference in location
4.000045

Således, medianvärdet för män (28) är mycket högre än för kvinnor (23)  (Man Witney U test har ett p-värde nära noll (< 2.2e-16)

Uppdatering 4:

Max Berggren har gjort lite mera avancerad statistik som visar att kvinnor oftare gör mycket korta kommentarer, medan män är överrepresenterade på långa kommentarer, och totalt sett kommenterar 11-18 procent längre. Se figurer och Pythonkod här.

Uppdatering 5:

Hur ser då dessa korta kommentarer ut egentligen. Först kvinnor (kommaseparerade, < 8 tecken långa):

Heja!, Tjoho!, Japp., Haha!, Hahaha!, Vilket?, Wow, , :), japp., 😂😂😂, Heja PA, Nej., 😂😂😂😂, Haha 😁, , , 😂, , "varit", 👍, 😡😡😡, , Nä., , BTH, Awful!, Tjoho!, Super, Följer, Sant!, Bra!, Bra!, Ok, , 👍, Suck..., Emelie, Bra!!, Pm., :-(, Bad., Va?! 😨, Följer!, suck, Meh..., , Jaaa!, Hmmm., 2 år., ??, !!, NM, Ja!, Käbbel!, !!!!!!!, Absolut, , Tack!, Wow!, Jaha!, , wtf?, , ;), :D, Right., Haha, , :-), OK, :(, Haha, I wish., ?, Bra., Oj., Exakt!, Nä ;(, , "42" !, :), SCB!, Tack!, Aha!, Amen!, ;), RIP Per, Oj!, Följer., Ja., Ja., Ja!, Oh no., Jäpp!, Lovar!, :-(, #ridå, :), :(((, Vad?, Fint!, he he, Bra!, haha:-), Typ., Nej., Tack!, !!!!!, Tack!, Klokt., Bra!, Wow!, Usch., Mycket!, Bra., Ajajaj., :-), Då så!, :-), OK, :(, Wehej!, Tack, Jepp., Tack!, OK., Uscha!, Amen!, Vågen:), Nice!, Tack!, ojojoj, ja, tack!, Tack!, ;-), :), :), Tack!, Japp,

Samma fast för män:

Ja., för*, O M G, Men ej!, Smart., , Censur?, ?, Och?, , Oj!, , Haha, ;-D, Okej., Nä., ????, , WTF!?, Var?, !!, Nej., Trams, ?, Japp., "Hånar", 👍🏻, Tihi, Nej., Nejdå!, Burn!, , , Aa., , 75..., W T F?!, Oliver, Suck!, NP1, , ^_^, Impact!, Nuts, Klokt!, Awww., , tackar!, ?, Så bra!, s. 271, , Öh, va?, Rector., 😂😂😂, Gamar., Trams., Ja., Nej., Vilka?, Klokt!, Bra!, Yes!, Äsch!, , Hmm?, , , Haha.., , Aouch!, Trams!, , Pyser?, cup?, Bra!, Uurk, Kul!, Nej., N, Bra!, Tack!, , , Va?, Köpt., ?, , Följer, Risk?, Exakt!, Nej., Varför?, ;), tack!, Är det?, ?, Om vad?, :-), Tio år., ?, , Hilfe, , ?, Öh?, Tack:-), Fan :D, , Tack., Bu, Oj!, gonatt, Klokt, ouch!, O.o, Tack, Umeå?, Hahaha!, :-), Haha!, ??? BB, haha:-), Bra!, C.O. ??, Tack!, Tack, Tackar., HumTank, Nä., :(, Trist., 7, NP1, ?, , =(, länk, :(, Nej., Nej., Jepp., Kommer, Visst, oki :-), Yes!!, Bildt?, Toppen!, Tack!, Jösses!, Meta, Anmäl., Anmäl!, :D, Nej., Synd..., Ja., Dalnäs?, UKÄ?, Ah., , Tack,, dialog, Bra!, Precis., Voff!, wow., Omg, =), och -, UK-Ä, Tack, Ajdå., vafan, Hur?, Ja, kommer!, Urk., Great!, :), hehe, 2?, Oj, Tack!, Läs!, Bra!, Aha., Fint!, Njä!, <3, ...en, ???, Nej., Tack!, S. 11, Bra DN!, Suck., Enig., klokt., Ja., :), lol, oui!, Tack!, hehe, ajdå., Great,, Cool!,

Genuskontroll av Högskoleläckan

Ibland skrivs det i tidningen om att det är dålig stämning i en Facebookgrupp som heter Högskoleläckan. Gruppen startades av Ulf Dalnäs i december 2010 och har omkring tiotusen medlemmar. Dess primära inriktning är ”skvaller” från högskolevärlden, men för det mesta är inläggen som postas väldigt seriösa.

Jag blev lite nyfiken på vilka som kommenterade på Högskoleläckan, fast bara i sociologisk mening, givetvis.

Jag skrapade ned de cirka 5200 trådarna på Högskoleläckan innehållandes sammanlagt ungefär 24000 kommentarer. Jag anonymiserade datamängden. Sedan plockade jag fram algoritmen gendercounter som jag har skrivit primärt för Genuskollen, men som funkar utmärkt att importera som en modul för att analysera stora mängder namn genom att köra dem mot SCBs statistik över namn/kön från folkbokföringen.

Jag hittade 24210 namn i kommentarstrådarna. Dessa fördelade sig så här:

Kvinnor: 5837

Män: 15810

Obestämda: 2563

Vilket ger avrundar till procentfördelningen:

Kvinnor: 24%

Män: 65%

Obestämda: 11%

Kategorin ”obestämda” har flera förklaringar. För det första är det vanligt med utländska namn på en sida som har en förhållandevis internationell användarbas. För det andra så är det vanligt att Facebook-användarnamnen är smeknamn, exempelvis ”Peo” istället för ”Per-Olof” och att vissa anger efternamnet som förnamn, typ ”Svensson Sven”. På Facebook anger man förvisso kön i sin användarprofil, men jag ville inte riktigt anropa individer som sådana i denna lilla undersökning. Det är bra ändå med ett elvaprocentigt brus, eftersom det ger mycket bra data att mata tillbaka till gendercounter-algoritmen för att förfina den.

Högskoleläckan är så pass stor att den även uppvisar korrelationer med saker som händer i omvärlden. Till exempel Macchiarini-skandalen får ett bra kronologiskt avtryck, alltså, gruppens interaktioner går att relatera till händelser i ”omvärlden” (klicka för att förstora).

Screen Shot 2016-05-05 at 16.18.41

Resultaten ska tolkas med en nypa salt. De är framtagna med lite eftermiddagsprogrammering. Även om de är replikerbara är en elvaprocentig ”felmarginal” ändå inte helt obetydlig i sammanhanget.

Utkast till en trollalgoritm som söker i Facebookkommentarer

Som hobby och som programmeringsövning kastade jag i förra inlägget ut några hypotetiska metoder för att upptäcka generiska nättroll i stora mängder Facebookkommentarer. Här redovisar jag mina första skisser. (Inlägget innehåller några kodsnuttar som är högst frivillig läsning).

Eftersom jag var ute efter en viss typ av troll, de ”missionerande tangentbordskrigarna”, tänkte jag att deras sätt att ockupera ett territorium genom en serie av mikrotaktiska manövrar skulle lämna ett visst spår som kunde fungera som första indikator.

Så mitt första steg blev att skriva en funktion för att bara plocka fram de användare som kommenterat i minst sju unika Facebookgrupper (en siffra som man givetvis kan justera upp och ned). Jag tänker att det krävs en stor ihärdighet och uthållighet, en viss bestämd ”agenda” och ett specifikt tålamod för att verkligen kommentera i sju olika grupper.

def territoriality():
    '''This function extracts the trolls based on territorial occupation'''
    from collections import defaultdict
    listoftrolls = []
    trolldict = defaultdict(list)
    thedata = conn.execute("SELECT encryptedidfield, thedate, group_name, \
                            message FROM main;")
    for t in thedata:
        user = t[0]
        group = t[2]
        if group not in trolldict[user]:
            trolldict[user].append(group)

    troll_sorted = sorted(zip(trolldict.keys(), trolldict.values()))
    for t in troll_sorted:
        #adjust here the threshold for inclusion. Larger than X.
        if len(t[1]) > 7:
            #print(t[0], t[1])
            listoftrolls.append(t[0])
    return(listoftrolls)

Denna första sortering reducerar datamängden avsevärt. Vad som faller bort är de troll som inte är så aktiva utan bara gör färre insatser, samt de troll som håller sig till bara ett fåtal Facebookgrupper. En avvägning.

I nästa steg tänkte jag att man borde ge sig in på vad trollen skriver, men utan att ange specifika ord eller ämnen. Efter att ha läst igenom en massa trolltext så började jag se ett återkommande mönster: Bruket av CAPSLOCK och överanvändandet av utropstecken och frågetecken: !!! och ???.

Så jag skrev ytterligare en funktion som gör så att endast trolltext som både innehåller capslock och antingen frågetecken eller utropstecken i följd går vidare till mina resultat.

def trollcontent(listoftrolls):
    for l in listoftrolls:
        thecontent = conn.execute("SELECT group_name, message FROM main WHERE \
                    encryptedidfield = (?)", (l, ))
        for t in thecontent:
            capslock = re.findall(r'[A-Z]{3,10}', t[1])
            specialchar = re.findall(r'\!\!\!|\?\?\?', t[1])
            ''' Select here if you want AND/OR '''
            if capslock and specialchar:
                print(l[:4] + " | " + t[0] + " | " +  t[1])
            else:
                continue

När jag körde dessa två funktioner genom en sjuhundratusen Facebookkommentarer som jag samlat in, gick det att vaska fram rejält envisa troll.

Här följer fem kvalitativa smakprover. Varje blockcitat innehåller en och samma användares kommentarer:

  1. Trafiktrollet (affekt: vägvrede, ur gruppen ”Stoppa västlänken NU”). Vanliga i Göteborg och Stockholm där man har haft stora vägprojekt på gång.

BUUUU   GP !!!  Förbaskat BRA att jag sagt upp min prenumeration !!

”.. här kan pendlare västerut byta..”  BINGO !!!  Här står det ju ”indirekt” att det kommer att byggas en stor bytesterminal (med tillhörande köpcenter, lattecafeer etc) i Haga

”.. Nära till sahlgrenska sjukhuset..” ???  KYSS MNIG I ARSLET !!

Invånarantalet i Köpenhamn (tätorten) är 1 250 000  I hela storköpenhamn är det ca 2 000

000 …  Bara för att få lite perspektiv alltså!  DESSUTOM sade köpenhamnarna NEJ till ett förslag om trängselskatt !!  Och när en dansk säger NEJ så är det ett NEJ !!!

Oslo – Gbg – Kbh  600 km på 2 timmar är en MEDELHASTIGHET på 300 km/h  Skall sedan tåget stanna i Gbg och ev. ytterligare någon mellanliggande ort så krävs det ÄNNU HÖGRE hastigheter…  Säg att banan måste byggas för 400 km/h ..!!!!!!!!!!!!   Det finns INTE jag upprepar INTE någon järnväg i HELA EUROPA som idag är byggd för dessa medelhastigheter !!!   Passagerarunderlaget är dessutom ALLDELES för LITET för att denna investering i MÅNG-HUNNDRA-MILJARDERS klassen skall ”rättfärdiga” ett par tre tåg dagligen…  KOMPLETT TOKOT VANSINNE !!!

Du skall CYKLA !!!

2. Det konservativa trollet som ”värnar om landet”. Ur M och Kds Facebookgrupper. Det återkommande argumentet om att folk måste ”vakna” och kravet på utredningar och misstroendevotum.

Moderaterna | Snälla se till att gränsen stängs! VI MÅSTE värna om landets säkerhet!
IAF bättre säkerhetskontroll!!! PRESSA LÖFVEN!

Kristdemokraterna | Den misstänkte terroristen kom hit som asylsökande.
”Vi har kontroll” säger Löfven. Tack för den!
Och tack Kristdemokraterna för att ni låter dem hållas. VAR ÄR ERT MISSTROENDEVETUM??????

Kristdemokraterna | VAKNAAAA!!!!
http://www.expressen.se/kvallsposten/polisen-systemet-har-brakat-ihop/

Kristdemokraterna | Snälla se till att gränsen stängs! VI MÅSTE värna om landets säkerhet!
IAF bättre säkerhetskontroll!!! PRESSA LÖFVEN

3. Det gränslösa copy-pastetrollet. Dessa är vanliga och lite tråkiga eftersom de bombarderar offentligheten med samma budskap. Men för det mesta tar de i så hårt att de till slut blir obegripliga. De självdestruerar sina argument kan man säga.

Liberalerna | SVERIGES REGERING OCH ALLIANSREGERINGEN BÄR ANSVAR! Till terror runt i Europa! Koppling till utläningar i Sverige görs i person efter person! VILKA TJÄNSTEMÄN ÅTALAS-UTREDS?! INGEN! VILKA POLITIKER STÄLLS TILL ANSVAR?! INGA?! Som IKEA-MORDEN!! Alla går fria! Svenskar och europeer kan mördas urskiljningslöst och svenska ansvariga politiker och tjänstemän går helt fria!!! www.gd.se/gastrikland/gavle/is-terroristen-skots-ihjal-av-belgisk-polis-satt-i-styrelsen-for-hoforsforetag

Miljöpartiet | SVERIGES REGERING OCH ALLIANSREGERINGEN BÄR ANSVAR! Till terror runt i Europa! Koppling till utläningar i Sverige görs i person efter person! VILKA TJÄNSTEMÄN ÅTALAS-UTREDS?! INGEN! VILKA POLITIKER STÄLLS TILL ANSVAR?! INGA?! Som IKEA-MORDEN!! Alla går fria! Svenskar och europeer kan mördas urskiljningslöst och svenska ansvariga politiker och tjänstemän går helt fria!!! www.gd.se/gastrikland/gavle/is-terroristen-skots-ihjal-av-belgisk-polis-satt-i-styrelsen-for-hoforsforetag

Dagens Nyheter | DN ÄR EN KOMMUNISTISK TIDNING! Hade man varit som Aftenposten eller Jyllandsposten i våra grannlaänder så hade ju Avpixlat aldrig funnits!!! Hela media-Sverige är ett stort skämt….och något man skrattar åt i våra grannländer! Detta är icke asylpolitik utan masskolonisation av Sverige med främlingar från 3-världen som svenska folket aldrig har givit sitt medgivande till!! Likt en okupationsmakt får vi svenskar slava åt kolonisatörerna där man tömmer våra försäkrinringar och bankkonton och ger till främlingarna!! Bandiiter och rövare styr vårt land! Brött både mot grundlagen och högmålsbrott pågår! Har ickke ord över detta förakt mot Sverige och svenskarna! Hoppas Östermalm både får sexuella överfall, gruppvåltäkter, personrån, judehat, och allt härligt som de själva har tvingar på andra!!!

4. Capslock-cruise-control-for-coolnesstrollet. Ibland räcker det med att se på hur stor spridning (territorialitets-funktionen) ett troll har samt och graden av repetition med versaler och utropstecken. Den mest extrema användaren slår på CAPSLOCK och köttar sedan fram helt urskiljningslöst:

Socialdemokraterna | Lägg tid och pengar på att ta bort ”den bortre gränsen” istället!!!!!!!! FOLK LIDER NÖD SOM ÄR SJUKA OCH UTFÖRSÄKRADE!!!!!!!! YNKLIGT OCH SKAMLIGT!!!!!! DE HAR BETALAT SKATT OCH BEHANDLAS SÅ INHUMANT!!!!!!!!

Socialdemokraterna | NOG MED DETTA ATT VISSA LANDSTING LÅTER VISSA SOM HAR PENGAR FÅ KÖPA HJÄLPMEDEL SOM ÄR BÄTTRE!!!!!!!!! DISKRIMINERING ÄR VAD DET ÄR!!!!!!!!!!!!!!!!!!!

Socialdemokraterna | Rätt så!!!!!! Vi ska ALDRIG GLÖMMA!!!!!!! Inte heller nacismens Tyskland!!!!!!!! Inte heller 9/11 i USA!!!!!!! Inte Charlie Hebdo, eller något terrordåd!!!!!!!!! Hedersmord är för mig terrordåd, DÅ INGEN HAR RÄTT ATT AVGÖRA OM EN ANNAN MÄNNISKA SKA LEVA ELLER DÖ!!!!!!!!!!

Socialdemokraterna | Nu är det dags att göra något åt välfärden!!! Folk lider!!! Familjer med barn där föräldrar råkat bli sjuka får inga bidrag!!!!!! NU ÄR DET DAGS ATT SE TILL ATT VI FÅR HJÄLP NÄR VI BETALAR SKATT!!!!! INGET ÄR FÖRÄNDRAT TILL DET BÄTTRE I VÄLFÄRDEN ÄNNU!!!!!

Socialdemokraterna | Gränsen är nådd!!!! Sverige kommer inte att vara värt namnet Sverige om Alliansen vinner i höst!!!!! Titta på alla sjuka, funktionshindrade, gamla, barnens situation. Det finns inte pengar till bra mat ens till de gamla, eller till barnen i privata företag som tjänar pengar på det!!!! SKAMLIGT!!!!!!

Miljöpartiet | Ha ha ha, nä inte med deras metoder att flytta produktionen utomlands och låta andra ta skulden, så Sverige ska få fina siffror vad gäller miljön!!!!! Usch!!!!!! TACK MILJÖPARTIET FÖR ATT NI LYFTER FRAM SANNINGEN!!!!!! VI BEHÖVER DEN NU FÖR KOMMANDE GENERATIONER SKA HA EN REN VÄRLD ATT LEVA I!!!!!!!!

Vänsterpartiet | Inte Nato!!!!!!! Att  vara neutral är att vara klok inte feg!!!!!!! Trött på personer som tänker med reptilhjärnan utan mänsklig empati och normal intelligens!!!!!!!! DET DRABBAR FAMILJER!!!!!!! Barn och barnbarn!!!!!!!!!! Fega är de som vill ha ut ANDRA I KRIG!!!!!!!!!! KRIGA SJÄLV!!!!!!!!!!!! MASSOR AV  CHANSER ATT KRIGA FÖR  FN!!!!!!!!!!!!

Vänsterpartiet | Just det!!!!!!! SANDLÅDA!!!!!!! DAGS FÖR SOSSARNA ATT FÖRSTÅ ALLVARET!!!!!!!!!! ATT BÖRJA SAMARBETA FÖR BARNENS SKULL!!!!!!!!!!! DE LIDER I ALLIANSENS SPÅR!!!!!!!!!!!

Vänsterpartiet | Hoppas någon sätter dit dem för vad de gjort mot mänskligheten!!!!!!!! Enligt mänskliga rättigheter har de gjort fel!!!!!!!! Sverige har antagit FN:srättigheter!!!!!!!!! SKAMLIGT VAD ALLIANSEN GJORT!!!!!!

5. Tandtrollet. När det kommer till sjukdomar så finns det risk för att man hakar upp sig. Ofta vill man utkräva ”svar” från olika aktörer på varför ingen lyssnar på dem.

Moderaterna | Hur kunde ni tillåta att Hanna Stjärne VD på public service fick tillsätta Jan Helin som chef på SVT???????? Vi är chockade. Kommer från en vänstertidning som dessutom haft antisemitiska artiklar massor med gånger. HUR kunde ni gå med på detta???? Det är dödsstöten för det fria ordet inom public service.

Moderaterna | VAD tänker Nya Moderaterna göra för att tandvård skall kosta detsamma som sjukvård????????????NU kräver vi svar.  VI SOM ANSER TÄNDER TILLHÖR KROPPEN.

Moderaterna | BRYR du dig Carl????

Moderaterna | Och Joakim Winsgård………………….Stig ur bilen – få lite frisk luft och svara någon inom partiet OM NI ANSER TÄNDER TILLHÖR KROPPEN. Och så du chauffören Kent. SVARA!!!!!!!!!!!!!!!!!!!

Liberalerna | För en gångs skull hoppas jag ni nu svarar. TBC har ju fördubblats på ett mycket skrämmande sätt. Detta på grund av den ökade invandringen. Är nu bevisat det beror på denna faktor. Varför är alla partier så tysta då det gäller det? Människor försätts ju fara. Betänk att TBC varit så gott som utrotat fram till nyligen i Sverige. Vad tänker ni vidta för åtgärder??? /Jag är en av de som röstade på ert parti/

Kristdemokraterna | Nu måste ni även inom ert parti berätta vad ni kommer vidta för åtgärder då det gäller TBC som mångdubblats i Sverige och är bevisat det har sin orsak  i den ökade invandringen. Det är som inget parti vill låtsas om problemet. Vad tänker ert parti vidta för åtgärder???

Detta var bara en första skiss. Någon som har andra tänkbara indikatorer på troll som man skulle kunna bygga in i algoritmen för att göra den mera precis?

Imitativ strålning i en halv miljon facebookkommentarer

Jag har länge funderat på olika metoder för att studera fenomenet imitativ strålning, det vill säga de repetioner/imiationer som utgör det sociala livets väv, som genomkorsar oss, och som vi använder oss av för att gå vidare i världen.

I Social Laws (1879) definierade Gabriel de Tarde ”imitativ strålning” som:

This, let me say again, is what I mean by a ray of imitation, or imitative ray ; and the sum total of rays of this kind derived from any single inventor, originator, or innovator, whose pattern is reproduced, is what I call an imitative radiation. Our social life includes a thick network of radiations of this sort, with countless mutual interferences. (p. 101)

Begreppet strålning ska här förstås i sin vetenskapshistoriska kontext. Det var vid denna tidpunkt som Röntgen, Becquerel och Curie upptäckte den radioaktiva strålningen, även om osynliga former av strålning (infrarött, ultraviolett ljus etc.) hade upptäckts hundra år tidigare.

Men en sociologisk stråle skiljer sig från en fysikalisk. En imitativ stråle hänvisar i någon mening tillbaka till en innovation eller en uppfinning. Men eftersom dessa ”original” ofta är omöjliga att spåra upp när det kommer till vardagliga beteenden och handlingar, så är det egentligen sällan innovationerna som man vill studera, utan repetitionerna.

Imitativ strålning kan studeras i alla möjliga typer av material. Men när det kommer till fenomenen såsom opinionen eller offentligheten så vill man ju gärna komma åt ”den vanliga människans” tankar och handlingar. Problemet är att det är svårt att närgranska vad människor tycker och tänker eftersom det med konventionella metoder (enkäter, intervjuer) blir dyrt och krångligt, och dessutom måste man ju skapa frågor som respondenterna svarar på, vilket gör att man inte kommer åt det spontana och vardagliga. Vissa humanister och samhällsvetare tar då till ett ”knep” och läser istället vad som står i tidningen, sedan antar de att vanliga människor är ”produkter” av den ”diskurs” som tidningen sprider. En omväg och en irrväg.

Istället tänker jag att allt det som sägs och görs i sociala medier borde kunna användas som ofiltrerat råmaterial för att snappa upp fragment av den imitativa strålningen. Här finns enorma mängder material, tillgängligt mer eller mindre gratis (fast på Silicon Valleyföretagens villkor), som nästan bara används för marknadsföring och omvärldsbevakning.

Med utgångspunkt i Imitationens lagar har jag tidigare hävdat att Facebooks databas i framtiden skulle vara ett av de viktigaste arkeologiska fynden för den som ville studera det sociala livet i retrospekt, kanske som en slags mikrohistoria.

Men Facebooks databas är gigantisk även om man bara närmar sig en delmängd av den. Men någonstans måste man ju börja, så jag skrev ett Pythonskript som skrapar kommentarer som postas på hundra stora Facebooksidor (och genast anonymiserar dem), som i någon mening har en koppling till den politiska offentligheten på ett eller annat sätt. Här ryms politiska partier, nyhetsmedier, föreningar, religösa samfund, kampanjer och en del ljusskygga medborgargarden och gatuaktivister från höger till vänster. Min plan är att utvidga listan på grupper så att jag täcker in mer och mer.

Men bara dessa hundra grupper gav efter några timmars tuggande upphov till en halv miljon poster i min databas (jag delar gärna med mig av den, men jag tror att det skulle bryta mot Facebooks regler om jag lade ut den för allmän nedladdning, kontakta mig).

En halv miljon Facebookkommentarer är bara en droppe i datafloden. Men på samma sätt som man kan detektera även små mängder strålning av vissa isotoper, kan man med små mängder naturligt språk detektera de imitativa strålarnas repetitioner genom det sociala livets bakgrundsstrålning.

För att göra databasen sökbar skrev jag ett annat skript och frontend som genererar ett smidigt webbgränssnitt som kan göra avancerade sökningar medelst reguljära uttryck*. Så här:

search

För att testa hur väl det funkar började jag med ett samtidsfenomen som är tillräckligt litet och begränsat för att man ska kunna kalibrera träffsäkerheten mot andra källor. Jag sökte därför på ”Soldiers of Odin”, och alla tänkbara varianter av hur man kan skriva ut detta, med följande reguljära uttryck: SOO\s|Soo\s|SoO|\ssoo\s|[S|s]oldiers of|S\.O\.O.*.

Tidsmässigt verkar det som att det talas om Soldiers of Odin med största intensitet bara de senaste månaden:

soo

De första träffarna är från januari i år och sker på en sida av offentligheten som verkar gilla SoO.

medborgar

När jag söker i Mediearkivet (lite snabbt) så är det först en månad senare, i slutet av februari, som ETC rapporterar att SoO är på väg till Sverige. Det spelar ingen roll egentligen, det intressanta är ju hur en finsk ”innovation” smittar till Sverige, inte bara via de stora massmediekanalerna, utan underifrån. Vill man studera hur dessa aktivistgrupper formeras och sprids från land till land gör man nog bäst i att övervaka dessa grupper (tillsammans med Flashback) snarare än vad som skrivs i tidningarna.

När sedan SoO börjar patrullera gatorna i Sverige sker en explosion framförallt i vad vi kan kalla för löst sammanhållna antifascistiska Facebookgrupper.

anon

Men vid det här laget har ju SoO redan blivit rikskändisar genom att ha patrullerat bland annat i Göteborg.

\\

Man kan även observera återmedieringar i den andra riktningen. Ta begreppet ”selfie” som introducerades med pedagogiska förklaringar i pressen i början av 2013. En skärmdump från Mediearkivet:

selfie

Den imitativa strålen träffar sedan urskiljningslöst genom offentligheten:

selfiesok

Ett annat uttryck som kan vara intressant är ”svetsarn” (Stefan Löfven). Uttrycket existerade innan han blivit statsminister, men väldigt sparsamt i svensk press ändå:

svetsarn

Till en början kan man då tänka att detta är ett nedsättande högeruttryck som används av Löfvens politiska fiender (det är här alla ”diskursanalyser” av massmedier stannar). Men tittar vi i hur uttrycket används blir det mera komplext.

svetsarn2

Uttrycket ”svetsarn” tycks förekomma både i gillande och ogillande sammanhang.

Imitativa strålar får inte sin mening genom att en högre ordning tillskriver dem betydelse. Istället får de sin innebörd genom att repeteras och imiteras. Vad som ena dagen är ett skällsord och andra dagen ett smeknamn är alltid en empirisk fråga.

* Obs. i Linux behöver du bara installera regexp-modulen till sqlite3, medan i Mac OS måste du kompilera om sqlite3 från källkod.

Kvantitativ mansplaining: Sd vs. Fi Facebooksidor

Detta är bara ett litet test. Men jag gjorde ju en mätning av hur många män/kvinnor som kommenterade på olika partiers Facebooksidor för någon vecka sedan.

Här kommer två ytterst ovetenskapliga ordmoln, den första baserad på 6759 kommentarer gjorda av män på Sverigedemokraternas FB-sida och den andra baserad på 3332 kommentarer gjorda av män på Feministiskt initiativs FB-sida.

sdfi

Preliminärt resultat: På Sverigedemokraternas sida är svordomar mera vanligt förekommande (”fan”, ”jävla”, ”helvete”). På Feministiskt initiativs sida pratas det mer om ”kvinnor” och ”män”. Båda sidor pratar om sitt eget parti och båda pratar om ”Sverige”.

Säg till om ni vill ha källkod.

 

Partiernas kön

I november förra året undersökte SCB i sin partisympatiundersökning hur fördelningen mellan män och kvinnor såg ut bland de som kunde tänka sig att rösta på ett visst parti i nästa val. Resultatet blev följande:

scb

Vad som kanske överraskade lite var den stora övervikten av män bland Sverigedemokraterna. Den var så stor att den fick alla andra partier att bli (svagt) kvinnodominerade. Sådan blir ju effekten av att ha riksdagsvalet som modell för vad som ”gör” ett parti. Allt kommer i slutändan bli 100 procent.

Finns det ett annat sätt att belysa kön på? En opinionsundersökning i linje med SCBs undersökning siktar ju bara på valresultatet som ett slag facit och ger ett extensivt mått. Men hur ser det ut när det politiska diskuteras? Ett sätt att studera det offentliga samtalet är att se vad som sägs på Facebook. På så sätt får man en mera processuell och rörelsebaserad indikation på hur det politiska byggs från handling till handling i offentligheterna. Vilka är det som dominerar i detta samtal?

För att undersöka detta laddade jag ned ett stort antal poster på de olika partiernas Facebooksidor (från 400 till 1000 poster, exklusive Kd som inte har något officiell sida) och gick igenom de ca. 100 000 namn som förekommer i kommentarstrådarna. Facebook håller förvisso ganska bra koll på vilket kön varje användare har, men denna information är inte öppet tillgänglig för övervakning via Graph-APIet som man använder för att skrapa data.

Så då fick jag lösa det med ett litet hack.

Jag körde alla hundratusen namn genom mitt lilla program gendercounter (som även utgör motorn i Genuskollen.se) och räknade hur ofta manliga och kvinnliga namn förekom (i absoluta tal, dvs. samma unika namn kan förekomma flera gånger). Resultatet blev så här:

resultat

När det kommer till kommentarer på Facebook är männen ständigt överrepresenterade, med undantag för Feministiskt initiativ som är det enda parti som har fler kommenterande kvinnor än män. Den generella trenden är att högerut är det fler män och vänsterut fler kvinnor. Men Sd sticker i denna undersökning inte ut mer än något annat högerparti. Istället är det Moderaterna som har flest män som kommenterar på sin Facebooksida.

Så här ser datamängden ut i tabellform för frekvens av namn (procenttalen avrundade, därför kan det bli 101% när man summerar):

Parti Kvinnor Män Obestämd N
Kommentarstrådar
Fi 55 32 13 10345 853
V 38 48 14 19429 998
S 37 48 15 20174 1004
Mp 34 53 13 15101 965
C 24 66 10 7512 732
L 27 65 9 10404 725
M 22 70 8 22354 1002
Sd 25 64 11 10529 427

Nu finns det flera metodproblem som jag ännu inte har löst, så dessa resultat ska läsas med försiktighet. Det som sorteras som ”obestämt” är  namn som inte förekommer i listorna som matchar namn. Det kan exempelvis röra sig om olika ”smeknamn”, men det kan även om genusneutrala namn. Jag jobbar kontinuerligt med att öka denna träffsäkerhet, men först måste man utsätta sig för riktig data innan man hittar anomalierna.

Trenden är ändå ganska tydlig. Kanske kastar denna typ av undersökningar nytt ljus på de politiska samtalens förutsättningar. Det verkar i så fall som att nästan alla Facebooktrådar är sorgligt mansdominerade.

\\

Metod / Kod

Först skrapade jag varje partis Facebooksida med följande skript. Fyll i sidornas ID-nummer och din access_token:

from facepy import GraphAPI
from django.core.serializers.json import DjangoJSONEncoder
import json

group_id =""
access_token = ""

graph = GraphAPI(access_token)
pages = graph.get(group_id + "/feed", page=True, retry=3, limit=1) #This is the number of posts per file!! original value 1
i = 0
for p in pages:
    print('Downloading page', i)
    with open('Partinamn/%scontent%i.json' % (group_id, i), 'w') as outfile:
        json.dump(p, outfile, indent = 4, cls=DjangoJSONEncoder, ensure_ascii=False)
    i += 1

Jag stoppade skriptet när det översteg 1000 poster för att inte översköljas av data.

Därefter körde jag följande skript för att räkna namn. Observera att jag importerar gendercounter som en modul, vilket gör att man först måste avkommentera några rader som sköter filöppning etc (se kodkommentarerna) samt lägga både gendercounter och dess namnlistor i samma katalog.

#-*- coding: utf8 -*-
import json
from json import load
from os import listdir
import gendercounter

counter = 0
kvinnocounter = 0
maencounter = 0
undetermined = 0
commentfield = 0

recordlist = []

directory = "Partinamn/"


#### Multi file parser from directory
for filename in listdir(directory):
    with open(directory + filename) as currentFile:
        jsondata = load(currentFile)

    for item in jsondata['data']:
        #print(item['status_type']) #For debugging
        if item:
            try:
                if item['comments']['data']:
                    commentfield += 1
                    print("Begin new post.")
                    for i in item['comments']['data']:
                        print("-" * 20)
                        namefield = i['from']['name']
                        splitted = namefield.split()
                        firstname = splitted[0]
                        print(firstname)
                        resultat = gendercounter.textinput(firstname)

                        if resultat[0][0]:
                            print("Kvinnonamn " + str(resultat[0][0]))
                            kvinnocounter += 1
                        elif resultat[1][0]:
                            print("Mansnamn " + str(resultat[1][0]))
                            maencounter += 1
                        else:
                            print("Couldn't determine gender")
                            undetermined += 1

            except KeyError:
                print("there was a key error")
            print("\n")


print("Results for the dicretory: " + directory)
print("There number of comment threads: " + str(commentfield))

summa = kvinnocounter + maencounter + undetermined
print("Summa namn: " + str(summa))

print("Kvinnocounter: " + str(kvinnocounter))
print("Maencounter: " + str(maencounter))
print("Undetermined: " + str(undetermined))

print("Kvinnor, " + str(kvinnocounter / summa))
print("Män, " + str(maencounter / summa))
print("Icke-bestämda, " + str(undetermined / summa))

 

Uppdateringar Genuskollen

I helgen fortsatte jag att medborgarprogrammeragenuskollen.se (och dess algoritm gendercounter.py). Jag gjorde några uppdateringar som jag tror ökar funktionaliteten. Här kommer några tekniska minnesanteckningar.

  1. Jag lade till en funktion för att detektera personliga pronomen hen/hon/han med varianter. Här finns det vissa felkällor, till exempel är ju ”Hans” både ett personligt pronomen och ett namn. Jag skrev tre funktioner för strängmatchning via reguljära uttryck som ser ut så här:
    def raknahen():
        hen = 0
        henom = 0
        hens = 0
        for t3 in text:
            henregexp = re.findall(r'\bhen\b', t3, flags = re.IGNORECASE)
            henomregexp = re.findall(r'\bhenom\b', t3, flags = re.IGNORECASE)
            hensregexp = re.findall(r'\bhens\b', t3, flags = re.IGNORECASE)
            if henregexp:
                hen += 1
            elif henomregexp:
                henom += 1
            elif hensregexp:
                hens += 1
            else:
                continue
        return(hen, henom, hens)

    Jag är inte helt säker på hur etablerade ”henom” och ”hens” är. De är ännu väldigt ovanligt förekommande. Kommentera gärna!

  2. Jag lade till funktionalitet för att ladda upp filer i formaten txt, pdf och docx, och säkrade upp filnamnen med werkzeug secure_filename. Det svåra i detta avsende är egenligen pdf. Det är ett omöjligt filformat på flera sätt och det tar väldigt stora systemresurser i anspråk att extrahera ut hyfsat ren text. Jag landade i pdfminer3k som är enkelt att använda på bekostnad av ganska långsam prestanda. Som tur är kommer nog inte genuskollen att behöva hantera många samtida användare så jag klarar mig nog med den nuvarande klena hårdvaran.
  3. Jag lade till en funktion som sparar själva resultatet av genomsökningen så att man enkelt kan länka till den. Här är ett exempel. Det uppenbara vore att strössla en sådan delningsfunktion med knappar till facebook, twitter, pinterest etc för att underlätta delningen. Men å andra sidan utsätter man då användaren för spionskript som ”ringer hem” till Silicon Valley. Det är inte helt entydigt vilken lösning som är den bästa här. Vad tycker ni?

Nästa steg i detta lilla hobbyprojekt blir nog att öka exaktheten i själva namnsökningen. Den konventionella strängmatchningen är inte tillräckligt exakt. Det finns ju namn som inte är namn, exempelvis ”Mina”, ”Hans”, ”De”, ”Dina” osv. Här har jag nu börjat snegla på olika lösningar för Named Entity Recognition, en funktion som finns bland annat i Korps annoteringslabb. På så sätt skulle man kunna förprocessera texten så att man får fram namn på en syntaktisk nivå innan man sedan matcharn namn/kön. Det finns gränssnitt för att integrera Standford NER med Python (och andra språk). Detta kräver dock lite inläsningsarbete. En annan helg!

 

 

 

Genuskollen

Häromdagen upptäckte jag att man kan köra Pythonskript på en webserver. På så sätt slipper användaren interagera med terminalgränssnittet. Eftersom beräkningarna körs på en fjärrserver behöver man inte ens ha Python installerat. Allt detta är ju självklarheter, men det kan ibland innebära en hel del handpåläggning innnan man får det att fungera.

Som jag tidigare bloggade om har jag börjat laborera med ett skript som jag kallar för Gendercounter. Det är detta skript som är motorn för själva beräknandet under huven på webtjänsten. Men nu kan man alltså enkelt räkna kvinnliga och manliga namn i vilken text som helst.

Resultat: Genuskollen (beta)

Men, det finns flera metodproblem som måste lösas innan detta blir någorlunda exakt. Därför tar jag gärna emot buggrapporter och observationer om felkällor så att jag kan förbättra tjänsten och skriptet framöver.

För den som vill köra detta på stora textmängder och vill göra mera avancerade saker är det bara att ladda ned källkoden.

Mäta gubbslem i texter – ett program

Citeringens praktiker är performativa, något som  Sara Ahmed reflekterar över inför sin kommande bok. Hon har valt att inte citera en enda vit man. Men hur ser det ut i vilken text som helst?

För det mesta reflekterar vi inte över vilka vi citerar eller omnämner när vi skriver. Ofta går det av bara farten och helt plötsligt sitter vi med en riktigt gubslemmig text. Med ”citering” kan man förstå även intervjupersoner och vilka vi skriver om i texterna. På så sätt kan man även inkludera journalistiska texter i analysen.

Jag skrev ett litet skript som räknar förekomsten av manliga och kvinnliga namn i en text. Programmet heter Gendercounter (ursäkta min dåliga fantasi). Programmet kollar varje ord i en text och matchar det sedan mot två listor, en med manliga namn och en med kvinnliga. Det finns förvisso ett flertal metodologiska problem med detta angrepssätt (namn är inte en hundraprocentig enkönade). Men man kan ändå använda detta som en första indikator.

Här kommer några tester jag gjorde. (uppdaterade efter att jag hittat några buggar)

Jag började med den Statliga offentliga utredningen Om Sverige i framtiden – en antologi om digitaliseringens möjligheter (ren textversion länkad). Resultat: 281 Kvinnor, 597 Män.

Sedan en lite äldre text, Den sociala och kulturella utvecklingen från Oskar I:s tid till våra dagar samt De politiska förhållandena under Karl XV:s, Oscar II:s och Gustaf V:s regering 1859-1923 Resultat: 418 Kvinnor, 1447 Män.

Till sist, Teknisk tidskrift årgång 1962 (1368 sid.) Resultat: 537 Kvinnor, 2472 Män.

Skriptet är än så länge bara ett test. Men det borde finnas intressanta saker man kan göra med denna form av kvantitativa innehållsanalys, givet att man har i bakhuvudet de metodologiska fallgroparna.

Testa gärna skriptet själva, instruktioner finns på Github-sidan. Fråga gärna i kommentarerna om något är oklart.

Förslag och kommentarer mottages gärna!

Hur programmera mot Swepubs csv-filer?

Swepub har lanserat en bibliometrisida som låter användare specificera en sökning och sedan ladda ned resultaten i ett flertal öppna format (csv, tsv, xml, json). Detta är väldigt positiva nyheter för oss forskare som vill göra scientometriska analyser, och äntligen ett bibliometriskt index som inte är kontrollerat av stora företag!

Men jag funderar nu på hur jag på ett smart sätt ska kunna programmera mot den data man får ut ur Swepubsystemet. Det är nämligen så att varje artikel förekommer flera gånger. Om man till exempel sparar ned en csv-fil ser det ut så här om man öppnar den i exempelvis LibreOffice (eller Excel):

Screenshot from 2016-01-16 14:34:32

Varje artikel har ett unikt Swepubnummer, vilket gör det enkelt att isolera artikelnivån. Men sedan är varje författare angiven i en ny rad, istället för att vara inkluderade men separerade inom ett och samma värden, vilket är fallet med data från Web of Science och Scopus. Detta är lite ”jobbigt”. Men givetvis går det att ordna. Jag letar nu efter den enklaste och mest eleganta lösningen och behöver lite input.

En av de mest intressanta analyserna är samförfattarskap. Att se vilka som skriver artiklar tillsammans kan vara ett väldigt kraftfullt mått på interdisciplinaritet, internationalisering, forskningspraktiker osv. Men då måste man för varje artikel få en lista på författare (och gärna så mycket meta-data om dessa författare som möjligt, ex. institutionstillhörighet).

Csv-filen är superenkel att läsa in till Python:

import csv

thefile = open('query_result.csv', 'r')
csv = csv.reader(thefile, delimiter=',')
next(csv) #remove headers

for c in csv:
    print(c[24]) #put here what values you want, see list below.

Därefter är det bara att välja vilken meta-data man önskar. Jag begriper inte allt, men här är ett första index (om ni vet mer kommentera gärna):

 """
[0] = Swepub ID-nummer
[1] = Organisation/Lärosäte (ex. "gu")
[2] = Publikationsår
[3] = Status (ex. "PUBLISHED")
[4] = Publikationstyp
[5] = Innehållstyp
[6] = Publikationstyp (igen)
[7] = Open Access-status (ex. "gold", "green")
[8] = "_hsv1" ?
[9] = "_hsv3" ?
[10] = "_hsv5"?
[11] = Titel
[12] = Antal författare
[13] = "_numLocalCreator", ?
[14] = Författar (namn)
[15] = Användarnamn i systemet (ex. xjsode)
[16] = ORCID (se http://orcid.org)
[17] = Affiliering (ex. "gu.se")
[18] = Källa (ex. "Journal of Python Snakes")
[19] = ISSN
[20] = Förlag
[21] = URL
[22] = Fulltext (länk till URL)
[23] = ISI-nummer (Web of Science)
[24] = DOI
[25] = Scopus-nummer
[26] = Pubmed-nummer
[27] = ISBN
[28] = "_projekt", ?
[29] = "_program", ?
[30] = "_contract", ?
[31] = "_dubblettID" ?
"""

Eftersom Swepub ID är unikt, är det ju enkelt att isolera artiklar var för sig. Men jag skulle vilja skriva en funktion som gjorde ungefär så här:

För varje unikt Swepub-ID, gå igenom alla författare och bygg om [14] till en lista (eller kanske en lista av dictionaries/hashtabeller) som inkluderar författarnamn + ORCID + Affiliering.

På så sätt kan man sedan enkelt ta varje artikel och genast skapa ett co-authornätverk. Här finns massor av intressanta analyser att göra. Hur mycket tvärvetenskap finns på svenska universitet? Hur internationella är forskare egentligen? Vilka institutioner samarbetar ofta?

Men allt hänger på att man hittar en smidig lösning på att varje artikel förekommer flera gånger och att metadata kan sammafogas på ett smart sätt.

Någon som har en intressant och elegant strategi för att bygga om datamängden så här? Kanske är det enklare med json?

Länk till datamängden jag jobbar mot (1.7 Mb, zip)

Uppdatering: Mattias Östmar har löst problemet så här. (se även kommentarerna nedan).