Enkel textanalys av politiska tweets

Ämne: Avancerad Analys

Vi kommer i detta blogginlägg titta på ordfrekvenser i svenska tweets som har att göra med svensk politik och kommande val. Angreppssättet återges i flödesschemat nedan:

Processflöde textanalys
Processflöde textanalys

Verktyg

Vi på BizOne brukar använda Python-språket som grundverktyg för denna typ av analys. Hög interaktivitet ställer krav även på GUI; för oss är det fantastiska ramverket IPython och dess frontend, Notebook det naturliga valet. Vill du veta mer om hur man sätter upp miljön eller produktionssätta ett eget textanalysflöde, kontakta oss på BizOne.
Från det pythonska universumet behöver vi dessutom modulerna twitter (för twittersökningar), re för effektiva reguljära uttryck-sökningar i strängar, collections för ranking av listelement samt pandas för ”tabellisering” och visning av data.

Val av sökord

Efter lite handpåläggning med ett par manuella twittersökningar kan vi konstatera att ”politiska sökord” är ett tidsbundetVolatile frequencies begrepp: vissa ord eller ordkombinationer kan plötsligt bli mycket populära under ett par timmar (efter en TV-debatt t ex) och förpassas till historien redan samma dag. För att dra ett enkelt parallellt exempel ser man i grafen bredvid hur populariteten av ordet ”sommar” ändras över tiden i det svenska twitterflödet (man ser toppar under högsommarvärmen i slutat av juli).

Just därför väljer vi inte sådana ordsensationer utan håller oss till en (åtminstone sedan efter Almedalen-veckan) beprövad kort lista, en skön blandning av aktuella politiska hashtags (som #val2014) och klassiska sökord som alliansen. Observera dock att ju närmare valdagen, desto fler politiska tweets vi kommer att hämta! Naturligtvis får man ändra sökorden efter egen smak och känsla.
keywordlist =[u’#SD’, u’#val2014′, u’svpol’, u’#val14′, u’alliansen’, u’#M’, u’#FP’, u’#S’, u’#MP’, u’#KD’, u’#C’,u’Vänsterpartiet’, u’#Fi’ ]

Inom textanalys talar man om s.k. stop words, dvs sådana ord som på något sätt inte är ”meningsbärande” (t. ex. artiklar, prepositioner och dylikt). Normalt skulle man hämtat en Python-modul NLTK (den har stöd för svenska) och använt stopplistan där; men den är helt enkelt för kort. Vi var tvungna att komponera en egen hårdkodad lista, dels med ord från Jacques Savoy i Schweiz,samt några andra med hög support i svenska textcorpus.

Process, resultat, diskussion

För varje steg i processflödet skapar vi ett stycke pythonkod. Vi hämtar tweets per sökord, behåller enbart de svenska, tar bort duplikat och kombinerar dem till en text. Nu har vi en politisk corpus redo för frekvensanalys; Val av stoppord men innan vi gör det, så rensar vi bort allt som inte är ”menigsbärande ord”. Nu återstår det bara att räkna:

frekventa_ord
Frekventa ord

Alliansen, (S), Löfven och SD nämns en hel del. Inte att undra på egentligen, nu när striden står mellan de två största partierna och SD är på väg mot sitt bästa val någonsin och en vågmästarroll i riksdagen.

Vi kan också titta på användare som får flest retweets och mentions, dessa ska man kanske följa, de påverkar twitteropinionen. Återigen de två toppnamn är de officiella twitterkonton för (M) och (S):

frekventa_users
Frekventa users

Slutligen tar vi en titt på övriga frekventa hashtags i vår politiska corpus #dinröst och #pdebatt var något otippade, medans #svpol är traditionell och #val kunde vi ha gissat oss fram.

frekventa_hashtags
Frekventa hashtags

Genom att modifiera sökordslista kan man utföra liknande textanalyser gällande vilket aktuellt tema som helst. Under internationella sportevenemang kan man undersöka vad som tvittras om landslaget, eller varför inte bygga en bevakningsmotor för det som twittras om ett företag eller dess produkter? Kombinerar man det senare med sentiment analysis, får man bättre underlag för att mäta befintliga reklamkampanjer och planera nya.