Debata Kopacz-Szydło / Szydło-Kopacz na twitterze


Doprowadzenie do debaty wyłącznie pomiędzy Ewą Kopacz i Beatą Szydło (kolejność alfabetyczna) to duży sukces obu sztabów. Kto wie, czy największym zagrożeniem dla PO i PiS nie są nowe ugrupowania, czyli .Nowoczesna, Razem i Kukiz’15. A tutaj sprawnie udało się je zepchnąć na bok, razem z ZL, PSL i KORWINem.

Ale debata się odbyła, ludzie komentują, też na twitterze. Przyjrzyjmy się tym temu jak i ile komentowano.

Czytaj dalej Debata Kopacz-Szydło / Szydło-Kopacz na twitterze

Wydarzenia na Ukrainie a Twitter i Big Data

Było tak, że ComputerWorld zaprosił mnie do wygłoszenia prezentacji na konferencji Big Data & Business Analytics. Ustaliliśmy, że interesującym studium przypadku do zaprezentowania będą analizy danych z mediów społecznościowych dotyczących wypowiedzi na temat wydarzeń na Ukrainie.

Przez ponad dwa miesiące zbieraliśmy Twitty, wiadomości na Facebooku, artykuły na czytnikach RSS jakoś związane z Ukrainą lub Krymem. Surowych danych zebrało się ponad 300GB, ale po odfiltrowaniu tego co ciekawe i wyznaczeniu interesujących agregatów zeszliśmy do paczki danych o rozmiarze kilkudziesięciu MB.

Do analiz wykorzystałem R i kilka innych narzędzi, między innymi IBM Many Eyes. Na przykładzie tego i kolejnych wpisów chciałbym pokazać jakie przykładowe analizy na tej paczce danych wykonywaliśmy. Dziś na przykład pokażę co można zrobić z użyciem narzędzia Many Eyes.

Wymóg użycia Many Eyes jest taki, że analizowane dane są publiczne i nie mogą być większe niż 5 MB. Z korpusu twittów wybrałem więc 5MB angielskich, interesujących ćwierków i dodałem do Many Eyes. Ten zbiór danych można pobrać z tego adresu, można go też dalej wizualizować używając platformy ME.

Czytaj dalej Wydarzenia na Ukrainie a Twitter i Big Data

Olimpiada, Twitter a geolokalizacja*

Dzisiaj przedstawię wizualizację danych dotyczących letnich igrzysk olimpijskich w Londynie pobranych publicznie dostępnym API Twittera. Jest to trzecia wizualizacja prezentowana na tym blogu, która powstała na bazie Twittera i dotyczy sportu. Poprzednie dwie były o Premier League i Euro 2012. Podobnie jak poprzednie, również ta została wykonana w oddziale Netezza IBM Polska i jest ze szczegółami opisana na blogu petascale analytics.

Ta wizualizacja jest wyjątkowa z uwagi na charakterystykę użytych danych. Zbierane wiadomości zawierały informację o lokalizacji/położeniu geograficznym. Wiadomości z informacją o lokalizacji jest jedynie kilka procent, ale wystarczą one do wykonania interesujących grafik. Połączenie informacji o użytkowniku, treści wiadomości, czasie wysłania wiadomości i położenia daje wiele interesujące możliwości. Jeżeli macie pomysły co nowego, ciekawego można zrobić z informacją o położeniu geograficznym – śmiało podzielcie się pomysłami w komentarzach.

Ok, więc czas na pięć historii zbudowanych wokół pięciu wizualizacji.

Na początek zobaczmy gdzie znajdują się osoby piszące wiadomości na Twitterze. Informacja o lokalizacji jest tak dokładna, że prawie można rozróżnić w którym rzędzie na stadionie siedział wysyłający wiadomość. Na poniższej mapie łatwo zlokalizować stadion olimpijski, hale koszykówki i basen na którym przeprowadzane były zawody pływackie. Z okolic tych miejsc pochodziło najwięcej komentarzy.

Dodajmy do informacji o położeniu informację o nastawieniu osoby piszącej wiadomość. Zobaczmy teraz na mapie Londynu gdzie pisano dobrze a gdzie pisano źle o organizacji igrzysk. Okolice stadionu olimpijskiego i hal w których odbywały się zawody w podnoszeniu ciężarów zielenią się od pozytywnych opinii, za to w London City dominują negatywne komentarze.

Osoby piszące dużo wiadomości udostępniają tyle informacji o sobie, że można odtworzyć gdzie przebywały podczas dnia. Ups, problem z prywatnością? Może warto sprawdzić ile z informacji o nas udostępniamy już nie tylko wielkim korporacjom, ale wręcz każdemu internaucie?

Zobaczmy teraz gdzie i ile mówi się o różnych dyscyplinach olimpijskich. Poniżej prezentowanych jest sześć ciekawszych przykładów. O piłce nożnej mówiło się dużo i wszędzie (choć najwięcej na Wembley), zawody zapaśnicze czy taekwondo były rzadziej komentowane i raczej tylko przez osoby śledzące zawody w halach sportowych.

