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))