# potrzebne biblioteki library(tidyverse) library(lubridate) # nazwy miesiecy po polsku Sys.setlocale("LC_TIME", 'pl_PL.UTF-8') # wczytujemy dane articles <- read.csv("data.csv", stringsAsFactors = F, encoding = "UTF-8") # pozostawiamy jedynie trzy pierwsze kolumny, zmieniamy im nazwy articles <- articles %>% subset(select=(1:3)) names(articles) <- c("page", "date", "views") # poprawiamy typy wczytanych kolumn articles$date <- ymd( articles$date) articles$views <- iconv(articles$views, "latin1", "ASCII", sub="") articles$views <- as.integer(articles$views) # czyszczenie danych - usuwamy niepotrzebna koncowke tytulu articles$page <- str_replace(articles$page, " – Informatyk Zakładowy$","") # czyszczenie danych - usuwamy odslony strony glownej articles <- articles %>% filter(page != "Informatyk Zakładowy -") # sumowanie artykulow wg strony i daty (po poprawkach moglismy miec zdublowane wiersze) articles <- articles %>% group_by(page, date) %>% summarise(views=sum(views)) %>% mutate(sumviews=sum(views)) %>% arrange(desc(views)) %>% ungroup() # tutaj mamy juz dane potrzebne do zrobienia wykresu, articles %>% filter(page == "Więcej, niż chcieliście wiedzieć o QR-kodach") %>% ggplot(aes(x=date, y=views)) + geom_line() articles %>% filter(page == "Więcej, niż chcieliście wiedzieć o QR-kodach") %>% ggplot(aes(x=date, y=views)) + geom_line() + scale_y_log10(minor_breaks = rep (1:9, each=5) * c(1,10,100,1000,10000) ) + theme_bw() # dodajemy kolumne z liczba odslon, posluzy jako naglowek wykresow articles$pageTitle <- paste0( articles$page, " (", articles$sumviews," odsłon)") # pomocnicza kategoria ktora zapewni porzadek wykresow wg liczby odslon topArticles <- as_factor(articles %>% arrange(desc(sumviews)) %>% pull(pageTitle) %>% unique()%>% head(n=6)) # skala kolorow colorscale <- c( rep("green",10), # 1-10 rep("orange",90), # 10-100 rep("red", 900), # 100-1000 rep("blue",9000), # 1000-10000 rep("black",20500) # 10000+ ) # pomocnicze kolumny i wektory z danymi do kolorowania articles$color <- colorscale[articles$views] colorVector <- as.character(articles$color) names(colorVector) <- as.character(articles$color) articles <- articles %>% mutate( fac = ordered(pageTitle, levels = topArticles) ) # tutaj sporzadzamy wykres articles %>% filter(pageTitle %in% (topArticles) ) %>% ggplot(aes(x=date, y=views,color=color)) + scale_color_manual(values=colorVector) + scale_y_log10(minor_breaks = rep (1:9, each=5) * c(1,10,100,1000,10000) ) + scale_x_date(date_breaks = "months", date_minor_breaks = "weeks", date_labels = "%B", limits = c(ymd("20200301"), ymd("20201231")) ) + theme_minimal() + theme(panel.grid.minor.y = element_line(color="#f1f1f1"))+ theme(panel.grid.minor.x = element_line(color="#dddddd", linetype = "dotted"))+ theme(axis.text.x = element_text(hjust = 0)) + geom_point(show.legend = FALSE) + ylab("dzienna liczba odsłon (skala logarytmiczna)")+ xlab(NULL)+ ggtitle("TOP6 najpopularniejszych tekstów Informatyka Zakładowego", "w roku 2020, według danych z Google Analytics")+ facet_wrap(~fac, ncol=1) #zapisujemy obrazek do pliku PNG ggsave("obrazek.png", width=8, height=8, dpi=150)