A na koniec, zobaczmy o kim mówiono najwięcej podczas igrzysk olimpijskich? Okazuje się, że po raz kolejny Usain Bolt wyprzedził pozostałych sportowców. Nie jest to dużym zaskoczeniem, a czy w poniższej liście top 200 jest jakieś zaskakujące nazwisko?

 

 

PS: Oczywiście wszystkie wizualizacje wykonano w R.

* słowo geolokalizacja jest niedopuszczalne w grach, ale na tyle się upowszechniło, że pozostawiam je bez dalszego spolszczenia.

Co mówiono o miastach gospodarzach Euro 2012

Na publikowanych kilka tygodni temu wpisach pisałem o tym, jak wyciągnąć z Twittera informacje o meczach piłki nożnej, czy to z Premier League, czy z Euro 2012. W tym wpisie krótko omówię wyniki przedstawione na blogu warszawskiego oddziału Netezza IBM, dotyczące analizy danych z Twittera pod kątem tego co mówiono o miastach gospodarzach na Twitterze podczas Euro. Wszystkie prezentowane poniżej wykresy pochodzą ze wspomnianego bloga.

Podczas Euro ww. oddział zebrał kilkanaście milionów wiadomości z Twittera. Zdecydowana większość dotyczyła przebiegu rozgrywek piłkarskich, ale turyści zza granicy pisali też o miastach, które odwiedzili, komunikacji publicznej, drogach, zabytkach itp. Spójrzmy co też ci turyści pisali. Podsumowanie przeprowadzonych analiz przedstawia poniższy zbiór wykresów. Pierwszy wykres można zobaczyć w dużej rozdzielczości tutaj (w powiększeniu widać przykładowe, wybrane zdania z Twittera tworzące ramkę rysunku).

 

Przyjrzyjmy się dwóm ciekawym elementom tej grafiki. Jeden prezentuje skumulowaną widoczność i nastawienie wiadomości dotyczących miast gospodarzy. Wyniki dotyczą okresu trzech tygodni, czarne punkty oznaczają wyniki po pierwszym, drugim i trzecim tygodniu.

 

 

Najwięcej wiadomości dotyczy Warszawy, średnio dwukrotnie więcej niż innych miast gospodarzy. Bilans wiadomości pozytywnych minus negatywnych jest podobny dla wszystkich gospodarzy. Wrocław charakteryzuje się najmniejszą liczbą wiadomości (poniżej 20k) ale za to największym procentem wiadomości pozytywnych (procent odpowiada nachyleniu krzywej).

Drugi ciekawy element dotyczy analizy nastawienia dla różnych języków. Nastawienie wiadomości często ocenia się na podstawie listy słów o zabarwieniu pozytywnym i negatywnym. Trudno jednak skalibrować takie listy dla różnych języków by podobnie mierzyć natężenie emocji. Poniżej zastosowano więc inną prostą sztuczkę. Język wiadomości rozpoznano automatycznie, a nastawienie wiadomości w tym języku określono częstością buziek uśmiechniętych / smutnych. Szerokość prostokąta odpowiada liczbie wiadomości w tym języku o danym mieście (od lewej Wrocław, Poznań, Gdańsk) wysokość odpowiada frakcji wiadomości z określonym typem buziek (buźki ławo rozpoznać prostym wyrażeniem regularnym).
I tak np. o Wrocławiu publikowanych było wiele pozytywnych wpisów w językach angielskim, hiszpańskim, czeskim, rosyjskim itp.

 

 

Wyniki te dotyczą użytkowników Twittera i nie można ich przenosić na całe nacje. W różnych krajach popularność Twittera jest rożna. Niemniej myślę, że są to ciekawe wykresy. A może macie pomysł co jeszcze na temat miast gospodarzy można wydobyć z danych z Twittera?

Statystyczna analiza Euro 2012, Twitter i niespodzianki

Streszczeniem tego wpisu jest cytat ze świetnej książki ,,A mathematician reads the newspaper”, mianowicie: ,,You can only predict things after they’ve happened” (technicznie jest to powiedzenie Ionesco).

Jakiś czas w tym wpisie ,,Premier League a opowiadanie historii bazując na danych” odnosiłem się do bloga zaprzyjaźnionej firmy, opisującego analizy wypowiedzi z Twittera podczas Premier League.

Podobne analizy wspomniany zaprzyjaźniony oddział R&D IBM z Warszawy prowadzi podczas Euro 2012 na swoim blogu. Dzisiaj przekopiuję stamtąd jeden z ciekawszych podsumowań. Roi się od liczb, co jest raczej wadą niż zaletą, ale pomimo to przyjemnie się je ogląda. Oryginalny wpis jak i więcej analiz dotyczących Euro znaleźć można na wspomnianym wyżej blogu.

Co zostało zrobione? Na podstawie wypowiedzi na Twitterze oceniano jakie wyniki typują internauci a następnie zestawiono predykcje internautów z wynikami meczów.

