
This time I prepared article in Polish as it is mainly intended for people from my country. Presidential election is coming soon and I have made some hashtag analysis to show activity of particular accounts, relations between users, etc.
EDIT: English version of this article is available here.
Tym razem wpis wyjątkowo będzie po polsku. Przyczyna prosta, głównie kieruję go do odbiorców w moim kraju. Za kilka dni będziemy wybierali prezydenta. Każdy kandydat w mniejszym lub większym stopniu udziela się w mediach społecznościowych. Udzielanie się może przybierać bardzo różne formy, od starania się o zasięgi w sposób naturalny, przez płatne kampanie reklamowe, kończąc na nieco innych kampaniach, w których angażowane są całe sztaby osób zakładających fałszywe konta promujące danego kandydata w sposób mniej lub bardziej wysublimowany. W tym wpisie nie będę ścigał trolli, choć trochę dotkniemy tego tematu. Przede wszystkim jednak chciałem przedstawić dane i dokonać podstawowej analizy aktywności różnych kont. W zbiorze znalazły się te, które wykazały się aktywnością przez tworzenie tweetów zawierających przynajmniej jeden z poniższych hashtagów (wliczając oczywiście wszelkie kombinacje małych i wielkich liter):
- #biedron2020
- #bosak2020
- #duda2020
- #holownia2020
- #kidawa2020
- #kosiniak2020
- #trzaskowski2020
Kryterium wyboru
Analiza nie obejmuje oczywiście wszystkich tweetów związanych z wyborami. Można ją wzbogacić o inne hashtagi, trochę mniej oficjalne, ale doszedłem do wniosku, że dosyć sprawiedliwe będzie wyjście od hashtagów, które można uznać za oficjalne. Na liście nie ma kandydatów, którzy w ostatnich sondażach nie załapali się do czołówki. No może z wyjątkiem pani Kidawy, ale jej aktywność warto przeanalizować pod kątem Rafała Trzaskowskiego.
Bardzo istotny jest również przedział czasowy. Brałem pod uwagę tweety od początku kwietnia, do 19 czerwca włącznie.
Aktywność z podziałem na hashtagi
Na start bardzo podstawowe liczby pokazujące ile tweetów z danym hashtagiem pojawiło się w podanym okresie (01.04 – 19.06.2020).
Liczby nie są zaskakujące. Najwięcej wpisów z całego zbioru stanowią te, które zawierają hashtagi #duda2020 i #trzaskowski2020. Swoją drogą biorąc pod uwagę, że Rafał Trzaskowski oficjalnie kandyduje od dosyć niedawna to można zaobserwować u niego sporą aktywność. Warto wspomnieć, że fakt zamieszczenia hashtaga we wpisie nie oznacza oczywiście pozytywnego przekazu. Dlatego też trzeba powyższe liczby traktować jako ogólne zainteresowania (negatywne i pozytywne) kandydatem. Poniżej wykres z tymi samymi liczbami ale ukazujący procentowy udział tweetów z poszczególnymi hashtagami w całym badanym zbiorze.

Suma tweetów dla każdego hashtaga nie jest faktyczną sumą wszystkich tweetów ponieważ niektóre wpisy zawierają kilka z badanych hashtagów.
Aktywność z podziałem na miesiące
Rozbijmy powyższe liczby na miesiące. Analizujemy kwiecień, maj i czerwiec. Sprawdźmy który hashtag był najpopularniejszy.

