Variables <- c("Domain", "Category", "Global Rank", "Traffic Share", "Change", "AdSense", "Time period")
Description <- c("Сайт, который ссылался на Coursera", "Автоматически присвоенная категория для данного сайта", "Частота посещаемости/популярности сайта(?)", "Доля трафика для отсылки на Coursera на данном сайте", "Процентное изменение в доле трафика за полтора года (июль 2017 - декабрь 2018)", "Есть ли на этом сайте веб-приложение для контекстной рекламы", "Месяц сбора данных")
Range <- c("-", "-", "[0; 38.000.000]", "[0; 0.065], %", "[-5; -40], %", "Yes/NA", "[07-17; 12-18]")
Var_tab <- data.frame(Variables, Description, Range)
formattable(Var_tab,
align =c("l","l","c"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Variables | Description | Range |
---|---|---|
Domain | Сайт, который ссылался на Coursera |
|
Category | Автоматически присвоенная категория для данного сайта |
|
Global Rank | Частота посещаемости/популярности сайта(?) | [0; 38.000.000] |
Traffic Share | Доля трафика для отсылки на Coursera на данном сайте | [0; 0.065], % |
Change | Процентное изменение в доле трафика за полтора года (июль 2017 - декабрь 2018) | [-5; -40], % |
AdSense | Есть ли на этом сайте веб-приложение для контекстной рекламы | Yes/NA |
Time period | Месяц сбора данных | [07-17; 12-18] |
Variables <- c("Search term", "Traffic share", "Change", "Organic", "Paid", "URL", "Position", "Volume", "CPC", "Featured", "Time Preiod")
Description <- c("Поисковой запрос в Google", "Доля трафика на этот поисковой запрос", "Процентное изменение в доле трафика за полтора года (июль 2017 - декабрь 2018)", "Доля органической выдачи по запросу(т.е. нерекламных сайтов)", "Доля неогранической выдачи(т.е рекламных сайтов)", "Ссылка на Coursera по запросу", "Ранковая позиция страницы на выдаче в Google со ссылкой на Coursera","Количество запросов за 1.5 года","Стоимость клика по данному запросу", "Есть ли на этом сайте веб-приложение для контекстной рекламы", "Месяц сбора данных")
Range <- c("-", "[0; 0.0095], %", "[-2; 28], %", "[0; 1], %", "[0; 1], %", "-", "[1; 20]", "[0; 650.000.000]", "[0; 260], $", "Yes/NA", "[07-17; 12-18]")
Var_tab1 <- data.frame(Variables, Description, Range)
formattable(Var_tab1,
align =c("l","l","l"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Variables | Description | Range |
---|---|---|
Search term | Поисковой запрос в Google |
|
Traffic share | Доля трафика на этот поисковой запрос | [0; 0.0095], % |
Change | Процентное изменение в доле трафика за полтора года (июль 2017 - декабрь 2018) | [-2; 28], % |
Organic | Доля органической выдачи по запросу(т.е. нерекламных сайтов) | [0; 1], % |
Paid | Доля неогранической выдачи(т.е рекламных сайтов) | [0; 1], % |
URL | Ссылка на Coursera по запросу |
|
Position | Ранковая позиция страницы на выдаче в Google со ссылкой на Coursera | [1; 20] |
Volume | Количество запросов за 1.5 года | [0; 650.000.000] |
CPC | Стоимость клика по данному запросу | [0; 260], $ |
Featured | Есть ли на этом сайте веб-приложение для контекстной рекламы | Yes/NA |
Time Preiod | Месяц сбора данных | [07-17; 12-18] |
Количество уникальных доменов:
length(unique(inc_agr$Domain))
## [1] 5985
Количество уникальных категорий:
length(unique(inc_agr$Category))
## [1] 133
Итак, у нас 133 уникальные комбинации категорий сайтов, домены которых представлены в датасете. Все домены - уникальные, т.е. существует как минимум 5985 веб страниц, с которых можно перейти на Coursera.
Примерно в половине случаев категория сайта Unknown =(
Посмотрим на распределение категорий из известной половины:
top_cat = inc_agr %>% filter(Category != "Unknown") %>% group_by(Category) %>% summarise(count = n()) %>% arrange(-count) %>% top_n(10)
ggplot(top_cat)+
geom_bar(aes(x = reorder(Category, count), y = count),stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
geom_label(aes(x = Category, y = count, label = count), vjust = -0.1, size = 2.5)+
labs(title = "Топ 10 самыx популярныx категорий", x = NULL, y = NULL)+
coord_flip()
Учитывая, что известных категорий около 3 тысяч, то по графику видим, что около 11% всех доменов с известными категориями принадлежат сайтам по карьере и образованию, а ещё около 8% - новостным и медиа порталам.
Посмотрим на самые популярные домены:
top_rank = inc_agr %>% select(`Global Rank`, Domain) %>% filter(`Global Rank` != 0) %>% arrange(`Global Rank`) %>% top_n(10, -`Global Rank`)
ggplot(top_rank)+
geom_bar(aes(x = reorder(Domain, -`Global Rank`), y = `Global Rank`),stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
geom_label(aes(x = Domain, y = `Global Rank`, label = `Global Rank`), vjust = -0.1, size = 2.5)+
theme(axis.ticks = element_blank(), axis.text.y = element_blank())+
labs(title = "Самые популярные домены", x = NULL, y = NULL)+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Видим, что чем больше Global Rank, тем менее популярным является сайт. Интуитивно кажется правильными, что Google, Yahoo, Amazon и Yandex - самые популярные сайты по этой характеристике.
Посмотрим на самые серьезные изменения в доле трафика:
top_change = inc_agr %>% select(Domain, Change, Category) %>% arrange(-Change) %>% top_n(10, Change)
ggplot(top_change)+
geom_bar(aes(x = reorder(Domain, -Change), y = Change), stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
labs(title = "Топ 10 доменов в самым значительным\nположительным изменением в трафике, %", x = NULL, y = NULL)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
scale_y_continuous(breaks = 0:40*5)
Всего в датасете 273 домена с контекстной рекламой. Посмотрим на топ 10 доменов, отсортированных по доле трафика, которую они приносят:
adv = inc_agr %>% na.omit(subset(select = c(Domain,AdSense,Category,`Traffic Share`))) %>% arrange(-`Traffic Share`) %>% top_n(10, `Traffic Share`)
ggplot(adv)+
geom_bar(aes(x = reorder(Domain, `Traffic Share`), y = `Traffic Share`),stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
geom_label(aes(x = Domain, y =`Traffic Share`, label = round(`Traffic Share`,5)), vjust = -0.1, size = 2.5)+
labs(title = "Топ 10 доменов с контекстной рекламой по доле трафика", x = NULL, y = NULL)+
coord_flip()
Всего в датасете 18 000 наблюдений. На 2017 год приходится 6 000 (июль - декабрь), и, соответственно 12 000 наблюдений - на 2018 год (январь - декабрь).
year_2017 = inc_month %>% filter(str_detect(`Time Period`, "17"))
inc_month$`Time Period` = as.factor(inc_month$`Time Period`)
traffic_month = year_2017 %>% select(Domain, `Traffic Share`, `Time Period`) %>% group_by(`Time Period`) %>% arrange(-`Traffic Share`) %>% top_n(5,`Traffic Share`)
traffic1 = traffic_month %>% filter(`Time Period` == "07-17"|`Time Period`== "08-17"|`Time Period`=="09-17") %>% arrange(-`Traffic Share`)
ggplot(traffic1)+
geom_bar(aes(x = reorder(Domain, -`Traffic Share`), y = `Traffic Share`), stat = "identity", color = "black", alpha = 0.5)+
facet_grid(~`Time Period`, scales = "free")+
theme_bw()+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Топ 5 доменов, принесшие наибольшую долю трафика по месяцам", x = NULL, y = "Доля трафика, %")+
scale_y_continuous(breaks = 0:25*0.05)
traffic2 = traffic_month %>% filter(`Time Period` == "10-17"|`Time Period`== "11-17"|`Time Period`=="12-17")%>% arrange(-`Traffic Share`)
ggplot(traffic2)+
geom_bar(aes(x = reorder(Domain, -`Traffic Share`), y = `Traffic Share`), stat = "identity", color = "black", alpha = 0.5)+
facet_grid(~`Time Period`, scales = "free")+
theme_bw()+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = NULL, x = NULL, y = "Доля трафика, %")+
scale_y_continuous(breaks = 0:10*0.01)
А теперь за 2018 год:
year_2018 = inc_month %>% filter(str_detect(`Time Period`, "18"))
inc_month$`Time Period` = as.factor(inc_month$`Time Period`)
traffic_month1 = year_2018 %>% select(Domain, `Traffic Share`, `Time Period`) %>% group_by(`Time Period`) %>% arrange(-`Traffic Share`) %>% top_n(5,`Traffic Share`)
traffi = traffic_month1 %>% filter(`Time Period` == "01-18"|`Time Period`== "02-18"|`Time Period`=="03-18"|`Time Period` == "04-18"|`Time Period` == "05-18"|`Time Period` == "06-18") %>% arrange(-`Traffic Share`)
ggplot(traffi)+
geom_bar(aes(x = reorder(Domain, -`Traffic Share`), y = `Traffic Share`), stat = "identity", color = "black", alpha = 0.5)+
facet_grid(~`Time Period`, scales = "free")+
theme_bw()+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Топ 5 доменов, принесшие наибольшую долю трафика по месяцам", x = NULL, y = "Доля трафика, %")+
scale_y_continuous(breaks = 0:25*0.05)
traffi2 = traffic_month1 %>% filter(`Time Period` == "07-18"|`Time Period`== "08-18"|`Time Period`=="09-18"|`Time Period` == "10-18"|`Time Period` == "11-18"|`Time Period` == "12-18") %>% arrange(-`Traffic Share`)
ggplot(traffi2)+
geom_bar(aes(x = reorder(Domain, -`Traffic Share`), y = `Traffic Share`), stat = "identity", color = "black", alpha = 0.5)+
facet_grid(~`Time Period`, scales = "free")+
theme_bw()+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = NULL, x = NULL, y = "Доля трафика, %")+
scale_y_continuous(breaks = 0:25*0.05)
Но снова посмотрим на топ 10 самых популярных доменов по категориям. Разделим категории сайтов на “общую” и более “специфическую” категории (в изначальном датасете они были указаны через слэш). Отфильтруем домены с неизвестными категориями и посмотрим какие категории сайтов в итоге самые популярные:
inc_agr = inc_agr %>% separate(Category, c("Category1", "Category2"), sep = "/")
inc_month = inc_month %>% separate(Category, c("Category1", "Category2"), sep = "/")
top_cat1 = inc_agr %>% filter(Category1 != "Unknown")
top_cat11 = top_cat1 %>% group_by(Category1) %>% summarise(count = n()) %>% arrange(-count) %>% top_n(10)
ggplot(top_cat11,aes(x = reorder(Category1, count), y = count))+
geom_bar(stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
labs(title = "Топ 10 самых часто встречающихся категорий сайтов", x = NULL, y = NULL)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
scale_y_continuous(breaks = 0:600*50)+
coord_flip()+
geom_text(aes(label = paste("n = ",count,"")), position = position_stack(vjust=0.55), size = 3.5)+
annotate(x= 1.5, y=450, label=paste("Total = ",nrow(top_cat1)), geom="text", size= 5)
Посмотрим самые популярные домены по более спицифическим категориям:
top_cat2 = inc_agr %>% filter(Category2 != "NA")
top_cat22 = top_cat2 %>% group_by(Category2) %>% summarise(count = n()) %>% arrange(-count) %>% top_n(10)
ggplot(top_cat22,aes(x = reorder(Category2, count), y = count))+
geom_bar(stat = "identity", color = "black", alpha = 0.5)+
theme_bw()+
labs(title = "Топ 10 самых часто встречающихся\nспецифичных категорий сайтов", x = NULL, y = NULL)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
scale_y_continuous(breaks = 0:600*50)+
coord_flip()+
geom_text(aes(label = paste("n = ",count,"")), position = position_stack(vjust=0.55), size = 3.5)+
annotate(x= 1.5, y=300, label=paste("Total = ",nrow(top_cat2)), geom="text", size= 5)
А теперь посмотрим на общее суммарное изменение по доле трафика по месяцам:
traf_line = inc_month %>% na.omit(subset(select = c(Domain, Category1, Category2, `Time Period`, Change))) %>% group_by(`Time Period`) %>% summarise(total_traf = sum(Change))
inc_month$`Time Period` <- ordered(inc_month$`Time Period`,
levels = c("07-17","08-17","09-17","10-17","11-17","12-17","01-18","02-18","03-18","04-18","05-18","06-18","07-18","08-18","09-18","10-18","11-18","12-18"))
traf_line$`Time Period` = as.factor(traf_line$`Time Period`)
ggplot(data = traf_line, aes(x = `Time Period`, y = total_traf))+
geom_line(group = 1, alpha = 0.5)+
theme_bw()+
geom_point()+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Конечное суммарное изменение по общей доле трафика\nот всех доменов по месяцам", y = "Суммарное изменение, %", x = NULL)+
scale_y_continuous(breaks = 0:250*25)
Посмотрим на суммарную долю трафика для 5 топовых категорий сайтов по месяцам:
top = inc_month %>% filter(Category1 != "Unknown") %>% select(`Time Period`, `Traffic Share`, Category1) %>% group_by(Category1) %>% summarise(count = n()) %>% arrange(-count) %>% top_n(10)
inc_traf_m = inc_month %>% select(`Time Period`, `Traffic Share`, Category1) %>% filter(Category1 == "Career_and_Education"|Category1 == "News_and_Media"|Category1 == "Internet_and_Telecom"|Category1 == "Computer_and_Electronics"|Category1 == "Business_and_Industry") %>% group_by(Category1, `Time Period`) %>% summarise(total_t = sum(`Traffic Share`))
ggplot(data = inc_traf_m, aes(x = as.factor(`Time Period`), y = total_t, group = as.factor(Category1)))+
theme_bw()+
geom_line(aes(color = as.factor(Category1)))+
geom_point(alpha = 0.6)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Суммарная доля трафика\nот топ 5 категорий доменов по месяцам", y = "Суммарная доля, %", x = NULL, color = NULL)+
scale_y_continuous(breaks = 0:10*0.05)+
theme(legend.justification=c(1,1), legend.position=c(1,1))
А теперь посмотрим на суммарную долю трафика по топ 5 специфичeским категориям по месяцам:
top1 = inc_month %>% filter(Category2 != "NA") %>% select(`Time Period`, `Traffic Share`, Category2) %>% group_by(Category2) %>% summarise(count = n()) %>% arrange(-count) %>% top_n(10)
inc_traf_m1 = inc_month %>% select(`Time Period`, `Traffic Share`, Category2) %>% filter(Category2 == "Education"|Category2 == "Technology_News"|Category2 == "Universities_and_Colleges"|Category2 == "Software"|Category2 == "Programming") %>% group_by(Category2, `Time Period`) %>% summarise(total_t = sum(`Traffic Share`))
ggplot(data = inc_traf_m1, aes(x = as.factor(`Time Period`), y = total_t, group = as.factor(Category2)))+
theme_bw()+
geom_line(aes(color = as.factor(Category2)))+
geom_point(alpha = 0.5)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Суммарная доля трафика\nот топ 5 специфичных категорий доменов по месяцам", y = "Суммарная доля, %", x = NULL, color = NULL)+
scale_y_continuous(breaks = 0:50*0.01)+
theme(legend.position= "bottom")
Количество поисковых запросов в изначальном агрегированном датасете:
key_agr <- read_excel("key_words_agreg.xlsx")
nrow(key_agr)
## [1] 167788
Фильтруем изначальное количество (167788) поисковых запросов: убираем все не английские слова, все цифры и всю пунктуацию. В конечном итоге осталось поисковых запросов:
#убрали все не английские символы
key_agr = key_agr[which(!grepl("[^\x01-\x7F]+", key_agr$`Search terms`)),]
#убрали все цифры
key_agr$`Search terms` = gsub("[[:digit:]]", "", key_agr$`Search terms`)
#убрали все знаки пунктуации
key_agr$`Search terms` = gsub("[[:punct:]]", "", key_agr$`Search terms`)
#удаляем строки с пустым поисковым запросом
key_agr<- key_agr[!(is.na(key_agr$`Search terms`) |
key_agr$`Search terms`==""| key_agr$`Search terms`==" "|
key_agr$`Search terms`==" "|
key_agr$`Search terms`==" "|
key_agr$`Search terms`==" "|
key_agr$`Search terms`==" "|
key_agr$`Search terms`==" "), ]
nrow(key_agr)
## [1] 154524
Также, отфильтруем только те запросы, которые непосредственно ведут на Coursera (т.е. у запроса указана URL ссылка на какую-либо веб страницу Coursera). В итоге осталось запросов:
key_agr = key_agr %>% filter(URL != "NA")
nrow(key_agr)
## [1] 89391
#1
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "science|scientist|machine learning|deep learning|computer|algorithm|cloud"),
"Data Science", key_agr$`Search terms`)
#2
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "r|python|sql"),
"R/Python/SQL", key_agr$`Search terms`)
#3
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`,
"java|c|php|go|scala|json|programming"),
"Java/C/PHP/Go/Scala", key_agr$`Search terms`)
#4
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "tableau|visualization|excel|power"),
"Data visualization", key_agr$`Search terms`)
#5
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "ai|artificial"),
"Artificial Intelligence", key_agr$`Search terms`)
#6
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "math|algebra|sin|lim|log|integral|sum|derivative|factor|cos"),
"Mathematics", key_agr$`Search terms`)
#7
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "analy"),
"Data Analytics", key_agr$`Search terms`)
#8
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "business|management|entrepreneurship|finance|innovat|invest|product|agile"),
"Business Analytics", key_agr$`Search terms`)
#9
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`,
"regression|anova|social|statistic|overfit|model|human|hypothes|qualit|quanti"),
"Statistical modeling/Social Sciences", key_agr$`Search terms`)
#10
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "big data"),
"Big Data", key_agr$`Search terms`)
#11
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`,
"mining|text|natural language|processing"),
"Text mining/NLP", key_agr$`Search terms`)
#12
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "android|ios"),
"Android/iOS", key_agr$`Search terms`)
#13
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`,
"digital|marketing|project|customer|target|ad|advertise|contextual"),
"Digital Marketing", key_agr$`Search terms`)
#14
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "design|photoshop|photo|art|creat"),
"Design", key_agr$`Search terms`)
#15
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`,
"software|matlab|mat lab|neural|recommend|collaborat|linux|windows"),
"Software/Hardware Engineering", key_agr$`Search terms`)
#16
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "english"),
"English", key_agr$`Search terms`)
key_agr$`Search terms` = ifelse(str_detect(key_agr$`Search terms`, "Data Science"), "Data Science",ifelse(str_detect(key_agr$`Search terms`, "R/Python/SQL"), "R/Python/SQL",ifelse(str_detect(key_agr$`Search terms`, "Java/C/PHP/Go/Scala"), "Java/C/PHP/Go/Scala",ifelse(str_detect(key_agr$`Search terms`, "Data visualization"),"Data visualization",ifelse(str_detect(key_agr$`Search terms`, "Artificial Intelligence"), "Artificial Intelligence",ifelse(str_detect(key_agr$`Search terms`, "Mathematics"), "Mathematics",ifelse(str_detect(key_agr$`Search terms`, "Data Analytics"), "Data Analytics",ifelse(str_detect(key_agr$`Search terms`, "Business Analytics"), "Business Analytics",ifelse(str_detect(key_agr$`Search terms`, "Statistical modeling/Social Sciences"),"Statistical modeling/Social Sciences",ifelse(str_detect(key_agr$`Search terms`, "Big Data"), "Big Data", ifelse(str_detect(key_agr$`Search terms`, "Text mining/NLP"), "Text mining/NLP",ifelse(str_detect(key_agr$`Search terms`, "Android/iOS"), "Android/iOS",ifelse(str_detect(key_agr$`Search terms`, "Digital Marketing"),"Digital Marketing",ifelse(str_detect(key_agr$`Search terms`, "Design"),"Design",ifelse(str_detect(key_agr$`Search terms`,"Software/Hardware Engineering"),"Software/Hardware Engineering",ifelse(str_detect(key_agr$`Search terms`,"English"), "English", "Other"))))))))))))))))
В итоге кластеризации поисковых запросов выделились 15 основных тем. Все запросы, не попавшие ни в одну из тем, сгруппированы в 16-ую тему “Other”(“Другое”).
Вот финальная таблица с запросами:
key_agr$`Search terms` = as.factor(key_agr$`Search terms`)
words = key_agr %>% group_by(`Search terms`) %>% summarise(count = n()) %>% arrange(-count)
formattable(words,
align =c("l","c"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Search terms | count |
---|---|
R/Python/SQL | 70335 |
Java/C/PHP/Go/Scala | 13571 |
Other | 3603 |
Mathematics | 512 |
Digital Marketing | 216 |
Statistical modeling/Social Sciences | 215 |
Data Analytics | 184 |
Design | 160 |
Artificial Intelligence | 129 |
Business Analytics | 121 |
Software/Hardware Engineering | 80 |
Data visualization | 74 |
English | 65 |
Big Data | 50 |
Text mining/NLP | 48 |
Android/iOS | 28 |
А в этой таблице показано, каким образом отбирались слова для каждой из тем (с помощью функции str_detect из пакета stringr
все запросы проверялись на наличие указанных слов/словосочетаний/части слова, затем, им присваивалась одна из 16 категорий) :
Topic <- c("R/Python/SQL","Java/C/PHP/Go/Scala","Data Visualization", "Artificial Intelligence", "Mathematics","Data Analytics","Business Analytics","Statistical modeling/Social Sciences", "Big Data","Text mining/NLP","Android/iOS","Digital Marketing","Design","Software/Hardware Engineering","English")
Words_searched <- c("r | python | sql", "java | c | php | go | scala | json | programming", "tableau | visualization | excel | power","ai | artificial","math | algebra | sin | lim | log | integral | sum | derivative | factor | cos","analy","business | management | entrepreneurship | finance | innovat | invest | product | agile","regression | anova | social | statistic | overfit | model | human | hypothes | qualit | quanti","big data","mining | text | natural language | processing","android | ios","digital | marketing | project | customer | target | ad | advertise | contextual", "design | photoshop | photo | art | creat", "software | matlab | mat lab | neural | recommend | collaborat | linux | windows","english")
Tab_words <- data.frame(Topic, Words_searched)
formattable(Tab_words,
align =c("l","l"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Topic | Words_searched |
---|---|
R/Python/SQL | r | python | sql |
Java/C/PHP/Go/Scala | java | c | php | go | scala | json | programming |
Data Visualization | tableau | visualization | excel | power |
Artificial Intelligence | ai | artificial |
Mathematics | math | algebra | sin | lim | log | integral | sum | derivative | factor | cos |
Data Analytics | analy |
Business Analytics | business | management | entrepreneurship | finance | innovat | invest | product | agile |
Statistical modeling/Social Sciences | regression | anova | social | statistic | overfit | model | human | hypothes | qualit | quanti |
Big Data | big data |
Text mining/NLP | mining | text | natural language | processing |
Android/iOS | android | ios |
Digital Marketing | digital | marketing | project | customer | target | ad | advertise | contextual |
Design | design | photoshop | photo | art | creat |
Software/Hardware Engineering | software | matlab | mat lab | neural | recommend | collaborat | linux | windows |
English | english |
Посмотрим на среднее количество трафика по каждой тематике запросов. Среднее, а не суммарное, чтобы уравновесить различное количество запросов по разным тематикам (!)
top_terms_agr = key_agr %>% group_by(`Search terms`) %>% summarise(mean_traffic = mean(`Traffic Share`)) %>% arrange(-mean_traffic)
formattable(top_terms_agr,
align =c("l","l"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Search terms | mean_traffic |
---|---|
Text mining/NLP | 6.940714e-06 |
Big Data | 5.977362e-06 |
English | 4.747282e-06 |
Data visualization | 3.979051e-06 |
Data Analytics | 3.496426e-06 |
Java/C/PHP/Go/Scala | 3.175816e-06 |
Design | 2.511700e-06 |
Software/Hardware Engineering | 2.421947e-06 |
Statistical modeling/Social Sciences | 1.669087e-06 |
Digital Marketing | 1.443871e-06 |
Other | 1.404984e-06 |
Business Analytics | 1.367735e-06 |
Android/iOS | 1.367230e-06 |
R/Python/SQL | 1.234195e-06 |
Mathematics | 1.183400e-06 |
Artificial Intelligence | 9.289813e-07 |
Интересные результаты! Несмотря на то, что запросов по языкам программирования, математике и маркетингу - больше, наибольшее количество трафика на Курсеру идет от запросов по вопросам обработки и анализа текста, больших данных и изучения английского.
А теперь поработаем с датасетом по поисковые запросам по месяцам. Аналогично, перекодируем все запросы в 15 основных тематик запросов, и посмотрим, какова средняя доля трафика на каждый запрос.
Количество запросов в изначальном датасете по месяцам:
key_month <- read_excel("key_words_month.xlsx")
nrow(key_month)
## [1] 402332
Количество запросов после аналогичного цикла фильтрации:
#убрали все не английские символы
key_month = key_month[which(!grepl("[^\x01-\x7F]+", key_month$`Search terms`)),]
#убрали все цифры
key_month$`Search terms` = gsub("[[:digit:]]", "", key_month$`Search terms`)
#убрали все знаки пунктуации
key_month$`Search terms` = gsub("[[:punct:]]", "", key_month$`Search terms`)
#удаляем строки с пустым поисковым запросом
key_month<- key_month[!(is.na(key_month$`Search terms`) |
key_month$`Search terms`==""| key_month$`Search terms`==" "|
key_month$`Search terms`==" "|
key_month$`Search terms`==" "|
key_month$`Search terms`==" "|
key_month$`Search terms`==" "|
key_month$`Search terms`==" "), ]
key_month = key_month %>% filter(URL != "NA")
nrow(key_month)
## [1] 161617
#1
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "science|scientist|machine learning|deep learning|computer|algorithm|cloud"),
"Data Science", key_month$`Search terms`)
#2
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "r|python|sql"),
"R/Python/SQL", key_month$`Search terms`)
#3
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`,
"java|c|php|go|scala|json|programming"),
"Java/C/PHP/Go/Scala", key_month$`Search terms`)
#4
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "tableau|visualization|excel|power"),
"Data visualization", key_month$`Search terms`)
#5
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "ai|artificial"),
"Artificial Intelligence", key_month$`Search terms`)
#6
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "math|algebra|sin|lim|log|integral|sum|derivative|factor|cos"),
"Mathematics", key_month$`Search terms`)
#7
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "analy"),
"Data Analytics", key_month$`Search terms`)
#8
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "business|management|entrepreneurship|finance|innovat|invest|product|agile"),
"Business Analytics", key_month$`Search terms`)
#9
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`,
"regression|anova|social|statistic|overfit|model|human|hypothes|qualit|quanti"),
"Statistical modeling/Social Sciences", key_month$`Search terms`)
#10
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "big data"),
"Big Data", key_month$`Search terms`)
#11
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`,
"mining|text|natural language|processing"),
"Text mining/NLP", key_month$`Search terms`)
#12
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "android|ios"),
"Android/iOS", key_month$`Search terms`)
#13
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`,
"digital|marketing|project|customer|target|ad|advertise|contextual"),
"Digital Marketing", key_month$`Search terms`)
#14
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "design|photoshop|photo|art|creat"),
"Design", key_month$`Search terms`)
#15
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`,
"software|matlab|mat lab|neural|recommend|collaborat|linux|windows"),
"Software/Hardware Engineering", key_month$`Search terms`)
#16
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "english"),
"English", key_month$`Search terms`)
key_month$`Search terms` = ifelse(str_detect(key_month$`Search terms`, "Data Science"), "Data Science",ifelse(str_detect(key_month$`Search terms`, "R/Python/SQL"), "R/Python/SQL",ifelse(str_detect(key_month$`Search terms`, "Java/C/PHP/Go/Scala"), "Java/C/PHP/Go/Scala",ifelse(str_detect(key_month$`Search terms`, "Data visualization"),"Data visualization",ifelse(str_detect(key_month$`Search terms`, "Artificial Intelligence"), "Artificial Intelligence",ifelse(str_detect(key_month$`Search terms`, "Mathematics"), "Mathematics",ifelse(str_detect(key_month$`Search terms`, "Data Analytics"), "Data Analytics",ifelse(str_detect(key_month$`Search terms`, "Business Analytics"), "Business Analytics",ifelse(str_detect(key_month$`Search terms`, "Statistical modeling/Social Sciences"),"Statistical modeling/Social Sciences",ifelse(str_detect(key_month$`Search terms`, "Big Data"), "Big Data", ifelse(str_detect(key_month$`Search terms`, "Text mining/NLP"), "Text mining/NLP",ifelse(str_detect(key_month$`Search terms`, "Android/iOS"), "Android/iOS",ifelse(str_detect(key_month$`Search terms`, "Digital Marketing"),"Digital Marketing",ifelse(str_detect(key_month$`Search terms`, "Design"),"Design",ifelse(str_detect(key_month$`Search terms`,"Software/Hardware Engineering"),"Software/Hardware Engineering",ifelse(str_detect(key_month$`Search terms`,"English"), "English", "Other"))))))))))))))))
Самые часто встречающиеся запросы:
key_month$`Search terms` = as.factor(key_month$`Search terms`)
words_month = key_month %>% group_by(`Search terms`) %>% summarise(count = n()) %>% arrange(-count)
formattable(words_month,
align =c("l","c"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Search terms | count |
---|---|
R/Python/SQL | 123968 |
Java/C/PHP/Go/Scala | 26337 |
Other | 7457 |
Mathematics | 904 |
Digital Marketing | 431 |
Statistical modeling/Social Sciences | 431 |
Design | 411 |
Data Analytics | 352 |
Business Analytics | 250 |
Artificial Intelligence | 228 |
English | 202 |
Data visualization | 197 |
Software/Hardware Engineering | 179 |
Text mining/NLP | 110 |
Big Data | 94 |
Android/iOS | 66 |
Посмотрим на среднюю долю трафика в датасете с поисковыми запросами по месяцам:
key_month$`Time Period` = as.factor(key_month$`Time Period`)
top_terms_month = key_month %>% group_by(`Search terms`) %>% summarise(mean_traffic = mean(`Traffic Share`)) %>% arrange(-mean_traffic)
formattable(top_terms_month,
align =c("l","l"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
Search terms | mean_traffic |
---|---|
Big Data | 5.358122e-05 |
Text mining/NLP | 5.221136e-05 |
Data Analytics | 2.789219e-05 |
English | 2.589137e-05 |
Data visualization | 2.524294e-05 |
Java/C/PHP/Go/Scala | 2.460019e-05 |
Software/Hardware Engineering | 1.854044e-05 |
Design | 1.506666e-05 |
Statistical modeling/Social Sciences | 9.634717e-06 |
R/Python/SQL | 8.785534e-06 |
Digital Marketing | 8.715528e-06 |
Business Analytics | 8.371052e-06 |
Android/iOS | 7.943882e-06 |
Mathematics | 7.553240e-06 |
Other | 6.573943e-06 |
Artificial Intelligence | 3.435808e-06 |
Видим,что топ чарт немного изменился, по сравнению с агрегированными данными по запросам.
Посмотрим на изменение средней доли трафика по всем категориям запросов по месяцам:
all_traf = key_month %>% group_by(`Search terms`, `Time Period`) %>% summarise(mean_traffic = mean(`Traffic Share`))
ggplot(data = all_traf, aes(x = as.factor(`Time Period`), y = mean_traffic, group = as.factor(`Search terms`)))+
theme_bw()+
geom_line(aes(color = as.factor(`Search terms`)))+
geom_point(alpha = 0.7, size = 0.7)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Средняя доля трафика от всех категорий запросов по месяцам", y = "Средняя доля, %", x = NULL, color = NULL)+
scale_y_continuous(breaks = 0:10000*0.00005)+
theme(legend.position= "bottom")
А теперь просто ради интереса и сравнения посмотрим на изменение суммарной доли трафика по всем категориям запросов по месцам(просто ради интереса):
all_traf1 = key_month %>% group_by(`Search terms`, `Time Period`) %>% summarise(sum_traffic = sum(`Traffic Share`))
ggplot(data = all_traf1, aes(x = as.factor(`Time Period`), y = sum_traffic, group = as.factor(`Search terms`)))+
theme_bw()+
geom_line(aes(color = as.factor(`Search terms`)))+
geom_point(alpha = 0.7, size = 0.7)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Суммарная доля трафика от всех категорий запросов по месяцам", y = "Суммарная доля, %", x = NULL, color = NULL)+
scale_y_continuous(breaks = 0:10000*0.01)+
theme(legend.position= "bottom")
Как и предполагалось - количество наблюдений в каждой категории не дают объективно оценить количество трафика. Поскольку категории с R, Python.. и Java/C.. самые многочисленные - их суммарный трафик наибольший.
Ещё можно более подробно изучить изменения средней доли трафика топ 5 поисковых запросов по месяцам:
mean_traf = key_month %>% filter(`Search terms` == "Big Data"|`Search terms`== "Text mining/NLP"|`Search terms`== "Data Analytics"|`Search terms`== "English" |`Search terms`== "Data visualization") %>% group_by(`Search terms`, `Time Period`) %>% summarise(mean_traffic = mean(`Traffic Share`))
ggplot(data = mean_traf, aes(x = as.factor(`Time Period`), y = mean_traffic, group = as.factor(`Search terms`)))+
theme_bw()+
geom_line(aes(color = as.factor(`Search terms`)))+
geom_point(alpha = 0.6)+
theme(axis.text.x = element_text(angle = 30, hjust = 1))+
labs(title = "Средняя доля трафика от топ 5 категорий\nпоисковых запросов по месяцам", y = "Средняя доля, %", x = NULL, color = NULL)+
scale_y_continuous(breaks = 0:10000*0.00005)+
theme(legend.justification=c(1,1), legend.position=c(1,1))