Interesujące jest to, że wyniki pewnych meczów było łatwo odgadnąć (remis Włochy – Chorwacja, wygrana Włoch nad Irlandią) a inne były sporą niespodzianką dla internautów (wynik meczu Holandia – Dania czy Francja – Szewcja).

Ciekawe na ile opinie z Twittera są zgodne z zakładami bukmacherskimi. Może to i pomysł na biznes dla kogoś lubiącego ryzyko?

 

 

Premier League, Twitter a opowiadanie historii bazując na danych

Dzisiaj będzie o emocjach związanych z oglądaniem wykresu opisującego przebieg meczu. Wzrokowcy mogą czytać ten wpis od końca, od wykresu umieszczonego na końcu wpisu. Zanim jednak przejdę do klasycznego wpisu z jednym spójnym wątkiem, zacznę od dwóch wolnych skojarzeń wprowadzających.

Skojarzenie 1. Czy oglądacie wyścigi formuły 1? Ja to czasami robię, ale ponieważ oglądanie bolidów jest nudne, słuchanie komentatorów jest jeszcze nudniejsze, więc moja ulubioną formą oglądania wyścigów jest śledzenie live timing, dostępnego np. tutaj. Piękna sprawa! Na bieżąco można obserwować prędkości i położenia bolidów, graficznie przedstawiona jest sytuacja na torze. Wszystko co zbędne (wygląd bolidów, hałas silników) jest usunięte. Wyścig można śledzić patrząc na tabelkę z liczbami pokazującą czasy w poszczególnych sektorach, prędkości w punktach kontrolnych, odległość od lidera, prędkość wiatru, wilgotność powietrza, stan opon i to jest super!

Skojarzenie 2. Nie interesuję się piłką nożną a tym bardziej ligą angielską. Poniżej jednak przedstawiam wizualizację opisującą przebieg meczu w którym stawką był tytuł mistrza w Premier League. Interesujące w tej wizualizacji jest to, że prezentuje ona analizę emocji z jakimi ludzie oglądali i komentowali wspomniany mecz. Zaskakującym ale miłym doświadczeniem było odkrycie, że przyglądając się dwóm krzywym można poczuć emocje, które przezywali kibice drużyn walczących o mistrzostwo. Poza tym krzywe są dosyć interesujące a każde ich załamanie jest związane z jakimś wydarzeniem. Krzywa opisuje więc serię wydarzeń, streszcza cały przebieg meczu, skrywa ciekawą historię.

Dzisiejszy wpis jest wolnym tłumaczeniem artykułu dostępnego na blogu IBM BigData and Petascale Analytics. Analizę i wykres wykonano w dziale R&D IBM w Warszawie. Ponieważ wizualizacja bardzo mi się podoba więc poniżej przedstawiam streszczenie historii, która się kryje za tą wizualizacją.

Spójrzmy na mecz piłki nożnej przez pryzmat wpisów z Twittera. Spojrzymy nie na byle jaki mecz, ale na mecz o mistrzostwo w Premier League. A że mieszkańcy wysp często korzystają z Twittera to też i danych na które można spojrzeć jest sporo.

Ostatnia seria meczy w Premier League mogła wiele zmienić. Interesują nas trzy mecze:

  • Man City – QPR: Manchester City walczy o tytuł mistrza i musi wygrać aby zdobyć mistrzostwo. QPR walczy o utrzymanie się w lidze, albo QPR albo Bolton z ligi wypadną. 
  • Man United – Sunderland: Aby Manchester United został mistrzem musi wygrać ten mecz i QPR musi wygrać z Man City.
  • Stoke – Bolton: Bolton walczy o utrzymanie się w lidze, musi wygrać ten mecz.

Do ostatnich minut nie było wiadomo kto wypadnie z ligi a kto zdobędzie mistrzostwo. Poniżej krótko opiszę przebieg powyższych meczy. Na poniższym wykresie zaznaczono wpisy na twiterze w których znajdowały się odniesienia do Manchester City lub Manchester United. Warto prześledzić sobie jakim zachowaniem na Twitterze odpowiadają poniższe zdarzenia.

  • 15:20, Manchester United traci bramkę, szanse na tytuł się oddalają.
  • 15:39, Manchester City zdobywa bramkę, od tej chwili jest faworytem jeżeli chodzi o mistrzostwo. Fani są zadowoleni.
  • 16:03, 16:21, Manchester City traci bramkę i jest remis, a następnie traci kolejną bramkę. Jeżeli w tej chwili mecz by się skończył to mistrzem byłby Manchester United. Fani nie są szczęśliwi. Na Twitterze pojawiają się niezbyt pozytywne wpisy na temat Manchester City.
  • 16:45, mecz Stroke – Bolton kończy się remisem, jest już pewne, że Bolton spadnie, QPR nie jest już zagrożone. Tymczasem w ostatnich doliczonych minutach meczu Manchester City strzela dwie bramki QPR. Tym samym wygrywa mecz i zdobywa tytuł mistrza.

