Który jesienny serialowy hit był najczęściej komentowany w 2017 roku? Jakie to były komentarze?
Dzisiaj, w ostatnim poście w tym roku, zajmiemy się polskimi serialami z jesiennej ramówki. Na warsztat weźmiemy trzy tytuły: Diagnozę od TVN, Belfra od Canal+ oraz Watahę od HBO. Zobaczymy jak wyglądała obsługa seriali na Facebooku i jakie towarzyszyły im komentarze.
Uwaga: post (lub informacje na wykresach) mogą zdradzać fabułę seriali!
Kod jest na tyle uniwersalny, że wystarczy podać inne nazwy fanpage’y w części wczytującej dane aby uzyskać podobną analizę dla innych facebookowych stron – na przykład dla partii politycznych.
Pobranie danych
Skorzystamy z pakietu Rfacebook
do pobrania danych. Skrypt nie jest długi, ale też niezbyt ciekawy jeśli chodzi o analizę – znajdziecie go w moim repo. To co się tam dzieje to pobranie po maksymalnie 2000 postów i komentarzy do nich z trzech fanpage’y: Diagnoza TVN, Belfer oraz Wataha, a następnie zapisanie danych do plików lokalnych (znajdziecie je również w repo).
W dalszym kroku wczytamy odpowiednie pakiety:
1 2 3 4 5 6 7 8 9 10 11 |
rm(list = ls()) library(tidyverse) library(lubridate) library(tidytext) library(forcats) # to niżej na potrzeby ładniejszych tabelek :) library(knitr) library(kableExtra) options(knitr.table.format = "html") |
oraz same dane:
1 2 |
fb_posts <- readRDS("fb_posts.RDS") fb_comments <- readRDS("fb_comments.RDS") |
Przed przystąpieniem do analizy złączymy sobie obie tabele (będzie taka suma potrzebna):
1 2 3 4 5 6 |
fb_data <- left_join(fb_comments, fb_posts %>% select(id, created_time), by = c("post_id" = "id")) %>% rename(post_created_time = created_time) %>% mutate(comment_created_time = ymd_hms(comment_created_time) %>% with_tz(tzone = "Europe/Warsaw")) %>% mutate(post_created_time = ymd_hms(post_created_time) %>% with_tz(tzone = "Europe/Warsaw")) |
Na początek zobaczmy jak wyglądała aktywność operatorów stron – ile postów było publikowanych w kolejnych dniach?
1 2 3 4 5 6 7 8 9 10 |
fb_posts %>% filter(year(created_time) == 2017) %>% mutate(day = date(created_time)) %>% count(from_name, day) %>% ggplot() + geom_point(aes(day, n, color = from_name), alpha = 0.5, show.legend = FALSE) + geom_smooth(aes(day, n, color = from_name), se = FALSE) + labs(title = "Liczba postów publikowanych na fanpage seriali,\ndzień po dniu", x = "Data", y = "Liczba postów", color = "") + theme(legend.position = "bottom") |
Widzimy, że najwięcej produkowała strona poświęcona serialowi TVNu. Wyraźnie widać kiedy miała miejsce emisja serialu (od 5 września do 28 listopada, we wtorki o 21:30).
Dla porządku – druga seria Watahy miała emisję od 15 października do 19 listopada (niedziele wieczorem), przy czym w HBO GO odcinki były dostępne o tydzień wcześniej (pierwszy weekend to 2 odcinki, w telewizorze – tylko jeden).
Drugi sezon Belfra emitowany zaś był przez Canal+ od 22 października do 10 grudnia.
Widać to na powyższym wykresie: szczyt Diagnozy i Watahy przypada na okres emisji, Belfer przyspieszył z liczbą postów zbliżając się do finału sezonu.
Zobaczmy czy terminy publikacji postów łączą się z momentami emisji?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fb_posts %>% filter(year(created_time) == 2017) %>% by(.$from_name, function(x) { x %>% count(created_weekday, created_hour) %>% ggplot() + geom_tile(aes(created_weekday, created_hour, fill = n), color = "gray50") + scale_y_continuous(breaks = seq(0, 23, 3), trans = "reverse") + scale_fill_distiller(palette = "RdYlGn") + labs(title = paste(unique(x$from_name), "- kiedy publikowane są posty?"), x = "Dzień tygodnia", y = "Godzina", fill = "Liczba postów") + theme(legend.position = "bottom") } ) |
Oczywiście, że tak. Belfer i Wataha to niedziele wieczorem, Diagnoza to wtorkowe wieczory.
Ciekawostkę widać w postach Watahy – sporo postów zostało opublikowanych w poniedziałki. Te posty to live-chat z aktorami lub podgrzewanie atmosfery pytaniami jak Wam się podobało?:
1 2 3 4 5 6 |
fb_posts %>% filter(year(created_time) == 2017, from_name=="Wataha", created_weekday == "Pn") %>% select(created_time, type, message) %>% arrange(created_time) %>% kable() %>% kable_styling(bootstrap_options =c("striped", "hover", "condensed"), full_width = F) |
Data postu | Typ postu | Treść postu |
---|---|---|
2017-08-07 18:00:00 | video | Wataha powraca w #MagiczneBieszczady w zimowej odsłonie. 15 października tylko w HBO i online w HBO GO. |
2017-08-21 17:00:00 | video | #MagiczneBieszczady zimą są jeszcze bardziej tajemnicze i niedostępne. Będą wyzwaniem czy raczej sprzymierzeńcem dla ukrywającego się w nich Rebrowa? Wataha powraca 15 października, tylko w HBO i HBO GO. |
2017-09-11 13:16:37 | video | Będziemy w śniegu po kolana, po pas, po szyję – obiecuje Leszek Lichota w nowym materiale z planu drugiego sezonu serialu Wataha. Zobacz przepiękne zimowe Bieszczady już 15 października w HBO i HBO GO. |
2017-09-25 13:55:36 | photo | Tak pięknie napisali o drugim sezonie Watahy Kaja i Janusz z Jakbyniepaczec v 2.0. – bardzo nam miło, dziękujemy :-* I nie możemy doczekać się Waszej opinii, opinii naszych Widzów :) Premiera już za 3 tygodnie! |
2017-09-25 18:30:01 | video | “Oficjalnie różnica między Polską a Ukrainą to godzina. Tak naprawdę to 25 lat.” Poznajcie wrażenia ekipy serialu ze zdjęć za naszą wschodnią granicą. http://www.hbo.pl/wataha/ |
2017-10-02 11:18:54 | video | Najchętniej oglądany serial HBO powraca. |
2017-10-02 18:00:00 | link | Znów nas chwalą :) Tym razem Antyweb bardzo wysoko ocenił nowy sezon Watahy – niezmiernie nam miło, bardzo dziękujemy! A na premierę sezonu zapraszamy już za 2 tygodnie :) |
2017-10-09 10:04:20 | video | Odkodowany weekend w HBO! Zobacz premierę Watahy i wiele innych filmów i seriali. |
2017-10-09 14:06:30 | video | Wataha, sezon 2 – już za 6 dni w HBO i HBO GO. |
2017-10-09 18:30:00 | link | “Podczas zdjęć próbnych z Leszkiem porwałam mu koszulę, a on prawie złamał mi nogę” – czyli jak zaczęła się przygoda Anny Donchenko z serialem Wataha. |
2017-10-16 14:42:27 | photo | NA |
2017-10-16 16:15:00 | photo | Belfer + Wataha = <3 Dzięki za gratulacje CANAL+ Polska Trzymamy kciuki za premierę Belfra! |
2017-10-16 20:02:19 | video | Zapraszamy na Live Chat z Agą i Markowskim! |
2017-10-23 15:57:32 | video | Grzywa żyje! Zobacz ciąg dalszy jego konfrontacji z Rebrowem. Bartłomiej Topa zaprasza na odc. 3 już teraz online w HBO GO. http://www.hbo.pl/wataha/ |
2017-10-23 16:22:11 | photo | NA |
2017-10-23 20:05:57 | video | Dołączcie do Live Chatu z Łuczakiem, Świtalskim i reżyserką Kasią Adamik. |
2017-10-30 10:00:00 | video | Leszek Lichota jeszcze na planie serialu powiedział “W drugim sezonie będzie na pewno więcej akcji, niż było w pierwszym”. Zgadzacie się? :) |
2017-11-06 14:19:34 | photo | To już dziś! :) |
2017-11-06 20:18:09 | video | Anita Jancia-Prokopowicz & Jan P. Matuszynski są z nami. |
2017-11-13 14:13:11 | photo | Mamy pytanie do wszystkich, którzy widzieli już cały drugi sezon Watahy: jak wam się podobało? Co było największym zaskoczeniem, a co przewidzieliście już wcześniej? Jakie alternatywne zakończenia obstawialiście? Czekamy na wasze komentarze :) UWAGA: BĘDĄ SPOILERY!!! ;) |
2017-11-13 20:09:03 | video | Rebrow, Dobosz, Zięba i Boczarska już tu są! |
2017-11-20 16:16:57 | photo | A kto by nie chciał?<8a> |
Swoją drogą – okrągłe godziny publikacji wskazują na planowanie postów ;) Na fanpage’u Dane i Analizy też planuję posty, ale godziny są losowe.
A czy w komentarzach widać odzwierciedlenie terminu emisji?
1 2 3 4 5 6 7 8 9 10 11 |
fb_data %>% filter(year(post_created_time) == 2017) %>% mutate(day = date(comment_created_time)) %>% count(post_from_name, day) %>% ggplot() + geom_point(aes(day, n, color = post_from_name), alpha = 0.5, show.legend = FALSE) + geom_smooth(aes(day, n, color = post_from_name), se = FALSE) + scale_y_log10() + labs(title = "Liczba komentarzy publikowanych na fanpage seriali,\ndzień po dniu", x = "Data", y = "Liczba komentarzy (skala logarytmiczna)", color = "") + theme(legend.position = "bottom") |
Widać :) Ciekawostką jest aktywność komentujących Watahę wiosną – czyżby zapowiedzi serialu? Jeśli przejrzymy dane to właśnie to widać:
1 2 3 4 5 6 |
fb_posts %>% filter(year(created_time) == 2017, from_name=="Wataha", month(created_time) >= 4, month(created_time) <= 7) %>% select(created_time, message) %>% arrange(created_time) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F) |
Data postu | Treść postu |
---|---|
2017-04-15 18:00:00 | Wataha wraca jesienią. Zobacz pierwszy zwiastun! |
2017-06-01 21:35:32 | Aleksandra Popławska i Leszek Lichota opowiedzą o nadchodzącym sezonie Watahy na Warsaw Comic Con. Możecie ich spotkać już w sobotę o 13.00. Będą niespodzianki ;) |
2017-06-02 10:28:21 | W strefie HBO na Warsaw Comic Con znajdziecie serialowe auto Watahy :) A już jutro spotkanie z Aleksandrą Popławską i Leszkiem Lichotą! |
2017-06-03 15:00:00 | Ucieczka nigdy się nie kończy. Wataha, sezon 2, jesień 2017. Tylko w HBO i HBO GO. |
2017-06-04 11:25:26 | Z dzikich Bieszczad na Żelazny Tron! Aleksandra Popławska, Leszek Lichota oraz producenci serialu spotkali się wczoraj z fanami na Warsaw Comic Con. |
2017-07-12 14:21:28 | Leszek Lichota (Wiktor Rebrow) zdradza kilka informacji o nowym sezonie Watahy! |
2017-07-28 13:25:36 | Najchętniej oglądany serial HBO powraca. Wataha, sezon 2 – premiera 15 października tylko w HBO i online w HBO GO. |
Sprawdźmy czy w czasie trwania sezonu zmieniała się aktywność (rozumiana jako liczba komentarzy na post) widzów?
1 2 3 4 5 6 7 8 9 10 11 12 |
fb_posts %>% filter(year(created_time) == 2017, month(created_time) >= 9) %>% mutate(day = date(created_time)) %>% group_by(from_name, day) %>% summarise(p = sum(comments_count)/n()) %>% ungroup() %>% ggplot() + geom_point(aes(day, p, color = from_name), alpha = 0.5, show.legend = FALSE) + geom_smooth(aes(day, p, color = from_name), se = FALSE) + labs(title = "Liczba komentarzy/post publikowanych na fanpage seriali,\ndzień po dniu", x = "Data", y = "Liczba komentarzy/post", color = "") + theme(legend.position = "bottom") |
Nie widać znaczącej zmiany dla seriali TVNu i Canal+, ale Wataha zanotowała spory wzrost – czyżby zakończenie wywołało takie dyskusje?
1 2 3 4 5 6 7 8 9 10 11 12 |
fb_posts %>% filter(year(created_time) == 2017, month(created_time) >= 11, from_name == "Wataha") %>% mutate(day = date(created_time)) %>% group_by(day) %>% mutate(p = sum(comments_count)/n()) %>% ungroup() %>% select(day, message, p) %>% arrange(day) %>% # kolorowanie kolumny p mutate(p = cell_spec(p, "html", color = ifelse(p > 200, "red", "black"))) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F) |
Data postu | Treść postu | Wskaźnik p |
---|---|---|
2017-11-01 | Kobieca twarz Watahy, Aleksandra Popławska opowiada o swojej roli w serialu i o tym, jak zmieniła się jej postać w stosunku do pierwszego sezonu. | 17 |
2017-11-05 | Sytuacja się zagęszcza, czy odcinek 5 przyniesie odpowiedzi na coraz więcej pojawiających się pytań? | 224 |
2017-11-06 | Anita Jancia-Prokopowicz & Jan P. Matuszynski są z nami. | 5 |
2017-11-06 | To już dziś! :) | 5 |
2017-11-08 | Takie BHP ;) Finałowy odcinek Watahy już w niedzielę w HBO GO! http://www.hbo.pl/wataha/ | 164 |
2017-11-11 | NA | 54 |
2017-11-12 | Kto stoi za morderstwami w Bieszczadach? Zobacz już teraz finałowy odcinek Watahy! Cały sezon online w HBO GO. | 395.5 |
2017-11-12 | Dziś o 20:10 w HBO premiera 5 odcinka nowego sezonu Watahy, a niecierpliwi już teraz w HBO GO mogą oglądać cały sezon serialu. hbogo.pl/redirect/-93620 | 395.5 |
2017-11-13 | Rebrow, Dobosz, Zięba i Boczarska już tu są! | 367.5 |
2017-11-13 | Mamy pytanie do wszystkich, którzy widzieli już cały drugi sezon Watahy: jak wam się podobało? Co było największym zaskoczeniem, a co przewidzieliście już wcześniej? Jakie alternatywne zakończenia obstawialiście? Czekamy na wasze komentarze :) UWAGA: BĘDĄ SPOILERY!!! ;) | 367.5 |
2017-11-19 | Finałowy odcinek Watahy już za chwilę w HBO, cały sezon dostępny w HBO GO. | 174 |
2017-11-20 | A kto by nie chciał?<8a> | 63 |
2017-11-22 | Złotousty Łuczak, będziecie za nim tęsknić? ;) Cały drugi sezon Watahy w HBO GO! | 296 |
2017-11-24 | NA | 31.5 |
2017-11-24 | Jeśli ktoś jeszcze nie widział 2 sezonu Watahy, ta recenzja Krzysztofa Połaskiego z Telemagazyn.pl będzie istotnym argumentem za obejrzeniem serialu :) | 31.5 |
Moje przypuszczenia wydają się być prawdziwe. Co ciekawe – po zakończeniu emisji HBO zaprzestało komunikacji z fanami (ostatni post jest z 24.11), zupełnie inaczej niż TVN i Canal+.
Zobaczmy w którym dniu tygodnia i o jakiej godzinie pojawiają się komentarze – czy ma to związek z emisją? Czy popularne jest oglądanie serialu z jednoczesnym komentowaniem go na Facebooku?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
fb_data %>% mutate(comment_created_hour = hour(comment_created_time), comment_created_weekday = wday(comment_created_time, label = TRUE) %>% factor(levels = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), labels = c("Pn", "Wt", "Śr", "Cz", "Pt", "Sb", "Nd"))) %>% by(.$post_from_name, function(x) { x %>% count(comment_created_weekday, comment_created_hour) %>% ungroup() %>% ggplot() + geom_tile(aes(comment_created_weekday, comment_created_hour, fill = n), color = "gray50", show.legend = FALSE) + scale_fill_distiller(palette = "RdYlGn") + scale_y_reverse() + labs(title = paste(unique(x$post_from_name), "- kiedy pojawiają się komentarze?"), x = "", y = "Godzina") } ) |
Sprawdza się idealnie, a w przypadku Watahy mamy dodatkowo sporą aktywność w poniedziałki (to już rozszyfrowaliśmy wyżej).
Sprawdźmy jak szybko pojawiaja sie komentarze?
1 2 3 4 5 6 7 8 9 10 11 |
fb_data %>% mutate(delta_time = as.numeric(comment_created_time - post_created_time)/3600) %>% filter(delta_time > 0) %>% ggplot() + geom_density(aes(delta_time, fill = post_from_name), alpha = 0.5) + scale_x_continuous(breaks = c(1/60, 5/60, 1/4, 1/2, 1, 2, 3, 6, 12, 24, 2*24, 5*24, 10*24, 30*24), labels = c("1m", "5m", "15m", "30m", "1h", "2h", "3h", "6h", "12h", "1d", "2d", "5d", "10d", "30d"), trans = "log10") + labs(title = "Czas jaki mija od publikacji posta do publikacji komentarza", x = "", y = "Gestość prawdopodobieństwa", fill = "Fanpage") + theme(legend.position = "bottom") |
Największy pik jest dla wszystkich seriali w okolicach 6-12 godzin od publikacji postu. Czyżby dyskusje od rana, następnego dnia po emisji?
Ciekawe są komcie w Belfrze zostawione po miesiącu od emisji – zobaczmy te posty, dla których średnia czasu reakcji użytkowników była największa:
1 2 3 4 5 6 7 8 9 10 11 12 |
fb_data %>% mutate(delta_time = as.numeric(comment_created_time - post_created_time)/3600) %>% filter(post_from_name == "Belfer") %>% group_by(post_id, post_created_time) %>% summarize(m_delta_time = round(mean(delta_time)/24)) %>% ungroup() %>% top_n(10, m_delta_time) %>% left_join(fb_posts %>% select(id, message), by = c("post_id"="id")) %>% select(-post_id) %>% arrange(desc(m_delta_time)) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F) |
Data postu | Średnia liczba godzin od publikacji postu do publikacji komentarza | Treść postu |
---|---|---|
2016-03-12 04:09:03 | 188 | Odliczamy! https://www.youtube.com/watch?v=QJBo2ZAtWBA |
2016-03-12 04:10:51 | 187 | NA |
2016-03-12 04:16:11 | 180 | NA |
2016-07-29 20:00:00 | 62 | Czy wiesz, że: • aktorzy do ostatniego odcinka nie wiedzieli, kto popełnił morderstwo • serial prawie w całości nakręcony jest ze steadicamu (system stabilizacji kamery, mechanicznie izolujący ruch kamery od operatora. Pozwala uzyskać bardzo płynne ujęcia, nawet, gdy operator porusza się szybko po nierównym podłożu) • zdjęcia trwały blisko 100 dni i kręcone były równolegle przez dwie ekipy, m.in. w Chełmnie, Chełmży, Kwidzynie i Warszawie |
2016-07-30 15:11:20 | 49 | Przed Wami drugi teaser! |
2017-03-20 11:30:01 | 29 | Kilka zdjęć ze spotkania twórców z fanami serialu, przy okazji premiery “Belfra” na DVD. |
2016-09-02 20:17:43 | 19 | Czy wiesz, że: • serial składa się z 10 odcinków, z których każdy trwa ok. 55 minut • CANAL+ rozpoczął już prace nad drugim sezonem serialu „Belfer”. Scenariusz piszą Monika Powalisz, Jakub Żulczyk i Bartek Ignaciuk, pod kierunkiem Wojciecha Bockenheima |
2016-10-30 23:31:47 | 15 | Kto według Ciebie zabił Asię? |
2016-11-09 16:55:36 | 13 | “- Co było dla pana najtrudniejsze w pracy nad „Belfrem”?
|
2017-02-21 18:37:12 | 11 | Zapraszamy do śledzenia naszego profilu na Insta! :) https://www.instagram.com/belfer.serial/ |
Post, który żył najdłużej
1 2 3 4 5 6 7 8 9 10 11 12 |
fb_data %>% mutate(delta_time = as.numeric(comment_created_time - post_created_time)/3600) %>% filter(post_from_name == "Belfer") %>% group_by(post_id, post_created_time) %>% summarize(m_delta_time = mean(delta_time)) %>% ungroup() %>% top_n(1, m_delta_time) %>% select(post_id) %>% left_join(fb_data, by = "post_id") %>% select(post_created_time, comment_created_time, comment_message) %>% kable() %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = F) |
Data postu | Data komentarza | Treść komentarza |
---|---|---|
2016-03-12 04:09:03 | 2016-06-29 15:22:09 | Coś więcej o obsadzie? Koo zagra Magdalena Cielecka? :) |
2016-03-12 04:09:03 | 2016-12-02 22:11:53 | The 1st post of The Belfer xd |
…został pewnie gdzieś odkopany. Ma tylko dwa komentarze – jeden ponad 3 miesiące po publikacji, drugi – prawie 9 miesięcy. Stąd wysoka średnia.
Przeanalizujmy treść – rozkład czasów jest ciekawy, ale dość przewidywalny:
- posty pojawiają się wtedy, kiedy odcinek jest w telewizorze
- ludzie reagują online na wydarzenia odcinków
- często też dyskutują następnego dnia po emisji, od rana
1 2 3 4 5 6 7 8 9 10 11 12 |
# słowniki pl_stop_words <- read_lines("../!polimorfologik/polish_stopwords.txt") # to smieci pl_stop_words <- c(pl_stop_words, "canal", "http", "https", "www.hbo.pl", "hbo", "diagnoza.tvn.pl", "html", "youtu.be", "bit.ly", "www.wirtualnemedia.pl", "magicznebieszczady") # słowa które powtarzają się bardzo często w komentarzach, a niewiele wnoszą seriale_slownik <- c("czekam", "doczekać", "serial", "odcinek", "mogę", "sezon", "już", "się", "pozdrawiam", "czekamy", "super", "sie", "serialem", "serialu", "premiera", "juz", "odcinka", "oglądam", "odcinki", "sezonu", "sezonie", "najlepszy", "gratulacje", "obejrzeć", "obejrzec", "niecierpliwością", "odcinków", "oglądać", "odcinku", "czekać", "serii", "seria", "seriali", "the", "best") |
Podzielmy posty na poszczególne słowa:
1 2 3 4 5 6 7 8 |
fb_posts_messages <- fb_posts %>% select(from_name, message) %>% unnest_tokens(word, message, token = "words", drop = FALSE) %>% select(-message) %>% filter(!is.na(word)) %>% filter(!word %in% pl_stop_words) %>% filter(is.na(as.numeric(word))) %>% filter(nchar(word) > 2) |
i sprawdźmy jakie były najpopularniejsze na każdym z fanpage’y:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fb_posts_messages %>% count(from_name, word) %>% ungroup() %>% group_by(from_name) %>% top_n(20, n) %>% ungroup() %>% arrange(desc(word)) %>% mutate(word = fct_inorder(word)) %>% ggplot() + geom_tile(aes(from_name, word, fill = n), color = "gray50", show.legend = FALSE) + scale_fill_distiller(palette = "RdYlGn") + labs(title = "Najpopularniejsze słowa w postach", x = "", y = "") |
Tutaj nie ma zaskoczenia – każdy z seriali ma swoje unikatowe słowa (głównie związane z imionami bohaterów lub aktorami grającymi w serialu). Wataha i Belfer zapraszają na premierę nowego odcinka serialu w drugim sezonie, Diagnoza zachęca do komentowania pytając o wrażenia. Kolory są wynikiem sumowania liczby wystąpień poszczególnych słów, lepszy obraz dałoby liczenie wartości względnych (na przykład dzieląc liczbę wystąpień słowa przez liczbę wszystkich postów).
Zróbmy to samo z komentarzami. Rozbijamy je na pojedyncze słowa:
1 2 3 4 5 6 7 8 9 |
fb_comments_messages <- fb_comments %>% select(post_from_name, post_id, comment_message) %>% unnest_tokens(word, comment_message, token = "words", drop = FALSE) %>% select(-comment_message) %>% filter(!is.na(word)) %>% filter(!word %in% pl_stop_words) %>% filter(is.na(as.numeric(word))) %>% filter(nchar(word) > 2) %>% filter(!word %in% seriale_slownik) |
i sprawdzamy, które są najpopularniejsze:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fb_comments_messages %>% count(post_from_name, word) %>% ungroup() %>% group_by(post_from_name) %>% top_n(20, n) %>% ungroup() %>% arrange(desc(word)) %>% mutate(word = fct_inorder(word)) %>% ggplot() + geom_tile(aes(post_from_name, word, fill = n), color = "gray50") + scale_fill_distiller(palette = "RdYlGn") + labs(title = "Najpopularniejsze słowa w komentarzach", x = "", y = "") |
Mamy żal, że to koniec (szkoda), pochwałę serialu lub odcinka (świetny, mega) i oczekiwanie na kolejny. Plus standardowy zestaw związany z treścią.
Przeanalizujmy te same dane w nieco innym ujęciu. Przygotujemy dla każdego słowa wskaźnik mówiący jak bardzo dane słowo jest popularne w komentarzach. Niech będzie to średnia wartość z iloczynu popularności słowa (jak często wystąpiło we wszystkich komentarzach na fanpage’u) i popularności przy danym poście. Tym razem rozdzielmy to dodatkowo na poszczególne seriale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
fb_comments_messages %>% # ile różnych słóW występuje przy komentarzach do konkretnego posta? group_by(post_id) %>% mutate(n_words_in_posts = n()) %>% ungroup() %>% # ile jest różnych słów w komciach dla danej strony? group_by(post_from_name, word) %>% mutate(n_times_word = n()) %>% ungroup() %>% # p = popularność słowa na stronie / ile słów przy komciu mutate(p = n_times_word/n_words_in_posts) %>% # średnia wartość p dla strony i słowa group_by(post_from_name, word) %>% summarise(p = mean(p)) %>% ungroup() %>% by(.$post_from_name, function(x) { x %>% top_n(20, p) %>% arrange(p) %>% mutate(word = fct_inorder(word)) %>% ggplot() + geom_col(aes(word, p), fill = "lightgreen", color = "gray50") + coord_flip() + labs(title = paste(unique(x$post_from_name), "- najpopularniejsze słowa w komentarzach"), x = "", y = "") } ) |
Widać, że głównie grają tutaj słowa związane z treścią. W Belfrze& widzom brakowało w drugim sezonie Kusia (postać z pierwszego sezonu), porównywany jest sezon pierwszy z drugim. Bigramy (pary słów występujące obok siebie) dadzą lepszy obraz.
Podzielmy więc komentarze na bigramy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fb_comments_messages_bigrams <- fb_comments %>% select(post_from_name, comment_message) %>% unnest_tokens(word, comment_message, token = "ngrams", n = 2, drop = FALSE) %>% select(-comment_message) %>% separate(word, c("word1", "word2"), sep = " ") %>% filter(!word1 %in% pl_stop_words) %>% filter(!word1 %in% seriale_slownik) %>% filter(is.na(as.numeric(word1))) %>% filter(nchar(word1) > 2) %>% filter(!word2 %in% pl_stop_words) %>% filter(!word2 %in% seriale_slownik) %>% filter(is.na(as.numeric(word2))) %>% filter(nchar(word2) > 2) %>% mutate(word = paste(word1, word2, sep = " ")) %>% select(-word1, -word2) |
Najpopularniejsze bigramy w komentarzach dla wszystkich seriali razem to:
1 2 3 4 5 6 7 8 9 10 |
fb_comments_messages_bigrams %>% count(post_from_name, word) %>% ungroup() %>% top_n(40, n) %>% arrange(n) %>% mutate(word = fct_inorder(word)) %>% ggplot() + geom_tile(aes(post_from_name, word, fill = n), color = "gray50") + scale_fill_distiller(palette = "RdYlGn") + labs(title = "Najpopularniejsze bigramy w komentarzach", x = "", y = "") |
Oczywiście aktorzy i bohaterowie, pochwała gry aktorskiej.
Najpopularniejsze bigramy w komentarzach w podziale na seriale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fb_comments_messages_bigrams %>% count(post_from_name, word) %>% ungroup() %>% by(.$post_from_name, function(x) { x %>% top_n(40, n) %>% arrange(n) %>% mutate(word = fct_inorder(word)) %>% ggplot() + geom_col(aes(word, n), fill = "lightgreen", color = "gray50") + coord_flip() + labs(title = paste(unique(x$post_from_name), "- najpopularniejsze bigramy w komentarzach"), x = "", y = "") } ) |
Belfer: najpopularniejszy jest Partyk Pniewski (aktor grający w serialu). Widzowie widzą nawiązania do Twin Peaks (ale to chyba raczej w pierwszym sezonie niż w drugim). Narzekają na zbyt oczywiste słabe zakończenie (czy scenarzyści trzeciego sezonu to czytają?). Pojawia się Sebastian Fabijański (który w pierwszym sezonie grał Adriana Kusia). Z jednej strony to dobra robota, a z drugiej – szkoda czasu.
Diagnoza: tutaj gwiazdą jest grająca główną bohaterkę Maja Ostaszewska. Nie wiem dlaczego pojawia się tytuł innego serialu TVN – Druga szansa (sprawdziłem, Ostaszewska gra tam), ale po zerknięciu w treść komentarzy widać obawy, aby Diagnoza nie okazała się tak nudna jak Druga szansa (albo wręcz przeciwnie – żeby właśnie taka była, bo to mój ulubiony serial). W komentarzach widać sugestie, że to Artman popełnił błąd lekarski i wrobił Annę Leśniewską. Co ciekawe – nie pojawia się w pierwszej 40 Maciej Zakościelny.
Wataha: tutaj głównie zachwyty nad grą aktorską. Niesamowite na swój sposób.
Które określenia występują przy wszystkich serialach?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fb_comments_messages_bigrams %>% count(post_from_name, word) %>% ungroup() %>% spread(post_from_name, n) %>% na.omit() %>% mutate(s = Belfer + `Diagnoza TVN` + Wataha) %>% top_n(30, s) %>% arrange(s) %>% mutate(word = fct_inorder(word)) %>% select(-s) %>% gather(key, val, -word) %>% ggplot() + geom_tile(aes(key, word, fill = val), color = "gray50") + scale_fill_distiller(palette = "RdYlGn") + labs(title = "Najpopularniejsze bigramy w komentarzach\nwystępujace na wszystkich stronach", x = "", y = "") |
Na koniec zobaczmy czy są osoby komentujące wszystkie trzy seriale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
fb_data %>% count(post_from_name, comments_from_name, sort = TRUE) %>% ungroup() %>% spread(post_from_name, n) %>% rowwise() %>% mutate(comm_sum = sum(Belfer, `Diagnoza TVN`, Wataha)) %>% ungroup() %>% filter(!is.na(comm_sum)) %>% arrange(comm_sum) %>% mutate(comments_from_name = fct_inorder(comments_from_name)) %>% select(-comm_sum) %>% gather(serial, val, -comments_from_name) %>% ggplot() + geom_tile(aes(serial, comments_from_name, fill = val), color = "gray50", show.legend = FALSE) + scale_fill_distiller(palette = "RdYlGn") + labs(title = "Komentujący wszystkie seriale", x = "", y = "") |
Oczywiście że tak. Lista ułożona jest od największej sumy napisanych komentarzy – pani Agnieszka Aga napisała ich łącznie najwięcej, widać że wolała dyskusję związane z Diagnozą. Lucy Raźniak wybrała Belfra.
Jakie z tego wszystkiego płyną wnioski?
- Stacje telewizyjne starają się prowokować dyskusje podczas emisji kolejnych odcinków seriali. To już naturalne, że oglądamy telewizję z komórką w ręku i na bieżąco komentujemy to co widać na ekranie (ciekawe byłoby dodanie do danych z Facebooka danych z Twittera)
- Posty publikowane są głównie w chwili emisji serialu, ale też (robiło to HBO) jakiś czas po – takie podsumowanie odcinków, rozmowy z aktorami, zachęty (trailer, teaser) kolejnego odcinka
- W trakcie sezonu zaangażowanie użytkowników (liczba komentarzy do postów) jest mniej więcej stałe
- W dwóch przypadkach mamy prowadzenie fanpage po zakończeniu emisji (nie wiem dlaczego HBO tego nie robi z Watahą) – czyżby podprowadzenie pod kolejny sezon? Wiadomo już, że na wiosnę wróci Diagnoza, nie bardzo wiadomo co będzie z Belfrem
- Posty żyją do 12 godzin od publikacji. Kiedy emisja jest wieczorem rozmowy w komentarzach trwają jeszcze rano kolejnego dnia
- Treść postów jak i komentarzy jest skupiona głównie na bohaterach i aktorach odgrywających role w serialu. Co ciekawe – mało jest słów krytycznych, przeważają pochlebne słowa. A pewnie jest tak, że jak się komuś nie podoba serial to nie udziela się po prostu w dyskusji? Co innego mogłoby wystąpić w przypadku fanpage serwisów informacyjnych lub partii politycznych
- Jeśli miałbym pisać serial kręcony z tygodnia na tydzień – bardzo dokładnie analizowałbym opinie pojawiające się w social mediach. Szczególnie w przypadku seriali z zagadką – z komentarzy można dowiedzieć się o tropach jakimi podążają widzowie i… je odpowiednio mylić ;-)
- Oczywiście są osoby, które oglądają i komentują wszystkie seriale
- Mając informacje o tym kto komentuje można zbudować profil widza, ale to już temat na oddzielną zabawę.