Aleksandra Dulkiewicz jest znana z autopromocji, do której wykorzystuje także Twittera. Ocenimy kiedy kwituje i z jakim natężeniem
library(ggplot2)
library(dplyr)
library("timeDate")
every_nth = function(n) {
return(function(x) {x[c(TRUE, rep(FALSE, n - 1))]})
}
Z danych zostały pobrane za pomocą API/Twittera zapisano w postaci pliku CSV informacje na temat dnia/godziny/dnia tygodnia wysłania twita:
t <- read.csv("dulkiewicz_times.csv", sep = ';', header=T, na.string="NA");
str(t)
## 'data.frame': 2452 obs. of 4 variables:
## $ yymmdd: Factor w/ 656 levels "2019-03-11","2019-03-12",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ dow : Factor w/ 7 levels "Fri","Mon","Sat",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ hh : int 11 12 12 12 12 12 12 12 12 12 ...
## $ mmss : Factor w/ 1800 levels "00:01","00:03",..: 1471 638 652 665 725 737 751 770 851 857 ...
Sobota/Niedziela są jawnie zaznaczone w danych; do tego dochodzą polskie dni świąteczne:
## Polskie dni świąteczne
pds <- c('01-01', '01-06', '05-01', '05-03', '08-15', '11-01',
'11-11', '12-25', '12-26')
Jeżeli chodzi o święta ruchome to de-facto jest takowe dwa: poniedziałek wielkanocny oraz Boże Ciało (60 dni po wielkanocy), ponieważ wielkanoc jest zawsze w niedzielę podobnie jak Zielone Świątki (49 dni po wielkanocy.)
Obliczamy wszystkie poniedziałki i bożeciała. W tym celu ustalamy numer pierwszego/ostatniego roku a następnie dla każdego roku obliczamy datę wielkanocy. Do tej daty dodajemy odpowiednio jeden i 60:
## święta ruchome
## Święta ruchome: lany Poniedziałek + BC
## inne ruchome są w niedzielę
firstyear <- substr(first(as.character(t$yymmdd)),1,4)
lastyear <- substr(last(as.character(t$yymmdd)),1,4)
wetMondays <- c()
for (year in as.numeric(firstyear): as.numeric(lastyear)) {
##print(paste("The year is", year))
wm <- as.Date(Easter(year)) +1
bc <- as.Date(Easter(year)) +60
wetMondays <- append(wetMondays, c(wm, bc))
}
Liczymy także numer tygodnia w roku
## week of year
t <- t %>% mutate ( yw = as.numeric(strftime(yymmdd, format="%V")),
mmdd = substr(as.character(yymmdd),6,10))
Zmnienna hday
jest równa H
dla dnia świątecznego; w przypadku przeciwnym zawiera napis pusty:
## hday - if holiday 'H', empty otherwise
t <- t %>% mutate ( hday = ifelse(dow == 'Sat' | dow == 'Sun' |
mmdd %in% pds | yymmdd %in% as.character(wetMondays), "H", ""))
Teraz możemy ustalić ile twitów było napisanych i kiedy.
##twitów ogółem
firstday <- first(t$yymmdd)
lastday <- last(t$yymmdd)
##days <- as.Date(lastday) ##- as.Date(firstday, "%d-%M-%Y")
#days <- as.numeric(as.POSIXct(lastday)-as.POSIXct(firstday))
# albo
days <- t %>% select(yymmdd) %>% distinct()
Liczmy tylko dni twitowania, takie w których nie było twitów nie występują w bazie.
Pierwszy twit w bazie jest datowany na 2019-03-11 ostatni zaś na 2021-02-20 (baza obejmuje 656 dni.)
## dni świąteczne
daysh <- t %>% filter(hday =='H') %>% select(yymmdd) %>% distinct()
daysw <- nrow(days) - nrow(daysh)
days_h <- nrow(daysh)
total <- nrow(t)
## twitów w dni świąteczne
total_h <- nrow(t %>% filter(hday =='H'))
## twity w dni pracy
t0 <- t %>% filter ( hday != 'H')
total0 <- nrow(t0)
Dni świątecznych jest 191; dni pracujących 465. Twitów w dni świąteczne 629 zaś w dni pracujące 1823. Z tego by wynikało, że w dni pracujące opublikowano 74.35%.
Rozkład godzinowy twitów przedstawiono na histogramie. Najwięcj w godzinach pracy:
p0 <- ggplot(t0, aes(x = hh)) + geom_histogram(binwidth = 1, fill=default_cyan) +
ylab("liczba tweetów") +
xlab("godzina") +
ggtitle(sprintf("Rozkład godzinowy twitowania p. Dulkiewicz* (%s--%s)",
firstday, lastday),
subtitle=sprintf("*w dniach pracy | %i tweetów w %i dni | średnio %.1f/dzień",
total0, daysw, total0/daysw )) +
scale_x_continuous(breaks=seq(0, 23, by=1)) +
scale_y_continuous(breaks=seq(0, 140, by=10)) +
#coord_cartesian(ylim = c(0, 30), xlim=c(0, 23))
coord_cartesian(xlim=c(0, 23))
p1 <- t %>% filter ( hday == 'H') %>%
ggplot(aes(x = hh)) + geom_histogram(binwidth = 1, fill=default_cyan) +
ylab("liczba tweetów") +
xlab("godzina") +
ggtitle(sprintf("Rozkład godzinowy twitowania p. Dulkiewicz* (%s--%s)",
firstday, lastday),
subtitle=sprintf("*w dniach wolnych od pracy | %i tweetów w %i dni | średnio %.1f/dzień",
total_h, days_h, total_h/days_h )) +
scale_x_continuous(breaks=seq(0, 23, by=1)) +
scale_y_continuous(breaks=seq(0, 140, by=10)) +
#coord_cartesian(ylim = c(0, 30), xlim=c(0, 23))
coord_cartesian(xlim=c(0, 23))
p0
p1
Wynikało by z powyższego, że Twitter jest wykorzystywany mocno oszczędnie do autopromocji przez A. Dulkiewicz.
Dane tygodniowe (dni pracy i świąteczne):
p3 <- t %>% mutate ( yr = substr(as.character(t$yymmdd),1,4)) %>%
mutate (yrww = sprintf ("%s/%i", yr, yw)) %>%
group_by(yrww) %>% summarise(tt=n()) %>%
ggplot(aes(x = yrww)) +
geom_bar(aes(y = tt ), stat="identity", alpha=.5, fill=default_cyan ) +
xlab(label="rok/tydzień") +
ylab(label="liczba twitów") +
scale_x_discrete( breaks = every_nth(n = 10)) +
ggtitle(sprintf("Twity A Dulkiewicz tygodniowo (%s--%s)",
firstday, lastday))
##
##theme(axis.text = element_text(size = 4)) +
##theme(plot.title = element_text(hjust = 0.5)) +
p3