Łatwo sobie wyobrazić, że ostatnie minuty meczu wywołały sporo emocji. Całą powyższą historie i wiele dodatkowych szczegółów można odczytać z poniższego wykresu. Na pierwszym panelu przedstawiona jest liczba ćwierków na minutę, po meczu ćwierków dotyczących Manchester City było ponad 8000 na minutę! Drugi panel pokazuje nastawienie ćwierków. W okresie po stracie drugiej bramki przez City ćwierki mają negatywne nastawienie by po zdobyciu mistrzostwa przejść to peanów zachwytu. Trzeci panel pokazuje kilka wybranych ćwierków, które były przećwierkowywane (ech, to słowotwórstwo, chodzi o retweet :-). Cyniczny ćwierk dotyczący kupienia meczu miał przed godziną 17:45 ponad 500 retweetów na minutę!

A Wam jak się podoba oglądanie sportu w taki sposób?

Poniższy wykres lepiej oglądać w pełnej rozdzielczości. W wersji wektorowej SVG jest on dostępny tutaj, w wersji rastrowej PNG większy wykres jest dostępny tutaj.

 

 

Aktywność polityków na Twitterze

Zacznę od krótkiego wyjaśnienia skąd pomysł na ten wpis. W komentarzach do piątkowego wpisu użytkownik @Maciej podał odnośnik do przykładowej analizy danych z Twittera z popularnego agregatu blogów o R, czyli R-bloggers. W odpowiedzi na ten komentarz użytkownik @mw zrobił mini profilowanie Martina, użytkownika, którego wpisy przedstawiono w tej przykładowej analizie. Hmmmm, może z takiej analizy aktywności da się coś odczytać.

Od jakiegoś czasu przymierzam się do analizy wypowiedzi polityków, czy to w sejmie, czy poza sejmem. Szukając rożnych materiałów w tym temacie znalazłem blog Michała Buchty z ruchu Autonomii Śląska, który zebrał tutaj nazwy użytkowników Twittera wybranych polityków.

Wykorzystując pakiet twitteR, o którym pisałem np. tutaj pobrałem wiadomości tych użytkowników stosując dwa filtry: interesują mnie wiadomości po 1 stycznia roku 2010 i z przyczyn technicznych nie więcej niż 1500 na jedną osobę (tylko kilku użytkowników miało więcej). Zebrane wiadomości w plikach tekstowych znajdują się w tym katalogu.

Dla każdego użytkownika z listy Michała Buchty zrobiłem rysunek przedstawiający jego aktywność na Twitterze. Każdy użytkownik przedstawiony jest na dwóch rysunkach, podsumowujących jego aktywność z dnia na dzień oraz informację w jakie dni i jakie godziny dana osoba pisze wiadomości.

Jak wygląda aktywność naszych polityków? W jakich godzinach piszą wiadomości? Czy ograniczają aktywność do 8 godzin przez 5 dni w tygodniu czy pracują dłużej? Czy mobilizują się do aktywności miesiąc przed wyborami czy też używają twittera na co dzień? O której wstają i o której kładą się spać. To wszystko można odczytać z poniższych wykresów (ok, trochę przesadzam, wiadomości z jednego konta wciąż mogą pochodzić od kilku różnych osób). Jeżeli ktoś zna aktualniejszą listę polityków lub chciałby wykonać aktualny przydział do partii to pomoc mile widziana. Zapraszam do umieszczania komentarzy co ciekawego można wyciągnąć z wiadomości z Twittera.

Przeglądając poniższe obrazki można zaobserwować kilka ciekawych profili pisania na Twitterze. Przez cały tydzień o każdej godzinie, po pracy, późno w nocy, tylko w środy, tylko w okresie wyborczym itp.

Linki

Kliknięcie na dowolną nazwę użytkownika otworzy rysunek o aktywności danego użytkownika. Kliknięcie rysunku rastrowego otworzy jego wersję wektorową. Na rysunkach przedstawiono dla każdego użytkownika liczbę wiadomości napisanych przez tego użytkownika w jednym dniu (lewy obrazek, każdy obrazek ma inną skalę kolorów przedstawioną po jego prawej stronie). Oraz informację w jakich godzinach w różnych dniach tygodnia dany użytkownik pisze wiadomości.

Kolejność i przyporządkowanie do partii zgodne z listą Michała Buchty. Przyporządkowanie do partii nie jest aktualne (np. Janusz Palikot nie jest w PO).

Platforma Obywatelska

@adamwarzecha, @aowczarczak, @ArekGodlewski, @arturgierada, @BarbaraKudrycka, @beatabublewicz, @CTomczyk, @DarekDolczewski, @EwaKopacz, @GKZorbas, @gornig, @HannaZdanowska, @janusz_sepiol, @JaroslawPieta, @JerzyBuzek, @joannabrodka, @johngodson, @jskrzydlewska, @komorowski, @ktyszkiewicz, @MaciejSonik, @MarekLapinski, @MichalSzczerba, @MichOwczarczak, @Mlynarczyk, @mmarcinkiewicz, @m_wieczorek, @orzechowski_m_b, @Palikot_Janusz, @Platforma_org, @PO_Gliwice, @pomaska, @PremierRP, @radwitkowski, @RafalBruski, @RenataZaremba, @SidoniaJ, @sikorskiradek, @SlawomirNitras, @SlawomirNowak, @StanislawKracik, @TomaszKacprzak, @TomaszSiemoniak

