Это мой список данных action_slippers. Обратите внимание, что это только часть:
X_id cd iios ui w
1 56548c6ab65dd425cc3dda13 2015-11-24T16:12:26.572Z 194635691 563734c3b65dd40e340eaa56 0.010
2 56548df4b84c321fe4cdfb91 2015-11-24T16:19:00.798Z 194153563 56548df4b84c321fe4cdfb8f 0.010
3 56548fc7735e782a88591662 2015-11-24T16:26:46.952Z 177382028 563e12657d4c410c5832579c 0.010
4 565494e1b84c321fe4ce2f44 2015-11-24T16:48:33.828Z 177382031 563e12657d4c410c5832579c 0.010
5 5654994a735e782a88595802 2015-11-24T17:07:18.269Z 195129144 56549946735e782a885957e6 0.080
6 56549ce2b65dd425cc3e550c 2015-11-24T17:22:42.775Z 196972549 565181854c24b410e4891e11 0.010
7 56549f9bb84c321fe4ce7a3a 2015-11-24T17:34:19.732Z 194153563 56549f9bb84c321fe4ce7a37 0.010
8 5654a35a735e782a8859a055 2015-11-24T17:50:18.068Z 196258704 5654a35a735e782a8859a053 0.010
9 5654a5bab8e3a9227cffd593 2015-11-24T18:00:26.102Z 194907960 56320e0e55e89c3e14e26d3d 0.010
10 5654a7bb735e782a8859c495 2015-11-24T18:08:59.476Z 196950156 5651b53fec231f1df8482d23 0.027
iios: уникальный идентификатор элемента. Это поле для связывания элементов в этих файлах с файлами элементов.
ui : Уникальный идентификатор пользователя.
w : 0,01 означает, что пользователь просмотрел элемент. 0,08 означает, что пользователь добавил товар в корзину, 0,027 означает покупку.
Что я хочу сделать с этим списком данных, так это построить функцию, когда покупка произошла (w = 0,027), которая должна упорядочивать 8 лучших пользователей, которые наиболее похожи на пользователя, который приобрел товар с использованием формулы сходства косинуса (w = 0,027).
До сих пор я пробовал эти коды, но я не мог получить вектор пользователей, которые покупают, для сравнения с другими пользователями:
user_sim=function(i,actions_slippers){
for (i in 1:nrow(actions_slippers)) {
if (actions_slippers$w[i]==0.027) {
for (j in 1:i) {
user_id=actions_slippers$ui[i]
mydf <- data.frame(
ui = c(actions_slippers$ui[1:i]),
w = c(actions_slippers$w[1:i]),
iios = factor(
c(actions_slippers$iios[1:i]),
levels = unique(x)))
action= dcast(mydf, formula = ui ~ iios,
fill = 0, value.var = "w",
fun.aggregate = sum, drop = FALSE)
p=as.vector(cosine(t(a[,2:ncol(a)]))[,1])
t=a[,-1]
u_sim=t*p
col_sum=colSums(u_sim)
t_sum=colSums(t)
res1=col_sum/t_sum
newdata1=data.frame(res1)
max1 <- newdata1[order(res1[1:8],decreasing=TRUE),]
}
}
}
}
Я использовал пакет reshape2 для получения кадра данных действия, который выглядит следующим образом. Моя проблема в том, что я не могу получить вектор пользователя, который купил, а затем нужно вычислить косинусное сходство с каждым пользователем между тем, кто купил товар.
Здесь, в моем коде, я вычисляю косинусное сходство на основе первой строки кадра данных действий внизу между строками друг друга, но, как я упоминал выше, мне нужно получить вектор купленного пользователя и вычислить косинусное сходство на основе этого вектора между каждым другим пользователем
ui 194635691 194153563 177382028 177382031 195129144 196972549 196258704 194907960 196950156 194139014 153444738 192982501 192891196
1 237 0.01 0.01 0.01 0.00 0.00 0.00 0.00 0.01 0.000 0 0 0 0
2 261 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0 0 0
3 290 0.00 0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.000 0 0 0 0
4 483 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.000 0 0 0 0
5 485 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.027 0 0 0 0
6 533 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0 0 0
7 534 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 0.000 0 0 0 0
8 535 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0 0 0
9 536 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.000 0 0 0 0
Может ли кто-нибудь сказать мне, что мне делать? Большое спасибо.