Tutaj widać znowu dużą aktywność #duda2020 i #trzaskowski2020 i reszta daleko w tyle. Pomimo tego, że decyzja o kandydowaniu na prezydenta przez Trzaskowskiego zapadła około połowy maja, widać, że #trzaskowski2020 był znacznie aktywniejszy w maju niż #kidawa2020. Jeśli weźmiemy pod uwagę ilość wpisów z #kidawa2020 w kwietniu to widzimy, że jest porównywalna do pozostałych kandydatów mocno odbiegających od #duda2020. Wypada tutaj znacznie słabiej niż #trzaskowski2020. Jak widać Andrzej Duda był w tym miesiącu najaktywniejszy. Przyczyn może być dużo, z pewnością sytuacja z COVID-19 wpłynęła na taki stan rzeczy.
Daty utworzenia kont
Popularność popularnością, ale przejdźmy do ciekawszych aspektów. Przeanalizujmy kiedy były tworzone konta odpowiedzialne za tworzenie tweetów z poszczególnymi hashtagami. Kont sumarycznie jest sporo więc wszystkich nie będziemy omawiać, ale zależy nam na wyłapaniu miesięcy, w których założonych ich było najwięcej. Aby to zrobić zgrupujemy konta według miesięcy ich powstania. Rozpatrujemy oczywiście tylko takie konta, które stworzyły przynajmniej jednego tweeta z danym hashtagiem. Poniższy wykres przedstawia 20 najliczniejszych grup. Zobaczmy kto się załapał.

Jak widać do pierwszej dwudziestki załapali się #duda2020, #trzaskowski2020 i #bosak2020. Interesujące jest, że w przypadku #duda2020 mamy do czynienia z bardzo systematycznym zakładaniem kont w styczniu 2016, 2017 i 2019. W przypadku stycznia 2020 jest zdecydowany wzrost. Następnie w lutym mamy drobny spadek liczby nowych kont, a później wzrost. W marcu, kwietniu i maju powstają po około 220-230. Dosyć podobny trend można zaobserwować w przypadku #trzaskowski2020. Tutaj mamy konsekwencję i od stycznia do maja jest stały wzrost nowych kont. Z czego mogą wynikać te liczby? Trudno jednoznacznie stwierdzić. Z jednej strony mogą wskazywać na aktywizację osób, w związku z nadchodzącymi wyborami lub po prostu pandemią. W ostatnich miesiącach życie wielu osób przeniosło się do sieci ze względu na sytuację z COVID-19. Twitter jest potencjalnym źródłem najświeższych informacji ze świata. Z drugiej strony jak za chwilę zobaczymy grupa osób, które założyły konto w roku 2020 stanowi dosyć duży udział wśród tych, które tweetowały z użyciem hashtagów #duda2020 i #trzaskowski2020. To może już świadczyć o bardziej zorganizowanych działaniach.
Poniżej ten sam wykres tylko poszerzony o kolejne 10 grup (top 30).

Jak widać cały czas mamy te same hashtagi. Pojawiły się grupy reprezentowane przez nowe konta związane z #bosak2020 i #duda2020. Sprawdźmy, czy ktoś nowy wejdzie do gry jeśli znowu poszerzymy nasze grono o kolejne 10 grup.

Mamy nowego zawodnika #holownia2020. Nieznacznie, bo tylko w kwietniu 2020 z liczbą 70 nowych kont, ale jest 🙂 . Oprócz tego można zaobserwować pojawienie się przede wszystkim nowych grup powiązanych z #trzaskowski2020. Są to głównie poprzednie lata.
Udział kont założonych w 2020 roku
Jeśli zaczynamy się zastanawiać, czy przypadkiem za systematycznym zakładaniem kont nie stoi jakaś konkretna strategia warto sprawdzić jaki jest udział nowych kont w roku wyborczym. Poniższy wykres pokazuje nam tą informację.