Prawo i Sprawiedliwość

@AdamHofman, @AndrzejDuda, @DawidJackiewicz, @girzynski, @jerzymaterna, @jkaczynski_info, @kaminskimichal, @KBienkowski, @kozakzbigniew, @kppis, @kpogorzelski, @LukasOprawski, @maciejowski_waw, @MarciniukTomasz, @MarekSuski, @mariuszkaminski, @mhorala, @mkraczkowski, @PatrykJaki, @pawelkowalpl, @PawelPoncyljusz, @PilchJacek, @r_czarnecki, @rafalrudnicki, @TomaszZdzikot

Polskie Stronnictwo Ludowe

@LudowcyPSL, @pawlakwaldemar

Prawica Rzeczypospolitej

@marekjurek

Socjaldemokracja Polska

@Filemonowicz

Sojusz Lewicy Demokratycznej

@Arlukowicz, @jszmajdzinski, @Joanna_Senyszyn, @gnapieralski, @mareksiwiec, @naczas, @rydlinski, @wolejniczak1

Stronnictwo Demokratyczne

@stronnictwo

Wolność i Praworządność

@korwinmikke

komitety niepartyjne

@katarzyna_munio, @KDombrowicz, @K_Morawiecki, @KonarskiLukasz, @krzprz1, @MarcinOciepa, @MarekLucyk, @MichalBuchta, @TomaszTutak

Grafiki

Kliknięcie na dowolny obrazek otworzy jego wersję wektorową. Znacznie czytelniejszą.

Na rysunkach przedstawiono dla każdego użytkownika liczbę wiadomości napisanych przez tego użytkownika w jednym dniu (lewy obrazek, każdy obrazek ma inną skalę kolorów przedstawioną po jego prawej stronie). Oraz informację w jakich godzinach w różnych dniach tygodnia dany użytkownik pisze wiadomości.

@adamwarzecha, Adam Warzecha, radny miasta Katowice


@aowczarczak, Agnieszka Owczarczyk, radna miasta Gdańsk


@ArekGodlewski, Arkadiusz Godlewski, kandydat na prezydenta miasta Katowice


@arturgierada, Artur Gierada, poseł z okręgu Kielce


@BarbaraKudrycka, Barbara Kudrycka, minister nauki i szkolnictwa wyższego


@beatabublewicz, Beata Bublewicz, posłanka z okręgu Olsztyn


@CTomczyk, Cezary Tomczyk, poseł z okręgu Sieradz


@DarekDolczewski, Dariusz Dolczewski, radny dzielnicy Białołęka (Warszawa)


@EwaKopacz, Ewa Kopacz, minister zdrowia


@GKZorbas, Grzegorz Kostrzewa Zorbas, radny sejmiku woj. mazowieckiego z okręgu nr 7, kandydat do Parlamentu Europejskiego z okręgu Warszawa I


@gornig, Kajetan Gornig, radny miasta Gliwice


@HannaZdanowska, Hanna Zdanowska, posłanka z okręgu Łódź


@janusz_sepiol, Janusz Sepioł, senator z okręgu Kraków


@JaroslawPieta, Jarosław Pięta, poseł z okręgu Sosnowiec


@JerzyBuzek, Jerzy Buzek, eurodeputowany z okręgu Katowice, przewodniczący Parlamentu Europejskiego


@joannabrodka, Joanna Bródka, kandydata na radną miasta Szczecin


@johngodson, John Godson, radny miasta Łódź


@jskrzydlewska, Joanna Skrzydlewska, eurodeputowana z okręgu Łódź


@komorowski, Bronisław Komorowski, prezydent RP


@ktyszkiewicz, Krzysztof Tyszkiewicz, poseł z okręgu Warszawa I


@MaciejSonik, Maciej Sonik, radny powiatu krapkowickiego


@MarekLapinski, Marek Łapiński, marszałek województwa dolnośląskiego, radny sejmiku z okręgu nr 2


@MichalSzczerba, Michał Szczerba, poseł z okręgu Warszawa I


@MichOwczarczak, Michał Owczarczak, wicewojewoda pomorski


@Mlynarczyk, Dariusz Młynarczyk, radny miasta Turek


@mmarcinkiewicz, Michał Marcinkiewicz, poseł z okręgu Szczecin


@m_wieczorek, Magdalena Wieczorek, radna miasta Katowice


@orzechowski_m_b, Maciej Orzechowski, poseł z okręgu Kalisz


@Palikot_Janusz, Janusz Palikot, poseł z okręgu Lublin


@Platforma_org, partia Platforma Obywatelska RP


@PO_Gliwice, PO Gliwice


@pomaska, Agnieszka Pomaska, posłanka z okręgu Gdańsk


@PremierRP, Kancelaria Premiera


@radwitkowski, Radosław Witkowski, poseł z okręgu Radom


