Size: a a a

R (язык программирования)

2021 January 27

VK

Vladimir Kuchinsky in R (язык программирования)
@konhis
Приветствую!
Можно задать вопрос по урокам data.table? А именно по уроку 1.

Там были задачи:
Задача1: создать колонку с текстом XX from YY, (пример рез-та: C-3P0 from Tattooine)

# как решил её я

library(data.table)

sw <- fread('http://bit.ly/39aOUne')

sw[, new_col := planet_name]
sw[, new_col := paste(name, new_col, sep = ' from ')]

sw[1:3]


Вопрос: Возможно тупое решение))) Возможно ли сделать в одно действие сразу, а не как у меня 2 действия в 2 строки?
источник

VK

Vladimir Kuchinsky in R (язык программирования)
и еще можно вопрос по data.table
В уроке 1 была Задача 2: Замените NA в mass на медиану по ряду

sw[gender == 'n/a'] # работает тип данных chr
sw[mass == 'n/a']   # не работает тип данных num
str(sw)


Вопрос: тут столкнулся с проблемой, что вот так sw[mass == 'n/a'] отфильтровать таблицу, где тип данных num невозможно, см. скриншот ниже. Как быть?
источник

VK

Vladimir Kuchinsky in R (язык программирования)
источник

PU

Philipp Upravitelev in R (язык программирования)
Vladimir Kuchinsky
@konhis
Приветствую!
Можно задать вопрос по урокам data.table? А именно по уроку 1.

Там были задачи:
Задача1: создать колонку с текстом XX from YY, (пример рез-та: C-3P0 from Tattooine)

# как решил её я

library(data.table)

sw <- fread('http://bit.ly/39aOUne')

sw[, new_col := planet_name]
sw[, new_col := paste(name, new_col, sep = ' from ')]

sw[1:3]


Вопрос: Возможно тупое решение))) Возможно ли сделать в одно действие сразу, а не как у меня 2 действия в 2 строки?
можно просто sw[, new_col := paste(name, planet_name, sep = ' from ')]
источник

PU

Philipp Upravitelev in R (язык программирования)
Vladimir Kuchinsky
и еще можно вопрос по data.table
В уроке 1 была Задача 2: Замените NA в mass на медиану по ряду

sw[gender == 'n/a'] # работает тип данных chr
sw[mass == 'n/a']   # не работает тип данных num
str(sw)


Вопрос: тут столкнулся с проблемой, что вот так sw[mass == 'n/a'] отфильтровать таблицу, где тип данных num невозможно, см. скриншот ниже. Как быть?
вы путаете строковое значение 'n/a' и NA. второе - это спец.тип данных в R, обозначет пропуск. для того, чтобы проверить на пропуск, используют функцию is.na()
источник

AB

Alexey Burnakov in R (язык программирования)
Анатолий
Добрый день! Подскажите, пожалуйста. Пытаюсь сделать прогноз на скользящем окне, на одну точку вперед. Как сделать циклом- придумал, но он работает очень медленно. Можно это как-то векторизовать?

 

slide.arima <- function(x, window=36) {

  result <- rep(-999, length(x))
 result[1:window] <- NA
 for (i in (window+1):length(x)){

    result[i] <- (x[(i-window):(i-1)] %>% ts(frequency = 12) %>% auto.arima() %>%  forecast(h=1))$mean[1]  
}

  return(result)

}

x <- sin(1:100)

system.time(slide.arima(x))

пользователь      система       прошло

      122.63         0.01       122.73

 

И второй вопрос: выражение ( %>% … %>%...)$mean[1] выглядит как-то неправильно. Можно ли вместо скобок и $mean[1] сделать что-то более читаемое или и так считается норм?
Завтра вам постараюсь дать пример. Я тоже строю десятки моделей (был кейс с сотнями и т.д.) с помощью подбора порядка модели в рамках auto.arima. Вещь нужная, но тяжелая. Тут векторизация может быть, если её писать на пониженном уровне абстракции. В самой либе такого нет... Векторизация работает на более примитивных операциях, где, просто, циклы написаны на более низком уровне (C, например, который в базе). Я использую параллельное исполнение (multi core). И ещё, есть нюансы с ограничениями по порядку модели, их надо указать, если хочется побыстрее.

