Nano Hash - криптовалюты, майнинг, программирование

Как заставить людей заходить в магазин каждые 5 минут?

У меня есть таблица данных, как показано ниже:

library(data.table)
DT1<-data.table(
  id=c(1,2,3,4,3,2),
  in_time=c("2017-11-01 08:37:35","2017-11-01 09:07:44","2017-11-01 09:46:16","2017-11-01 10:32:29","2017-11-01 10:59:25","2017-11-01 13:24:12"),
  out_time=c("2017-11-01 08:45:35","2017-11-01 09:15:30","2017-11-01 10:11:16","2017-11-01 10:37:05","2017-11-01 11:45:25","2017-11-01 14:10:09")
  )

Он содержит каждую информацию о том, в какое время человек входит в магазин и выходит из магазина.

Теперь я хочу брать людей в магазине каждые 5 минут (стандартные 5 минут, такие как минуты 0,5,10,15...60). Если никого нет, мне нужно значение 0.

Поэтому я попытался с

library(lubridate)
DT1[,time:=ymd_hms(in_time)]
DT1[,time:=ceiling_date(time,"5mins")]
DT1[,.N,by=list(time)]

который дает только то, сколько людей вошло каждый раз, но теперь я застрял в том, как учитывать out_time. Например, идентификатор 1 вошел в 2017-11-01 08:37:35 и ушел в 2017-11-01 08:45:35. Таким образом, он будет в магазине в течение 5 минут интервал от 2017-11-01 08:40:00 до 2017-11-01 08:45:00 а не в 2017-11-01 08:50:00 и так далее.

Идентификатор может повторяться несколько раз, как будто один человек заходил в магазин несколько раз в день.

Любая помощь приветствуется.


  • считается ли id 1 в магазине с 01.11.2017 08:35:00 до 01.11.2017 08:40:00? если да, вы можете использовать data.table::foverlaps 28.05.2020

Ответы:


1

Вот вариант с использованием data.table::foverlaps:

#generate intervals of 5mins
times <- seq(as.POSIXct("2017-11-01 00:00:00", format=fmt), 
    as.POSIXct("2017-11-02 00:00:00", format=fmt), 
    by="5 min")
DT2 <- data.table(in_time=times[-length(times)], out_time=times[-1L], key=c("in_time","out_time"))

#set keys before foverlaps
setkey(DT1, in_time, out_time)

#find overlaps and count distinct in each 5min interval. 
#!is.na(id) is for truncating the output for checking. to be removed in actual code 
foverlaps(DT2, DT1)[!is.na(id), uniqueN(id), .(i.in_time, i.out_time)]

И если id уникален в каждом интервале времени, последняя строка кода может быть foverlaps(DT2, DT1)[, sum(!is.na(id)), .(i.in_time, i.out_time)] вместо этого.

первые 8 строк вывода:

              i.in_time          i.out_time V1
 1: 2017-11-01 08:35:00 2017-11-01 08:40:00  1
 2: 2017-11-01 08:40:00 2017-11-01 08:45:00  1
 3: 2017-11-01 08:45:00 2017-11-01 08:50:00  1
 4: 2017-11-01 09:05:00 2017-11-01 09:10:00  1
 5: 2017-11-01 09:10:00 2017-11-01 09:15:00  1
 6: 2017-11-01 09:15:00 2017-11-01 09:20:00  1
 7: 2017-11-01 09:45:00 2017-11-01 09:50:00  1
 8: 2017-11-01 09:50:00 2017-11-01 09:55:00  1

данные:

library(data.table)
DT1 <- data.table(
    id=c(1,2,3,4,3,2),
    in_time=c("2017-11-01 08:37:35","2017-11-01 09:07:44","2017-11-01 09:46:16","2017-11-01 10:32:29","2017-11-01 10:59:25","2017-11-01 13:24:12"),
    out_time=c("2017-11-01 08:45:35","2017-11-01 09:15:30","2017-11-01 10:11:16","2017-11-01 10:37:05","2017-11-01 11:45:25","2017-11-01 14:10:09")
)
cols <- c("in_time", "out_time")
fmt <- "%Y-%m-%d %T"
DT1[, (cols) := lapply(.SD, as.POSIXct, format=fmt), .SDcols=cols]
28.05.2020
  • Просто любопытно, можно ли это сделать и с помощью findOverlaps? 02.06.2020
  • простите, findOverlaps из какого пакета? 02.06.2020
  • Пакет Bioconductor GenomicRanges. Я читал бенчмаркинг из источника https://www.r-bloggers.com/comparing-the-execution-time-between-foverlaps-and-findoverlaps/ . 02.06.2020
  • @Ricky, да, действительно, оба выполняют одну и ту же функцию 02.06.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..