@RafalBruski, Rafał Bruski, wojewoda kujawsko-pomorski, kandydat na prezydenta miasta Bydgoszcz


@RenataZaremba, Renata Zaremba, posłanka z okręgu Szczecin


@SidoniaJ, Sidonia Jędrzejewska, eurodeputowana z okręgu Poznań


@sikorskiradek, Radosław Sikorski, poseł z okręgu Bydgoszcz, minister spraw zagranicznych


@SlawomirNitras, Sławomir Nitras, eurodeputowany z okręgu Gorzów Wielkopolski


@SlawomirNowak, Sławomir Nowak, poseł z okręgu Gdańsk


@StanislawKracik, Stanisław Kracik, wojewoda małopolski, kandydat na prezydenta miasta Kraków


@TomaszKacprzak, Tomasz Kacprzak, radny miasta Łódź (przewodniczący rady)


@TomaszSiemoniak, Tomasz Siemoniak, wiceminister spraw wewnętrznych i administracji


@AdamHofman, Adam Hofman, poseł z okręgu Konin


@AndrzejDuda, Andrzej Duda, kandydat na prezydenta miasta Kraków


@DawidJackiewicz, Dawid Jackiewicz, poseł z okręgu Wrocław


@girzynski, Zbigniew Girzyński, poseł z okręgu Toruń


@jerzymaterna, Jerzy Materna, poseł z okręgu Zielona Góra


@jkaczynski_info, Jarosław Kaczyński, prezes partii, poseł z okręgu Warszawa I


@kaminskimichal, Michał Kamiński, eurodeputowany z okręgu Warszawa I


@KBienkowski, Krzysztof Bieńkowski, radny powiatu przasnyskiego (przewodniczący rady)


@kozakzbigniew,


@kppis, Klub Parlamentarny PiS


@kpogorzelski, Krzysztof Pogorzelski, kandydat do rady miasta Białystok


@LukasOprawski, Łukasz Oprawski, radny dzielnicy Żoliborz (Warszawa)


@maciejowski_waw, Maciej Maciejowski, radny miasta Warszawa


@MarciniukTomasz, Tomasz Marciniuk, radny powiatu siedleckiego


@MarekSuski, MarekSuski, poseł z okręgu Radom


@mariuszkaminski, Mariusz Kamiński, poseł z okręgu Białystok


@mhorala, Marcin Horała, radny miasta Gdynia


@mkraczkowski, Maks Kraczkowski, poseł z okręgu Piła


@PatrykJaki, Patryk Jaki, radny miasta Opole


@pawelkowalpl, Paweł Kowal, eurodeputowany z okręgu Kraków


@PawelPoncyljusz, Paweł Poncyljusz, poseł z okręgu Warszawa I


@PilchJacek, Jacek Pilch, poseł z okręgu Tarnów


@r_czarnecki, Ryszard Czarnecki, eurodeputowany z okręgu Bydgoszcz


@rafalrudnicki, Rafał Rudnicki, radny miasta Białystok


@TomaszZdzikot, Tomasz Zdzikot, radny miasta Warszawa


@LudowcyPSL, partia Polskie Stronnictwo Ludowe


@pawlakwaldemar, Waldemar Pawlak, wicepremier, minister gospodarki, poseł z okręgu Płock


@marekjurek, Marek Jurek, przewodniczący partii, kandydat na prezydenta (2010)


@Filemonowicz, Wojciech Filemonowicz, przewodniczący partii


@Arlukowicz, Bartosz Arłukowicz, poseł z okręgu Szczecin


@jszmajdzinski, Jerzy Szmajdziński, poseł z okręgu Legnica, kandydat na prezydenta


@Joanna_Senyszyn, Joanna Senyszyn, eurodeputowana z okręgu Kraków


@gnapieralski, Grzegorz Napieralski, poseł z okręgu Szczecin, przewodniczący partii


@mareksiwiec, Marek Siwiec, eurodeputowany z okręgu Poznań


@naczas, Łukasz Naczas, kandydat do Parlamentu Europejskiego z okręgu Poznań (2009), radny miasta Gniezno


@rydlinski, Bartosz Rydliński, kandydat do Parlamentu Europejskiego z okręgu Poznań (2009)


@wolejniczak1, Wojciech Olejniczak, eurodeputowany z okręgu Warszawa I


@stronnictwo, profil nieoficjalny


@korwinmikke, Janusz Korwin-Mikke, prezes partii, kandydat na prezydenta miasta Warszawa


@katarzyna_munio, Katarzyna Munio, kandydatka na prezydenta Warszawy


@KDombrowicz, Konstanty Dombrowicz, prezydent Bydgoszczy


@K_Morawiecki, Kornel Morawiecki, kandydat na prezydenta (2o10)


@KonarskiLukasz, Łukasz Konarski, radny Zawiercia, komitet wyborców „Porozumienie Samorządowe Jesteśmy Razem”


@krzprz1, Krzysztof Przybylak, radny miasta Wojkowice, komitet wyborców „Dla Wojkowic”


@MarcinOciepa, Marcin Ociepa, kandydat na prezydenta Opola


