我正在嘗試計算我平臺中客戶的保留率。我想看看有多少客戶在 4 周內訪問平臺 4 次,4 周內訪問 3 次,4 周內訪問兩次,4 周內訪問一次。
第一個和最后一個資料點很容易得到,但我不知道如何計算中間兩個。
我有一組每周活躍的客戶 ID。例如:
week_one = [1, 3, 4, 5, 7]
week_two = [1, 2, 3, 6]
week_three = [1, 2, 7]
week_four = [1, 2, 3, 8]
我試圖得到的結果是:
在 4 周內使用該平臺 4 次的客戶: [1]
在 4 周內使用該平臺 3 次的客戶: [2, 3]
在 4 周內使用該平臺 2 次的客戶: [7]
在 4 周內使用該平臺 1 次的客戶: [4, 5, 6, 8]
...
有了這些價值觀,我可以說:
1位客戶連續4周使用平臺,2位客戶在4周內使用平臺3次,1位客戶在4周內使用平臺2次,4位客戶在4周內使用平臺1次.
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
Enumerable#tally可以在這里使用:
arr = [*week_one, *week_two, *week_three, *week_four]
arr.tally.each_with_object({}) { |(k,v),h| (h[v] ||= []) << k }
#=> {4=>[1], 3=>[3,2], 1=>[4,5,6,8], 2=[7]}
中間結果是
arr.tally
#=> {1=>4, 3=>3, 4=>1, 5=>1, 7=>2, 2=>3, 6=>1, 8=>1}
一個可以替代地寫
arr.tally.each_with_object(Hash.new {|h,k| h[k] = []}) {|(k,v),h| h[v] << k}
這使用Hash::new的形式,它接受一個塊并且沒有引數。h以這種方式定義散列會導致在沒有 keyh[v] = []之前執行。h[v] << k hv
uj5u.com熱心網友回復:
我的方法是將所有陣列加入一個更大的陣列
monthly_visits = week_one week_two week_three week_four
visit_count = {}
# from array of unique values, count how many times each value occurs
monthly_visits.uniq.each do |visitor_id|
visit_count[visitor_id] = monthly_visits.count(visitor_id)
end
visit_count
# Hash returns each visitor_id as key, and number of visits as the value
# => {1=>4, 3=>3, 4=>1, 5=>1, 7=>2, 2=>3, 6=>1, 8=>1}
希望這是您問題的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/403120.html
標籤:
