Riigikogu stenogrammid osa 0. Andmete kogumine ja vahendid analüüsimiseks
Andmete kogumine ja töötlemine
Käesoleva postitus on GitHubis asuva Riigikogu stenogrammide analüüsi tehnilise poole selgitus. Analüüsi eesmärk on illustreerida, millist kasulikku infot saab välja lugeda tekstide mudeldatud teemadest. Järgnevalt selgitan samm-sammult, kuidas toimus andmete kogumine, ettevalmistamine ja analüüsimine.
Stenogrammid
Analüüsiks kasutan põhiliselt Riigikogu stenogramme. See on kõige täpsem allikas parlamendis käsitletud teemade analüüsiks. Andmete kogumiseks on Riigikogul väga hea API. API kaudu sain kätte viited stenogrammidele, milledest omakorda kraapisin välja räägitud teksti. Kraapimiseks kasutasin pythoni teeki beautifulsoup4
.
Stenogrammide andmete kraapimine on koodina siin. Esimesed steogrammid on aastast 2010, viimased 2022. aasta 9. juunist. Kokku kogusin 1493 stenogrammist 213 689 rida, millest 209 949 sisaldas teksti teksti (iga rida on rääkija järjest räägitud lõik stenogrammis). Ülejäänud lõigud olid stenogrammide osad, mis ei sisaldanud rääkija teksti. Väike osa neist võib olla seotud vigadega andmete kraapimisel.
Pärast stenogrammide kraapimist viisin andmed pandas.DataFrame
kujule. See on kirjeldatud koodina siin. Samuti puhastasin andmeid veidi: asendasin vigaseid tähemärke (kirjeldatud koodina siin), et analüüsi tulemused oleksid selgemad.
Kuna stenogrammide teksti kraapisin HTMList, siis võib seal olla väikeseid vigu ja ebakõlasid. Mitmekordse visuaalse kontrolli tulemusena puuduvaid või valesid andmeid ma ei leidnud (leitud vead parandasin jooksvalt). Suure tõenäosusega üksikud märkamata jäänud vead analüüsi tulemusi olulisel määral ei mõjuta.
Täiendus 05.11.2023
Andmete kogumisel kraapisin hiljutisi andmeid. Nüüd on stenogrammid olemas kuni 28.09.2023. Üks oluline muutus, mida stenogrammide analüüsimisel tegin, oli pikemate kõnevoorude tükeldamine. Kõnevooru maksimaalseks pikkuseks jäi 80 sõna. Tükeldamise eesmärk on tuvastada pikematest tekstidest mitmeid teemasid, mis annab detailsemat infot analüüsiks.
Fraktsioonid
Fraktsioonide liikmete info kogumine oli veidi keerulisem protsess. Praeguse koosseisu fraktsioonide liikmed sain kätte Riigikogu APIst. Eelmiste fraktsioonide info tuli kodulehelt kraapida. See oli vaevarikas protsess, kuna alati polnud eri aastate fraktsioonide liikmete loetelu ühesuguses HTML-vormingus. Samuti võis mõni liige koosseisu ajal vahetada fraktsiooni, mistõttu tuli ka see info täpselt välja kraapida.
Fraktsioonide liikmete infos võib olla rohkem vigu kui stenogrammides. Mul puudub teadmine, kui täpsed on nimekirjad Riigikogu kodulehel, kuid eeldan, et seal toodu on fraktsioonide teemade analüüsimiseks piisavalt täpne.
Täiendus
Fraktsioonide liikmed sidusin algsete stenogrammidega kasutades ära Riigikogu koosseisu ametisoleku aega (või kui liige vahetas koosseisu ajal fraktsiooni, siis kasutasin seda infot). Koosseisude ajad korjasin Wikipeediast. Fraktsioonide info võimaldab teha järeldusi Riigikogu erakondade käsitlevate teemade lõikes.
Täiendus 05.11.2023
Lisatud on ka 2023. aasta valimiste tulemusel tekkinud fraktsioonide info ning parandatud käsitsi mitmete fraktsioonide eelnevaid koosseise (info asub siin: https://github.com/RRisto/riigikogu_stenos/blob/master/data/interim/factions2022_manual.xlsx).
Teemade mudeldamine
Pärast andmete kogumist järgnes teemade mudeldamine. Kasutasin selleks Feelingstreami arendatud ja pakutavat kliendivestluste analüüsi lahendust. Tegemist on kommertstootega, mistõttu täpne algoritmi kirjeldus ja andmete töötlemise protsess pole avalikud.
Üldjoontes kujutab teemade mudeldamine endast dokumentide hulga (käesolevas analüüsi stenogrammi tekstide) erinevaid osasid iseloomustavate teemade leidmist. Erinevatel teemadel rääkides kasutame sõnu veidi erineva sagedusega sõnu, teemade mudeldamine üritab selle järgi korpuses olevaid tekste teemadesse jaotada.
Teemast arusaamiseks annab üldjuhul teemade mudel välja sõnade loendi, mis konkreetset teemat teistest kõige rohkem eristab. Inimesed ülesanne on sõnadest moodustada arusaadav teema või anda hinnang, kas nendest sõnadest on võimalik sisuliselt aru saada. Teemade nimetamiseks kasutan mudeli välja pakutud kolme iga teemat kõige paremini iseloomustavat sõna.
Teemade mudeliga sain kogu kõikide stenogrammide 209 949 rea kohta 1152 teemat. Nendest selgema ülevaate saamiseks klasterdasin need 20 gruppi. Klasterdamise aluseks on teemade vektorid, mis iseloomustavad teemasid semantilises ruumis (näiteks sarnased teemad paiknevad selles ruumis üksteisele lähemal).
Kes soovib ise teemade mudeldamist teha, soovitan kasutada LDA-d (Latent Dirichlet allocation) või GDSMM-i (Gibbs sampling algorithm for a Dirichlet Mixture Model). Internetist leiab näiteid nende kasutamise kohta. Kindlasti tuleks eelnevalt tekstidest eemaldada tühisõnad ning sõnad lemmatiseerida.
Sisuliste teemade leidmine
Kõik 1152 teemat ei ole sisulised. Paljud on seotud näiteks konkreetsete inimeste kutsumisega kõnepulti ning protseduuriliste küsimuste/ettepanekutega (näiteks palutakse liikmetel hääletada). Nende eemaldamiseks vaatasin kiirelt teemad ja nende klastrid üle. Oma parima teadmise juures eraldasin mitteinformatiivsed teemad/teemade klastrid ning eraldasin analüüsist. Kui analüüsi käigus tuli veel mõni üksik mitteinformatiivne teema välja, lisasin selle nimekirja.
Tegemist on analüüsi kõige subjektiivsema osaga. Kriteeriumiks, kas teema on informatiivne või mitte, sai see, kas teema andis edasi mingit sisulist või oli seotud protseduuriliste märkustega, ainult konkreetsete Riigikogu liikmete nimedega (mingeid muid märksõnu seal ei olnud). Teistsuguse taustateadmisega inimene võib sisuliste teemade valikul teha teistsuguseid otsuseid.
Mittesisuline teema ei pruugi tähendada, et sellel ei ole analüütilist väärtust. Ka protseduurilised teemad võivad anda edasi infot (näiteks mingil perioodil võeti proportsionaalselt rohkem vaheaegu). Käesoleva analüüsi fookus on sisulistel teemadel.
Näide mittesisulistest teemadest:
- “haaletada haaletas haaletusele”
- “vaheaega kumneminutilist haaletust”
Näited sisulistest teemadest:
- “palgatousu opetajate palgatous”
- “efsf esm kreekale”
Kokku jäi 1152 teemast alles 256 sisulist teemat. Analüüsis võrdlesin tulemusi nii kõikide teemade kui ka ainult sisulisi teemasid arvesse võttes. See annab võimaluse hinnata, kui palju teemade välja jätmine lõplikke tulemusi muudab.
Järgneval graafikul on näha nii sisuliste (inform) kui ka mitteinformatiivsete (noninform) teemade lõikude arvu dünaamika. Jooniselt on näha, et mõlema dünaamika on väga sarnane ning nende proportsioon praktiliselt ei muutu.
Seega mitteinformatiivsete teemade välistamine ei tohiks tekitada süstemaatilisi moonutusi analüüsis.
Täiendus 05.11.2023
Võtsin kasutusele uue teemade mudeli, mis leidis 2107 teemat (kaasa arvautd nö tühi teema sildiga -1). Teemadest selekteerisin välja sisulised ja formaalsed teema. Uus teemade nimekiri on siin: https://github.com/RRisto/riigikogu_stenos/blob/master/data/interim/topics2022/topics_info2022_manual_review.xlsx)
Muutuste leidmine teemades proportsioonides
Teemade dünaamika olulisemate muutuste leidmiseks kasutan jällegi Feelingstreami lahendust, mille detailid ei ole avalikud. Lahendus võtab arvesse, kui palju muutub teemade dünaamika kui ka seda, kui tõenäoline tulemus on.
Vähendamaks mikromuutuste ja müra sattumist tulemustesse, on analüüsis andmed agregeeritud aastate lõikes. Üksikute nädalate ja isegi kuude lõikes võivad tulemused muutuda palju tulenevalt erinevatest istungite arvudest.
Kes soovib ise muutuseid teemade dünaamikast leida võib kasutada lihtsalt teemade osakaalu muutuste leidmist (mitu % teema osakaal kasvas või vähenes). Mõistlik oleks arvesse võtta teemade üldist osakaalu, et välistada väga madala sagedusega teemad.
Analüüs
Analüüsiks kasutan leitud teemasid, nende sageduste muutusi ajas kui ka fraktsioonide/rääkijate vahel. Põhiliselt kasutan graafilist analüüsi ning eelkirjaldatud proportsioonide muutumise hindamist. Tulemused on kirjeldatud eraldi postitustes.
Kasutatud allikad
- Estonian Parliament (Riigikogu) stenograms topic analysis, https://github.com/RRisto/riigikogu_stenos
- Feelingstreami koduleht. Feelingstream OÜ, https://www.feelingstream.com/
- GSDMM, Risto Hinno, https://github.com/RRisto/gsdmm
- Riigikogu avaandmete dokumentatsioon, Riigikogu, https://api.riigikogu.ee/swagger-ui.html
- XII Riigikogu fraktsioonid, Riigikogu, https://www.riigikogu.ee/tutvustus-ja-ajalugu/riigikogu-ajalugu/xii-riigikogu-koosseis/fraktsioonid/
- XIV Riigikogu, V istungjärk, infotund Kolmapäev, 13.01.2021, 12:00, Riigikogu, https://stenogrammid.riigikogu.ee/202101131200