@MarekLucyk, Marek Łucyk, radny miasta Gdynia, komitet wyborców Wojciecha Szczurka


@MichalBuchta, Michał Buchta, kandydat na radnego sejmiku województwa śląskiego, Ruch Autonomii Śląska


@TomaszTutak, Tomasz Tutak, radny powiatu lęborskiego (okręg Łeba i Wicko), komitet wyborców „Ziemia Lęborska”

Piątek, chmura słów, TextMining, morfologik i oczywiście R

Dzisiaj jest piątek, więc zamiast zaprzątać sobie głowę liczbami pooglądamy obrazki.

Dwa dni temu, w tym wpisie opisałem jak ściągnąć dane z Twittera i jako przykład ściągnąłem dane z kanału #debataACTA. Pokazałem też kilka podsumowań odkładając na później bardziej złożone analizy. Analizę nastawienia odłożę jeszcze na później, a dzisiaj pokażę jak danych tekstowych zrobić chmurę słów (ang. word cloud) używając R.

Samą chmurę słów można wykonać używając funkcji wordcloud() z pakietu wordcloud. Jako argumenty należy podać listę słów oraz współczynnik skalujący, odpowiadający wielkości danego słowa (najczęściej odpowiadający liczbie wystąpień danego słowa w tekście). Listę słów oraz częstości ich wystąpień można wygenerować używając funkcji str_split() i table(), ale aby było ciekawiej użyję w tym celu pakietu tm, który ma wiele przydatnych narzędzi do analizy tekstu (najwięcej przydatnych narzędzi ma do analizy tekstu angielskiego, ale z polskim też coś można zrobić).

Poniższy fragment kodu wczytuje dane, liczy tablicę częstości a następnie przedstawia ją graficznie z użyciem funkcji wordcloud(),

 

# Odczytaj dane
tweets = read.table(file="debataACTA4_13_luty.csv", sep=";", head=T)
 
# funkcje z pakietu tm i wordcloud
# do tworzenia korpusu wyrazów i ich wizualizacji
actaSlownik = Corpus(DataframeSource(data.frame(tweets[,2])))
actaSlownik = tm_map(actaSlownik, removePunctuation)
actaSlownik = tm_map(actaSlownik, tolower)
tdm = TermDocumentMatrix(actaSlownik)
m = as.matrix(tdm)
v = sort(rowSums(m),decreasing=TRUE)
 
# mając policzone częstości występowania możemy je zwizualizować
wordcloud(names(v), v^0.3, scale=c(5,0.5),random.order=F, colors="black")

 

Wykres otrzymany w ten sposób nie wygląda zbyt dobrze, ponieważ słowa występują w najróżniejszych odmianach a liczenie częstości osobno dla ,premierze’, 'premier’, 'premiera’, 'premierem’ nie wiele daje. Aby wykres wyglądał lepiej chcielibyśmy dla każdego ze słów znaleźć jego rdzeń i zliczać liczbę wystąpień rdzeni a nie różnych form. Jak to zrobić? Potrzebny będzie lematyzator, a dokładniej tzw. stemmer, czyli narzędzie, które dla każdego słowa wyodrębni tzw. 'stem’ (nie znam niestety polskiej terminologii a nie chcę tworzy kwiecistych tłumaczeń) czyli część słowa nie ulegającą odmianie.

Wykorzystam bezpłatny morfologik-stemmer dostępny na blogu http://morfologik.blogspot.com/ rozwijany przez Dawida Weissa i współpracowników. Narzędzie z którego skorzystałem to duży plik tekstowy mający w jednej kolumnie różne formy słów, w drugiej rdzenie a w trzeciej informacje o formie gramatycznej danego słowa. Oczywiście nie wszystkie słowa z twittera można znaleźć w tym zbiorze, nie ma tam np. wszystkich nazwisk. W każdym razie pierwsza transformacja polegała na przemapowaniu słowa na jego rdzeń, jeżeli słowo występuje w słowniku, lub pozostawienie słowa bez zmiany jeżeli w słowniku nie występuje. Dzięki temu z 13334 różnych słów zostaliśmy z 8597 słowami, z czego zdecydowana większość występuje tyko raz i nie znajdzie się na mapie tagów.

Zobaczmy jak wygląda rzeczona mapa.

[Rysunek 1. Chmura słów występujących przynajmniej dwa razy w zapisach z kanału debataACTA. Gdy było to możliwe słowa zostały przekształcone do swoich rdzeni. Wersja wektorowa tego rysunku (uwaga 7MB) znajduje się tutaj]

Dużo tych słów, mało widać, zróbmy więc jeszcze jedną iterację. Usuńmy wszystko co nie jest rzeczownikiem. Szczęśliwie słownik z pakietu morfologik ma informacje o tym czy dane słowo jest czy nie rzeczownikiem, więc zostawiamy tylko słowa, które znajdują się w słowniku i mają 'subst’ w trzeciej kolumnie.

