ruby 该要点向您展示了如何运行保留分析。我在博客上写了如何在此处运行保留分析:https://keen.io/blog/47823687779

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 该要点向您展示了如何运行保留分析。我在博客上写了如何在此处运行保留分析:https://keen.io/blog/47823687779相关的知识,希望对你有一定的参考价值。

require 'rubygems'
require 'keen'
require 'json'
require 'date'
require 'active_support/all' #for datetime calculation e.g. weeks.ago.at_beginning_of_week
require 'simple_xlsx' #for outputting excel files
require 'cgi' #for URL encoding


#================================oOo===================================
# This program helps you figure out how many entities that do an activity in a given week do a different activity in subsequent weeks
# For example, for users that create an account in a given week, how many of them login in subsequent weeks since their signup date
# This is commonly used for rentention analysis aka cohort analysis. Cohorts are defined by the week they do the first step in the funnel. 
# You must have event data stored in Keen IO in order to run this analysis
# The program uses the Keen IO funnel analysis API to do the calculations
# The analysis can go back any num_weeks in the past and will run analysis for each week since that time (one cohort for each week)
# The results will be outputted to Terminal and also an excel file
# The total number of funnel analyses is num_weeks^2/2 so the query can take some time, espeically for very large event collections.
#================================oOo===================================

# Step 1 - Determine how far back in the past you want to go for this analysis.
# Calculations will be run for every week since that week, up until the most recent completed week.
# num_weeks determines the number of cohorts in your analysis.

num_weeks = 52

# Step 2 - Enter your Keen Project Info

Keen.project_id = <project ID>
Keen.read_key = <key>

# Step 3 - Define your funnel steps. The first step will define your cohort groups. The last step will determine your "success" criteria.
# For example, say you are interested in login activity for customers who have paid
# step one: Create Account (counts the number of unique accounts that were created that week)
# step two: Login (counts how many unique customers in the cohort logged in that week)
# Add any number of filters to any step (e.g. exclude test accounts).
# You can optionally add filters to the steps.

$steps = [
    {
     :event_collection => "create_account",
     :actor_property => "account.id",
     # :filters => [{         
     #           :property_name => "account.name",
     #           :operator => "ne",
     #           :property_value => "TestAccount"
     #           }],    
     },
     {
     :event_collection => "logins",
     :actor_property => "project.account.id",
     },
 ]

# Protip: You may have more than two steps. Middle steps will further refine the number of candidates which make it to the last step.
# Step 4 - Run this script!

# These two nested loops run through all of the weeks since num_weeks ago, building funnel queries and running them.

SimpleXlsx::Serializer.new(Time.now.to_s[0..19]+".xlsx") do |doc|  # This will create an excel file to output results
    doc.add_sheet("Retention") do |sheet|
        first_row_labels=["Week","Cohort Size"]   # These are the first two column headers in excel
        
        
        # This loop cycles through each week in num_weeks so that we can assign that week to the first step of the funnel
        
        num_weeks.times do |w|   
            first_row_labels << "Week "+(w+1).to_s  # There is one column for every week depending on your num_weeks. Week 0, Week 1, ... Week N
        end
                  
        sheet.add_row(first_row_labels)

        i=0

        # This loop cycles through each of the weeks starting with the week num_weeks ago
        while i < num_weeks do
            
            $row_items=[]

            puts "==========================oOo============================="   
            puts "Retention Analysis for the Cohort from " + ((num_weeks-i).weeks.ago.at_beginning_of_week).to_s[0..10] 
            
            $row_items << ((num_weeks-i).weeks.ago.at_beginning_of_week).to_s[0..10]
                                            
            applicable_weeks = num_weeks - i
    
            n=0
            
            # This loop cycles through each of the weeks starting with the week the cohort was created and then progressing through each week since then
            applicable_weeks.times do |n|   
                    
                # Insert cohort timeframe into the first funnel step
                $steps.first[:timeframe] = {   
                    :start => (num_weeks-i).weeks.ago.at_beginning_of_week,  
                    :end => (num_weeks-i-1).weeks.ago.at_beginning_of_week
                    }
                
                # Insert rentention timeframe into the final funnel step
                $steps.last[:timeframe] =  {
                    :start => (applicable_weeks-n).weeks.ago.at_beginning_of_week,
                    :end => (applicable_weeks-n-1).weeks.ago.at_beginning_of_week
                    }
                
                query_name = "Retention_cohort_"+i.to_s+".week"+n.to_s              
                answer = Keen.funnel(:steps => $steps) # Run the Keen IO Query 
                
                # The Keen IO query returns a result like [X, Y]
                # X is the result of the first funnel step (number of a new accounts in this example, aka Cohort Size)
                # Y is the result of the second funnel step (number of logins in this example)

                if n == 0
                    puts "Cohort Size: "+answer[0].to_s 
                    $cohortSize = answer[0]
                    $row_items << $cohortSize  # We jam stuff into this array so we can print it to excel later. Item 0 in the array is the Cohort Size.
                    puts "Week "+n.to_s+": "+answer.last.to_s
                    $row_items << (answer.last.to_f/$cohortSize.to_f)
                else
                    puts "Week "+n.to_s+": "+answer.last.to_s
                    $row_items << (answer.last.to_f/$cohortSize.to_f) # We jam stuff into this array so we can print it to excel later. In this example, each column shows the % of accounts who did step 2 in a given week after signup.
                end

            n=n+1
            end
 
         i=i+1 
         sheet.add_row($row_items) # Put the data into the excel file
         $row_items=[] # Empty the array so we can use it again for the next row.
         
        end
    end
end

以上是关于ruby 该要点向您展示了如何运行保留分析。我在博客上写了如何在此处运行保留分析:https://keen.io/blog/47823687779的主要内容,如果未能解决你的问题,请参考以下文章

托福你得这么学:口语Ruby老师的4月考情分析及5月答题要点

我在这里的输入需要不区分大小写。我将向您展示我的代码,请帮助,我对如何做到这一点一无所知[重复]

Ruby 代码中的 C/C++?

本文将向您展示如何在 Flutter 中编码/解码 JSON

是否可以将两位小数分配给双精度

如果某日百度的用户检索量下降了5%,该如何分析其原因,说明思路和要点(百度-2014)