Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.
magrittr.
#видео_уроки_по_Rtidylog оборачивает глаголы пакетов dplyr и tidyr, таким образом, что они выводят в консоль дополнительную, полезную информацию по выполняемому преобразованию данных.
Для начала подключите пакет tidylog после подключения dplyr/tidyr.
library("dplyr")
library("tidyr")
library("tidylog", warn.conflicts = FALSE)
Далее используете глаголы из dplyr/tidyr, но при этом в консоль будет выводиться дополнительная информация о каждой операции.
filtered <- filter(mtcars, cyl == 4) #> filter: removed 21 rows (66%), 11 rows remaining mutated <- mutate(mtcars, new_var = wt ** 2) #> mutate: new variable 'new_var' (double) with 29 unique values and 0% NAБолее полезным
tidylog может быть при использовании конвейера:
summary <- mtcars %>%
select(mpg, cyl, hp, am) %>%
filter(mpg > 15) %>%
mutate(mpg_round = round(mpg)) %>%
group_by(cyl, mpg_round, am) %>%
tally() %>%
filter(n >= 1)
#> select: dropped 7 variables (disp, drat, wt, qsec, vs, …)
#> filter: removed 6 rows (19%), 26 rows remaining
#> mutate: new variable 'mpg_round' (double) with 15 unique values and 0% NA
#> group_by: 3 grouping variables (cyl, mpg_round, am)
#> tally: now 20 rows and 4 columns, 2 group variables remaining (cyl, mpg_round)
#> filter (grouped): no rows removed
В данном случае из выведенного лога мы видим, что последняя операция filter(n >= 1) на самом деле не произвела абсолютно никаких действий.
Естественно в связи с тем, что tidylog является обёрткой над глаголами dplyr и tidyr, он имеет некоторые накладные расходы, т.е. функции с логированием выполняются немного дольше, особенно это чувствительно при использовании join_*() операций. Если вы хотите использовать обычный глагол (не обёртку), для какой то дорогостоящей операции, просто укажите это через двоеточия, например dplyr::left_join().
Ссылки:
- Больше примеров кода доступны в README пакета tidylog
- Сравнение скорости выполнения вычислений между чистым dplyr и tidylog
#заметки_по_Rgt, для визуализации таблиц, и графики исследования тоже созданы с помощью R.
Ссылки:
- Код исследования
- Статья с исследованием
#статьи_по_Rmagrittr, пакет предоставляющий пайп оператор %>%. Но, большинство его пользователей знают этот единственный оператор. Более продвинутые пользователи знакомы и с несколькими другими пайп операторами, о которых я ранее уже рассказывал вот тут.
Но, в magrittr присутвуют не только пайп операторы, но и псевдонимы многих базовых функций и операторов R, адаптированные под использование в конвейере.
Список псевдонимов magrittr:
extract - `[` extract2 - `[[` inset - `[<-` inset2 - `[[<-` use_series -`$` add - `+` subtract - `-` multiply_by - `*` raise_to_power - `^` multiply_by_matrix - `%*%` divide_by - `/` divide_by_int - `%/%` mod - `%%` is_in - `%in%` and - `&` or - `|` equals - `==` is_greater_than - `>` is_weakly_greater_than - `>=` is_less_than - `<` is_weakly_less_than - `<=` not (`n'est pas`) - `!` set_colnames -`colnames<-` set_rownames - `rownames<-` set_names - `names<-` set_class - `class<-` set_attributes - `attributes<-` set_attr - `attr<-`Несколько примеров использования приведённых выше псевдонимов, заимствованных из официальной справки:
iris %>%
extract(, 1:4) %>%
head
good.times <-
Sys.Date() %>%
as.POSIXct %>%
seq(by = "15 mins", length.out = 100) %>%
data.frame(timestamp = .)
good.times$quarter <-
good.times %>%
use_series(timestamp) %>%
format("%M") %>%
as.numeric %>%
divide_by_int(15) %>%
add(1)
Смотрите так же:
- 4 пайплайна в magrittr
#заметки_по_Rggplot2, dplyr, tidyr и других пакетов языка R для преобразования необработанных данных с целью получить понимание, аналитические сведения и знания.
● Когда следует использовать модели регрессии.
● Как обучать и оценивать модели регрессии с помощью платформы tidymodels.
● Когда следует использовать модели классификации.
● Как обучать и оценивать модели классификации с помощью платформы tidymodels.
● Когда следует использовать модели кластеризации.
● Как обучать и оценивать модели кластеризации с помощью платформы tidymodels.
Предварительные требования:
● Базовые знания в области математики
● Некоторый опыт программирования на языке R
#курсы_по_Rrytstat. На этот раз мы разберёмся с наиболее простым способом запроса статистики по эффективности вашего контента, который предоставляет YouTube Analytics API.
YouTube Analytics API позволяет создавать настраиваемые отчеты, содержащие данные YouTube Analytic, указав нужные поля и фильтры. По смыслу очень схоже с Google Analytics Core Reporting API и данный API наиболее удобен для анализа эффективности вашего контента в интерактивном режиме.
Тайм коды:
00:00 Введение
00:53 Назначение и структура YouTube Analytics API
02:05 Аргументы функции rytgetanalytics()
02:58 Типы отчётов доступные в YouTube Analytics API
03:35 Список доступных полей (параметров и показателей) в YouTube Analytics API
04:10 Работа со справкой YouTube Analytics API, сочетание полей отчёта
06:26 Запрос основной статистики с помощью пакета rytstat
07:57 Запрос основной статистики с разбивкой по днях
08:36 Как запросить из YouTube Analytics API статистику с разбивкой по датам и видео
13:35 построение рейтингов видео по просмотрам и лайкам
14:56 Визуализация рейтинга видео с помощью ggplot2 и построение динамики по просмотрам в разрезе дней на линейном графике
16:07 Учёт просмотров и других показателей по удалённым ресурсам
17:10 Пороговые значение при детализации отчётов
19:40 Как объединить в одном запросе фильтры по нескольким полям
Смотрите также:
- Авторизация в YouTube API
#видео_уроки_по_Ra:1:{s:17:\"last_cart_refresh\";i:1470188219;}. Чем то напоминает json, но распарсить на R такое представление объекта достаточно сложно.
С проблемой десериализации php объектов на R я столкнулся, когда в таком виде объекты записывались в базу данных. А моей задачей было развернуть эти данные на R.
Никаких встроенных механизмов на R реализующих десериализацию PHP объектов нет, так же нет и пакета, который это делал.
Тогда я просто с помощью регулярного выражения вытянул нужные мне данные из сериализованных объектов, но как оказалось на Stackowerflow есть готовое решение.
Функция представленная ниже написана на базовом R, она принимает строку, которой является сериализованый PHP объект, разворачивает его и возвращает матрицу:
<- function(string){
first <- unlist(strsplit(string, "\\{|\\}", fixed=F))
inside_array <- unlist(strsplit(first[-1], ";", fixed=T))
infomation_type <- substr(inside_array, 1,1)
if(any(nchar(gsub("s|i", "", unique(infomation_type) )) != 0)){
stop("unknow datatype in serilize data")
}
inside_array_s <- rep(NA, length(inside_array))
pos <- infomation_type == "s"
string_length <- as.numeric(sapply(strsplit(inside_array, ":", fixed=T), function(x) x[2]))[pos]
inside_array_s[pos] <- substr(inside_array[pos], nchar(string_length)+4, nchar(inside_array[pos]))
pos <- infomation_type == "i"
inside_array_s[pos] <- substr(inside_array[pos],3,nchar(inside_array[pos]))
# create key and value for each elment
key <- inside_array_s[seq(1,length(inside_array_s),2)]
value <- inside_array_s[seq(2,length(inside_array_s),2)]
return(cbind(key, value))
}
Результат:
string <- 'a:1:{s:17:\"last_cart_refresh\";s:17:\"last_cart_refresh\";}'
php_unserialize(string)
key value
[1,] "\"last_cart_refresh\"" "\"last_cart_refresh\""
Там же есть более продвинутый вариант этой функции, который возвращает не матрицу, а список.
Ссылки:
- Ответ на Stackowerflof
#заметки_по_Rcowsay позволяет выводить в консоль фразы, или текущее системное время, от имени животного. Этот приём можно использовать для стартового сообщения при запуске пакета, либо для вывода финальной информации о работе скрипта в Rout, так же можно использовать его внутри Rmarkdown.
Посмотреть список доступных животных можно извлекая имена списка animals.
names(animals) [1] "cow" "chicken" "chuck" "clippy" [5] "poop" "bigcat" "ant" "pumpkin" [9] "ghost" "spider" "rabbit" "pig" [13] "snowman" "frog" "hypnotoad" "shortcat" [17] "longcat" "fish" "signbunny" "facecat" [21] "behindcat" "stretchycat" "anxiouscat" "longtailcat" [25] "cat" "trilobite" "shark" "buffalo" [29] "grumpycat" "smallcat" "yoda" "mushroom" [33] "endlesshorse" "bat" "bat2" "turkey" [37] "monkey" "daemon" "egret" "duckling" [41] "duck" "owl" "squirrel" "squirrel2"Далее с помощью функции
say(), вы можете указать фразу, и животное, которое её произнесёт:
say('Subscribe to R4marketing', 'cat')
--------------
Subscribe to R4marketing
--------------
\
\
\
|\___/|
==) ^Y^ (==
\ ^ /
)=*=(
/ \
| |
/| | | |\
\| | |_|/\
jgs //_// ___/
\_)
Аргументы функции say():
● what - фраза
● by - кто её произнесёт
● type - тип сообщения, возможные значения: message, warning, print, string
● what_color - цвет фразы
● by_color - цвет, которым будет изображено животное
#заметки_по_R