[Rysunek 2. Chmura rzeczowników występujących przynajmniej dwa razy w zapisach z kanału debataACTA. Wersja wektorowa tego rysunku (uwaga 8MB) znajduje się tutaj]

Zróbmy jeszcze jeden eksperyment, mianowicie sprawdźmy jakie inne kanały występowały w wiadomościach z kanału #debataACTA. Zostawiamy więc tylko słowa zaczynające się od znaku #.

 

[Rysunek 3. Chmura nazw kanałów w wiadomościach na kanale debataACTA. Wersja wektorowa tego rysunku (uwaga 7MB) znajduje się tutaj]

#debataACTA, twitteR, Twitter i R

Zaczęło się niewinnie. Dwa tygodnie temu kolega Grzesiek P. powiedział, że analizę nastawienia (ang. Sentiment analysis) na dużych ilościach tekstu robi się banalnie. Tydzień temu kolega Paweł Ch. powiedział, że API twittera ma limit do 70 zapytań na minutę. W piątek przy okazji rozmowy o raporcie ,,Obiegi Kultury” Alek T. zapytał mnie czy mam doświadczenie w analizie danych z Twittera bo chętnie zobaczyłby się działo na kanale (moje autorskie tłumaczenie hashtaga) #debataACTA. Ponieważ nie interesowałem wcześniej się ani analizą nastawienia, ani API twittera ani hashtagami, stwierdziłem, że warto zobaczyć co w trawie ćwierka.

Tak się składa, że dzięki Jeffowi Gentry’emu API Twittera jest łatwo dostępne z poziomu R. Wystarczy załadować pakiet twitteR i kilka prostych funkcji pozwala na łatwą interakcję z ćwierkami z serwisu Twitter.com (ok, dalej będę używał tłumaczenia ,,wiadomościami”).

Zobaczmy prosty przykład.

> # interfejs do API twittera
> library(twitteR)
> # pobierz maksymalnie 1500 wiadomości zawierających etykietę #debataACTA
> # stworzonych 7 lutego 2012
> tweets = searchTwitter('#debataACTA', n=1500, until="2012-02-08", since="2012-02-06")
> # zamień wyniki na ramkę danych i wyświetl treść oraz autora pierwszej z wiadomości
> debataACTA =  twListToDF(tweets)
> debataACTA[1,c(1,4,10)]
                                                                                    text             created screenName
1 Mamy tyle Kultury i Edukacji ile na nia wydajemy 0,75% Budzetu #debataACTA #PremierRP 2012-02-07 15:37:46     TPHMAC

Ten pakiet ma te same ograniczenia co API, czyli 70 zapytań na minutę. Ale każde zapytanie to 25 wiadomości, a więc w sumie możemy ściągnąć do 1500 wiadomości na minutę.

Prostą pętlą, z pewną pomocą internetu, zebrałem wpisy z Twittera z okresu od 4 do 12 lutego 2012 zawierające etykietę #debataACTA. po oczyszczeniu zapisałem je w postaci pliku csv, który można pobrać z adresu tutaj.

Mamy więc dane, przyjrzyjmy się im. Do tematu analizy nastawienia podejdziemy w piątek, a dziś przyjrzyjmy się jak wyglądała aktywność ćwierkających. Na rysunku 1 można zobaczyć ile wpisów pojawiało się z tą etykietą. Temat jak widać skończył się z samą debatą. Na rysunku 2 można zobaczyć bliżej interesujący okres liczby wiadomości nadczas trwania debaty. Rzuca się w oczy szczególnie ta chwila ciszy przed burzą.

[Rysunek 1. Liczba wiadomości zawierających etykietę #debataACTA na godzinę. Kliknij by powiększyć.]

[Rysunek 2. Liczba wiadomości zawierających etykietę #debataACTA na 5 minut (debata rozpoczęła się po godzinie 14). Kliknij by powiększyć.]

Gdyby ktoś chciał sprawdzić o czym mówiono w której minucie to komentarze z znaczkami synchronizacyjnymi znaleźć można np. tutaj.

W sumie mamy ponad 6.5 tysiąca wiadomości. Zobaczmy kto je pisał. Zamiast wpisywać ksywy ćwierkających pokażę ilu z nich generuje odpowiedni procent wszystkich wiadomości.

[Rysunek 3. Na osi y przedstawiono liczbę wiadomości wygenerowanych przez X najaktywniejszych użytkowników. Okazuje się, że 7% piszących (dokładnie 72) generuje 50% wiadomości. A tylko 2% (dokładnie 21) generuje 25% wszystkich wiadomości. Kliknij by powiększyć.]

Ściągnęliśmy dane, zobaczyliśmy podstawowe podsumowania, czas zabrać się za analizę nastawienia. Więcej na ten temat w piątek (muszę ją jeszcze zrobić) a dzisiaj zakończę podsumowaniem z procentowym udziałem wiadomości zawierających ikonę buźki (;-), ;), :-), :))) itp).

[Rysunek 4. Procentowy udział wiadomości zawierających buźkę. Kliknij by powiększyć.]

Jak widać przez pierwsze dwie godziny debaty nie było ćwierkającym do śmiechu.