Jak widać udział nowo utworzonych kont w roku 2020 jest istotny szczególne w przypadku niektórych kont:
- #holownia – ok. 29%
- #bosak2020 – ok. 28%
- #biedron2020 – ok. 27%
- #duda2020 – ok. 21%
- #kosiniak2020 – ok 20%
- #trzaskowski2020 – ok. 17%
- #kidawa2020 – ok. 14%
Same procenty oczywiście nie mogą być wyrocznią, a jedynie jednym z wielu czynników. Szczególnie to widać w przypadku #kosiniak2020 gdzie po prostu nie było dużej aktywności. Każde nowe konto mocno ten udział zwiększało. Na Twitterze jak wiadomo jest dużo różnego rodzaju botów. Wśród nich są takie, które zupełnie nie będą związane z kandydatami, ani nawet z tematyką wyborów. Żeby funkcjonować i nie zostać zablokowanym przez Twittera od czasu do czasu będą retweetować. Dlatego w przypadku analizy tak mało popularnego hashtaga jak #kosiniak2020 warto to brać pod uwagę.
Najbardziej aktywne konta
Przejdźmy teraz na większy poziom szczegółowości i sprawdźmy, czy mamy liderów używających danego hashtaga. Poniższy wykres pokazuje 10 kont, które utworzyły najwięcej tweetów z przynajmniej jednym z hashtagów.