По поводу 2). Надо проверить (я не у компа) , но, выглядит так, что %>%$('mean') %>%[(1) подобное должно работать.
источник

AB

Alexey Burnakov in R (язык программирования)
Тут редактор не понимает "`"
источник

AB

Alexey Burnakov in R (язык программирования)
В них надо обернуть $ и [
источник

А

Анатолий in R (язык программирования)
Alexey Burnakov
В них надо обернуть $ и [
Спасибо,  это сработало.

По п.1 переписать автоариму самому это точно мне не по силам. Я то думал использовать её как-то векторно, а не в цикле.  Но видимо проблема именно в тяжести самой аримы. ХолтВинтерс в таком цикле работает мгновенно.
На примеры посмотрю с удовольствием.
источник

VK

Vladimir Kuchinsky in R (язык программирования)
Philipp Upravitelev
вы путаете строковое значение 'n/a' и NA. второе - это спец.тип данных в R, обозначет пропуск. для того, чтобы проверить на пропуск, используют функцию is.na()
А можно ещё вопрос по задачке 2:
с is.na я понял, спасибо!
а вот медиану проставить вместо NA не получается
проверил, вот по такой конструкции фильтрация таблицы происходит: sw[is.na(mass)]
по такой конструкции значение 555 вставляется в NA: sw[is.na(mass), mass := 555]
а вот медиана не вставляется: sw[is.na(mass), mass := median(mass, na.rm = TRUE)]
Как я понял по последней конструкции получается вектор с единичным значением, а вектор не может быть использован, чтобы его пометить в нужную ячейку?

Подскажите, пож)))
Скриншот с результатами ниже, где получается, а где нет 🙂
источник

VK

Vladimir Kuchinsky in R (язык программирования)
источник

fj

fedor jilkin in R (язык программирования)
Анатолий
Добрый день! Подскажите, пожалуйста. Пытаюсь сделать прогноз на скользящем окне, на одну точку вперед. Как сделать циклом- придумал, но он работает очень медленно. Можно это как-то векторизовать?

 

slide.arima <- function(x, window=36) {

  result <- rep(-999, length(x))
 result[1:window] <- NA
 for (i in (window+1):length(x)){

    result[i] <- (x[(i-window):(i-1)] %>% ts(frequency = 12) %>% auto.arima() %>%  forecast(h=1))$mean[1]  
}

  return(result)

}

x <- sin(1:100)

system.time(slide.arima(x))

пользователь      система       прошло

      122.63         0.01       122.73

 

И второй вопрос: выражение ( %>% … %>%...)$mean[1] выглядит как-то неправильно. Можно ли вместо скобок и $mean[1] сделать что-то более читаемое или и так считается норм?
источник

E

Eкатерина in R (язык программирования)
Здравствуйте! Скажите, пожалуйста, а linear probability model (LPM) используется для классификации в реальной жизни, а не только в учебных целях?
источник

a

aGricolaMZ in R (язык программирования)
Eкатерина
Здравствуйте! Скажите, пожалуйста, а linear probability model (LPM) используется для классификации в реальной жизни, а не только в учебных целях?
я привык видеть (и учить) logit/probit регрессиям (ну точнее я привык logit, но в какой-то момент, увидел, что где-то предпочитали probit)
источник

Н

Не Миша in R (язык программирования)
Банки любят логистическую регрессию, вроде как
источник

DN

Dmitriy Novikov in R (язык программирования)
Не Миша
Банки любят логистическую регрессию, вроде как
Банки любят интерпоеьируемый ml
источник

DN

Dmitriy Novikov in R (язык программирования)
А что это ему похуй как мне кажется
источник

PU

Philipp Upravitelev in R (язык программирования)
Vladimir Kuchinsky
А можно ещё вопрос по задачке 2:
с is.na я понял, спасибо!
а вот медиану проставить вместо NA не получается
проверил, вот по такой конструкции фильтрация таблицы происходит: sw[is.na(mass)]
по такой конструкции значение 555 вставляется в NA: sw[is.na(mass), mass := 555]
а вот медиана не вставляется: sw[is.na(mass), mass := median(mass, na.rm = TRUE)]
Как я понял по последней конструкции получается вектор с единичным значением, а вектор не может быть использован, чтобы его пометить в нужную ячейку?

Подскажите, пож)))
Скриншот с результатами ниже, где получается, а где нет 🙂
так вы в первом вырадении заменяете na, во втором их уже просто нет. вот и не работает
источник

VK

Vladimir Kuchinsky in R (язык программирования)
Philipp Upravitelev
так вы в первом вырадении заменяете na, во втором их уже просто нет. вот и не работает
Вы про замену на 555? Или я что-то не догнал?)))
Я про замену на 555 для примера показывал: а вот если к начальной таблице применить вот это:
sw[is.na(mass), mass := median(mass, na.rm = TRUE)]
то не происходит замена ☹️
источник

VK

Vladimir Kuchinsky in R (язык программирования)
Как я понял везде вместо NA в колонке mass должна появиться цифра 79 (это медиана), но как её туда поместить это для меня стало проблемой.
Буду рад, если поможете разобраться в данном вопросе, т.к. каких-то моментов в R ещё не понимаю.
источник