Add three more features to sms
parent
364200a304
commit
6cf39ad9c4
|
@ -28,8 +28,8 @@ READABLE_DATETIME:
|
||||||
SMS:
|
SMS:
|
||||||
TYPES : [received, sent]
|
TYPES : [received, sent]
|
||||||
METRICS:
|
METRICS:
|
||||||
received: [count, distinctcontacts]
|
received: [count, distinctcontacts, timefirstsms, timelastsms, countmostfrequentcontact]
|
||||||
sent: [count, distinctcontacts]
|
sent: [count, distinctcontacts, timefirstsms, timelastsms, countmostfrequentcontact]
|
||||||
DAY_SEGMENTS: *day_segments
|
DAY_SEGMENTS: *day_segments
|
||||||
|
|
||||||
# Communication call features config, TYPES and METRICS keys need to match
|
# Communication call features config, TYPES and METRICS keys need to match
|
||||||
|
|
|
@ -10,12 +10,26 @@ filter_by_day_segment <- function(data, day_segment) {
|
||||||
}
|
}
|
||||||
|
|
||||||
compute_sms_feature <- function(sms, metric, day_segment){
|
compute_sms_feature <- function(sms, metric, day_segment){
|
||||||
|
if(metric == "countmostfrequentcontact"){
|
||||||
|
# Get the most frequent contact
|
||||||
|
sms <- sms %>% group_by(trace) %>%
|
||||||
|
mutate(N=n()) %>%
|
||||||
|
ungroup() %>%
|
||||||
|
filter(N == max(N))
|
||||||
|
|
||||||
|
return(sms %>%
|
||||||
|
filter_by_day_segment(day_segment) %>%
|
||||||
|
summarise(!!paste("sms", sms_type, day_segment, metric, sep = "_") := n()))
|
||||||
|
} else {
|
||||||
sms <- sms %>% filter_by_day_segment(day_segment)
|
sms <- sms %>% filter_by_day_segment(day_segment)
|
||||||
feature <- switch(metric,
|
feature <- switch(metric,
|
||||||
"count" = sms %>% summarise(!!paste("com", "sms", sms_type, day_segment, metric, sep = "_") := n()),
|
"count" = sms %>% summarise(!!paste("sms", sms_type, day_segment, metric, sep = "_") := n()),
|
||||||
"distinctcontacts" = sms %>% summarise(!!paste("com", "sms", sms_type, day_segment, metric, sep = "_") := n_distinct(trace)))
|
"distinctcontacts" = sms %>% summarise(!!paste("sms", sms_type, day_segment, metric, sep = "_") := n_distinct(trace)),
|
||||||
|
"timefirstsms" = sms %>% summarise(!!paste("sms", sms_type, day_segment, metric, sep = "_") := first(local_hour) + (first(local_minute)/60)),
|
||||||
|
"timelastsms" = sms %>% summarise(!!paste("sms", sms_type, day_segment, metric, sep = "_") := last(local_hour) + (last(local_minute)/60)))
|
||||||
return(feature)
|
return(feature)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sms <- read.csv(snakemake@input[[1]])
|
sms <- read.csv(snakemake@input[[1]])
|
||||||
day_segment <- snakemake@params[["day_segment"]]
|
day_segment <- snakemake@params[["day_segment"]]
|
||||||
|
|
Loading…
Reference in New Issue