No i mamy lidera 🙂 Jest z nim zdecydowanie konto @aantypofrontb używające hashtaga #duda2020. Co ciekawe konto było aktywniejsze niż oficjalne konto wyborcze Andrzeja Dudy. Nawet jeśli zsumujemy kilka innych najpopularniejszych kont to i tak widać, że @aantypofrontb utworzyło więcej wpisów 😉 Jeśli chodzi o inne hashtagi, widzimy, że do pierwszej 10tki zakwalifikował się również #bosak2020, #kosiniak2020 i #trzaskowski2020. Wiodące są tutaj oficjalne konta kandydatów. Wśród użytkowników wyróżniają się również @konfederacja_ oraz @polskiidea.
Podsumowanie najbardziej aktywnych kont
Ostatni wykres pokazał, że #duda2020 zdominował pierwszą 10kę. Aby wziąć pod uwagę aktywność w ramach mniej popularnych hashtagów skoncentrujmy się na każdym osobno wyciągając 5 najbardziej aktywnych użytkowników. Tym razem posłużymy się tabelami prezentując dodatkowe informacje:
- Liczba tweetów z danym hashtagiem
- Wszystkie tweety danej osoby
- Data dołączenia
- Liczba osób śledzących dane konto
- Ilość osób, które dane konto śledzi
- Ilość polubień, które dane konto dało różnym tweetom
- Udział procentowy tweetów z wybranym hashtagiem wsród wszystkich wpisów z tym hashtagiem
Nie będę dokładnie analizował wszystkich użytkowników, pozostawiam to czytelnikowi, ale warto zwracać uwagę na:
- Stosunek osób śledzących konto do śledzonych. Jeśli obydwie wartości są zbliżone może to oznaczać, że konto jest częścią większej sieci kont zarządzanej w sposób bardziej zorganizowany. Wynika to z faktu, że wzajemnie takie konta się uwiarygodniają. Oczywiście kluczowe jest tu słowo “może” bo takie liczby mogą wynikać również z innych rzeczy.
- Stosunek polubień do innych aktywności np. tweetów (tutaj przydałaby się bardziej szczegółowa informacja o tym ile mieliśmy odpowiedzi, tweetów i retweetów, może w przyszłości wzbogacę 😉 ). Jeśli polubień jest wyraźnie dużo (szczególnie w stosunku do tweetów nie będących retweetami, ani odpowiedziami) może to świadczyć o tym, że mamy do czynienia z botem. “Like” jest znacznie prostszym mechanizmem niż wiarygodny tweet.
- Udział tweetów z rozpatrywanym hashtagiem wśród wszystkich tweetów danej osoby (nie jest to ostatnia kolumna, ta pokazuje udział we wszystkich tweetach z hashtagiem)
- Datę założenia konta. Zachęcam do twórczego działania w tym zakresie 😉 bo może się okazać, że data utworzenia niektórych kont nie jest przypadkowa. Oprócz tak oczywistych dat jak te, które przypadają na miesiące tuż przed wyborami, mogą być również inne np. poprzednie wybory, czy istotne wydarzenie wymagające większej aktywności (np. kontrowersyjna ustawa, afera, itp.).
- Zawsze finalnie dobrze jest samemu przeanalizować wybrane konto bezpośrednio na Twitterze. Ja swoje spostrzeżenia mam ale zachowam na razie dla siebie 😉
#biedron2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
robertbiedron | 439 | 19011 | 17.01.2012 | 248334 | 1912 | 32317 | 12.71 |
b_maciejewska | 75 | 4155 | 27.01.2013 | 3528 | 960 | 4177 | 2.17 |
poselttrela | 65 | 4115 | 06.04.2012 | 3769 | 1219 | 13220 | 1.88 |
krutulpawel | 49 | 1469 | 25.03.2019 | 592 | 311 | 4604 | 1.42 |
lukkubiak | 45 | 9162 | 31.08.2014 | 725 | 300 | 84669 | 1.3 |
#bosak2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
bosak2020 | 1861 | 5594 | 15.11.2019 | 9962 | 362 | 933 | 18.68 |
konfederacja_ | 912 | 21814 | 07.02.2019 | 46696 | 553 | 14609 | 9.15 |
ruchnarodowy | 284 | 14798 | 28.01.2013 | 32833 | 538 | 6904 | 2.85 |
true_poland | 134 | 10640 | 20.11.2018 | 3832 | 5000 | 21191 | 1.35 |
synrybaka56 | 87 | 6950 | 10.03.2018 | 89 | 97 | 9639 | 0.87 |
#duda2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
aantypofrontb | 4858 | 32537 | 30.09.2019 | 4323 | 3493 | 43775 | 8.18 |
andrzejduda2020 | 1346 | 3182 | 22.02.2018 | 19895 | 152 | 170 | 2.27 |
polskiidea | 1117 | 9325 | 05.03.2020 | 3123 | 3192 | 10981 | 1.88 |
szczery2015 | 730 | 28811 | 12.02.2017 | 6746 | 4986 | 204201 | 1.23 |
krepacz | 672 | 4922 | 30.01.2020 | 1165 | 2636 | 6127 | 1.13 |
#holownia2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
frankee_88 | 464 | 5513 | 28.01.2019 | 237 | 130 | 12234 | 5.81 |
piotr_jancz | 426 | 5902 | 04.02.2020 | 257 | 146 | 7056 | 5.34 |
joanna07018177 | 345 | 999 | 02.02.2020 | 106 | 203 | 9642 | 4.32 |
dariopolo9 | 279 | 2707 | 11.02.2020 | 193 | 171 | 1098 | 3.49 |
piotrasik | 238 | 2089 | 21.08.2010 | 271 | 269 | 6627 | 2.98 |
#kidawa2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
astonhedge | 169 | 68855 | 28.05.2015 | 745 | 178 | 4853 | 3.77 |
arturostrowski6 | 86 | 11545 | 15.06.2019 | 107 | 125 | 12160 | 1.92 |
ewblomsilniraze | 71 | 29432 | 12.11.2013 | 781 | 1101 | 25676 | 1.58 |
rbodaszewski | 65 | 46718 | 24.07.2012 | 1339 | 4922 | 63349 | 1.45 |
sebastianprycza | 61 | 6835 | 30.10.2013 | 390 | 152 | 9094 | 1.36 |
#kosiniak2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
kosiniakkamysz | 654 | 8606 | 18.11.2012 | 123052 | 1258 | 11094 | 28.46 |
aneta_marciszek | 336 | 8117 | 17.02.2018 | 224 | 415 | 17375 | 14.62 |
janparadowski_ | 116 | 1090 | 11.05.2017 | 86 | 93 | 1182 | 5.05 |
wiesci24pl | 52 | 13714 | 30.06.2017 | 3043 | 65 | 1 | 2.26 |
sondazep | 51 | 3688 | 08.04.2020 | 5194 | 370 | 838 | 2.22 |
#trzaskowski2020
Konto | Tweety z hashtagiem | Wszystkie tweety | Data dołączenia | Followersi | Followowani | Polubienia | Udział % tweetów z hashtagiem |
trzaskowski2020 | 711 | 1577 | 14.05.2020 | 36632 | 189 | 924 | 1.82 |
marioawario | 544 | 122481 | 26.04.2016 | 4262 | 3746 | 461376 | 1.39 |
ciotkaogda | 417 | 1756 | 13.12.2015 | 76 | 505 | 5765 | 1.07 |
po_podkarpackie | 370 | 49410 | 14.09.2016 | 3207 | 3359 | 55971 | 0.95 |
aniqua16 | 343 | 185827 | 29.05.2018 | 922 | 897 | 168864 | 0.88 |
Aktywność użytkowników w różnych hashtagach
Interesującym dopełnieniem do powyższych danych byłaby informacja o tym jak bardzo poszczególni użytkownicy używali jednocześnie hashtagów innych kandydatów w tych samych tweetach. Dobrze pokazuje to poniższy graf, na którym znalazły się konta z każdej grupy. Zmniejszyłem liczbę kont per hashtag do 3 aby zachować czytelność grafu.Niebieskie węzły to użytkownicy, a żółte to hashtagi poszczególnych kandydatów. Grubość krawędzi (relacji) odzwierciedla ilość tweetów napisanych przez dane konto.

