2015-11-30 2 views
0

Я работаю над проблемой моделирования атрибуции на работе, и у меня возникают проблемы с форматированием данных. Я использую следующий пакет:Формат данных для моделирования атрибуции в R

install.packages("ChannelAttribution") 
library(ChannelAttribution) 

Чтобы использовать функции в этом пакете, мне нужны данные в определенном формате: Пример:

GooglePaid>Direct>GoogleOrganic>BingPaid>Converted 

Мой желаемый результат будет выглядеть следующим образом:

path            total_conversions   
Direct>GooglePaid>Converted       504 
GoogleOrganic>Direct>Direct>Direct     689 
YahooPaid>Converted         1,900 
GoogleOrganic>BingPaid>Direct>Converted    785 

Всего конверсий будет суммой количества раз, когда кто-то взял этот уникальный путь. Итак, в приведенном выше примере Direct> GooglePaid> Converted наблюдался 504 раза в наборе данных.

Однако

Вот мой текущий формат данных из нашей команды разработчиков:

custID custChannel   custDate 
1 151  Direct  2015-10-10 00:15:32 
2 151 GooglePaid  2015-10-10 00:16:45 
3 151  Converted  2015-10-10 00:17:01 
4 5655  BingPaid  2015-10-11 00:20:12 
5 7855 GoogleOrganic  2015-10-12 00:05:32 
6 7862 YahooOrganic  2015-10-13 00:18:20 
7 9655 GooglePaid  2015-10-13 00:08:35 
8 9655 GooglePaid  2015-10-13 00:11:11 
9 9655  Converted  2015-10-13 00:11:35 

В приведенных выше данных, каждый уникальный путь должен подвести к 1, так как существует только один записанный путь, но если мы добавим этот CustID:

custID custChannel   custDate 
1 9666 GooglePaid  2015-10-14 00:15:32 
2 9666 GooglePaid  2015-10-14 00:16:45 
3 9666  Converted  2015-10-14 00:17:01 

было бы принести GooglePaid> GooglePaid> преобразованных всего до 2.

Спасибо!

ответ

0

(«Предоставлено» пакета или «необходимого в качестве входного для» этого пакета? Похоже, последний.)

Похоже, вы хотите 1) вставить последовательные значения custChannel с «>», как разделитель и 2) также подсчитывают их, оба действия в пределах отдельных значений CustID. Не могу сказать, что является основой для любого из «total_conversion_value» или «total_null».

Я добавил переменную custTime, хотя кажется вероятным, что у вас есть фиксированный формат ширины или формат ввода, разделенный табуляцией. (Я волнуюсь немного о пространствах данных смешных смещений во второй колонке, так как я подозреваю, что вы не использовали stringsAsFactors=FALSE с пробелами в качестве неявного сепаратора)

dat <- read.table(text=" custID custChannel   custDate custTime 
1 151  Direct  2015-10-10 00:15:32 
2 151 GooglePaid  2015-10-10 00:16:45 
3 151  Converted  2015-10-10 00:17:01 
4 5655  BingPaid  2015-10-11 00:20:12 
5 7855 GoogleOrganic  2015-10-12 00:05:32 
6 7862 YahooOrganic  2015-10-13 00:18:20 
7 9655 GooglePaid  2015-10-13 00:08:35 
8 9655 GooglePaid  2015-10-13 00:11:11 
9 9655  Converted  2015-10-13 00:11:35", header=TRUE, 
stringsAsFactors=FALSE) 

Если вы не получаете это из вашей команды разработчиков, как сортируются в пределах данных клиента и времени, то это можно сделать с помощью dat <- with(dat, dat[ order(custID, custDate, custTime), ])

dat2 <- lapply(unique(dat$custID), 
    function(x) list(path= paste(dat[dat$custID==x,'custChannel'], sep="", collapse=">"), 
        total_conversions= length(dat[dat$custID==x,'custChannel']))) 

do.call('rbind', dat2) 
#-------------- 
    path        total_conversions 
[1,] "Direct>GooglePaid>Converted"  3     
[2,] "BingPaid"      1     
[3,] "GoogleOrganic"     1     
[4,] "YahooOrganic"     1     
[5,] "GooglePaid>GooglePaid>Converted" 3  
+0

Это на самом деле здорово, но результат немного неправильный. Вывод должен быть для [5,] должен быть GooglePaid> GooglePaid> Конвертирован, так как есть только один экземпляр клиента (как указано custID) с этим путем. То же самое с [, 1] Общее количество конверсий увеличилось бы на 1, если в наборе данных мы найдем другого клиента, который совершил то же путешествие, что и [1,] или [5,]. Таким образом, для набора данных в 5 миллионов строк один путь с одним касанием GooglePaid должен иметь сотни тысяч «итоговых конверсий» Это имеет смысл? –

+0

Нет, это не так. Вы говорите, что [5,] должен быть «GooglePaid> GooglePaid> Converted», и это именно то, что было. Если вы хотите вычесть один из общих конверсий или сделать что-то еще, тогда вам нужно предложить определенный правильный ответ, которого на данный момент не хватает.Если вы хотите запустить 'table' над всеми столбцами пути, а затем соответствовать значениям пути, то _might_ будет тем, что вы комментируете. –

+0

Извините, я имел в виду [5,] должен читать GooglePaid> Google> Paid total conversionions = 1. Это только один записанный путь клиента. Я думаю, что моя формулировка в оригинальной публикации была неправильной. –

Смежные вопросы