Konta, które były najaktywniejsze angażowały się głównie w zamieszczanie wpisów z jednym lub dwoma hashtagami. Zdecydowanie wyróżnia się tutaj @astonhedge, które używało wszystkich hashtagów. Graf choć zawiera niewiele punktów pokazuje jednocześnie, że walka odbywała się w dużej mierze pomiędzy #kidawa2020, #trzaskowski2020 i #duda2020. Jeśli wyłączylibysmy @astonhedge, okazałoby się, że #bosak2020, #holownia2020 i #kosniak2020 nie ma żadnego powiązania z kontami, które piszą na temat Andrzeja Dudy i Rafała Trzaskowskiego. Oczywiście to tylko wyselekcjonowana i niewielka grupa, ale jednocześnie reprezentująca najaktywniejszych użytkowników.
Na zakończenie mały bonus. Wizualizacja grafu zawierająca wszystkie relacje (użytkownik -> hashtag), przygotowana z użyciem narzędzia Graphistry. Pozwala ono na wyświetlanie powiązań z uwzględnieniem dużych zbiorów danych.

Widoczne jest starcie dwóch głównych rywali oraz mocne odstawanie pozostałych kandydatów. Samej analizie grafowej można poświęcić osobny artykuł, wykrywając choćby różnego rodzaju grupy, czy też kluczowe osoby. W przyszłości pewnie zajmiemy się i tym tematem 😉
Podsumowanie
Do zebrania i analizy wykorzystałem m.in. następujące narzędzia: Twint, NiFi, Spark, Neo4j, neovis.js, Zeppelin (z highcharts).
Powyższe dane i dosyć pobieżna analiza pokazują ciekawe zależności i wyłaniają wyróżniające się pod różnymi względami konta. W kolejnych krokach można rozszerzyć zestaw danych o inne hashtagi i sprawdzić, czy zajdą istotne zmiany. Najprawdopodobniej w przypadku Szymona Hołowni moglibyśmy uzyskać ciekawsze wyniki ponieważ wydaje się, że przynajmniej równie intensywnie używa innych hashtagów jak #ZoltaRewolucja, czy #EkipaSzymona, ale wówczas trzeba by było bardzo mocno rozszerzyć zestaw danych dla pozostałych kandydatów. Interesujące na pewno byłoby zbadanie wydźwięku tweetów, czy też ich pogrupowanie z uwzględnieniem wykorzystanych słów. Finalnie można poszczególne konta przepuścić przez model Machine Learningowy spawdzający, czy jest botem. Możliwości jest dużo 🙂 W najbliższym czasie będę zamieszczał podobne analizy z wykorzystaniem wspomnianych mechanizmów.
Jeśli chcesz być na bieżąco z moimi postami, śledź mnie na Twitterze – @jca3s!