Skip to content

Instantly share code, notes, and snippets.

@ronfe
Last active November 17, 2015 06:50
Show Gist options
  • Select an option

  • Save ronfe/4a2bbc4381db02bc012c to your computer and use it in GitHub Desktop.

Select an option

Save ronfe/4a2bbc4381db02bc012c to your computer and use it in GitHub Desktop.
__author__ = 'ronfe'
from pymongo import MongoClient
from bson.objectid import ObjectId
import datetime
db = MongoClient('mongodb://localhost:27017')['yangcong-prod25']
points = db['points']
users = db['users']
# Calc activate users
def activated_users(start, end, platform):
# Get activated id from points
pipeLine = [
{"$match": {"createdBy": {"$gte": start, "$lt": end}, "from": {"$in": platform}}},
{"$group": {"_id": None, "users": {"$addToSet": "$user"}}}
]
activate_id = list(points.aggregate(pipeLine))[0]['users']
# Get all the user id
pipeLine = [
{"$group": {"_id": None, "users": {"$push": "$_id"}}}
]
user_id = list(users.aggregate(pipeLine))[0]['users']
# intersect
result = set(activate_id).intersection(set(user_id))
return result
# Calc new users
# platform is a list of froms
def new_users(start, end, platform):
# Get all the users registed in the past two weeks
two_week_start = end - datetime.timedelta(days=14)
pipeLine = [
{"$match": {"usefulData.registDate": {"$gte": two_week_start, "$lt": end}, "usefulData.from": {"$in": platform}}},
{"$group": {"_id": None, "users": {"$push": "$_id"}}}
]
two_week_registered = list(users.aggregate(pipeLine))[0]['users']
# Get all the activatedid from points
pipeLine = [
{"$match": {"createdBy": {"$gte": start, "$lt": end}}},
{"$group": {"_id": None, "users": {"$addToSet": "$user"}}}
]
activate_id = list(points.aggregate(pipeLine))[0]['users']
# intersect
result = set(two_week_registered).intersection(set(activate_id))
return result
def return_users(start, end, prev_user):
pipeLine = [
{"$match": {"createdBy": {"$gte": start, "$lt": end}, "user": {"$in": list(prev_user)}}},
{"$group": {"_id": None, "users": {"addToSet": "$user"}}}
]
result = list(points.aggregate(pipeLine))[0]['users']
return result
# Activate
start_date = datetime.datetime(2015,11,8)
end_date = datetime.datetime(2015,11,14)
print 'Activate users'
pc_act = activated_users(start_date, end_date, ['pc'])
print 'PC: ' + str(len(pc_act))
mobile_act = activated_users(start_date, end_date, ['android', 'ios'])
print 'Mobile: ' + str(len(mobile_act))
print 'Both: ' + str(len(pc_act.intersection(mobile_act)))
# New users
pc_last_week = new_users(start_date - datetime.timedelta(weeks=1), end_date - datetime.timedelta(weeks=1), ['signup', 'batch'])
print 'Last week PC new users: ' + str(len(pc_last_week))
pc_return = return_users(start_date, end_date, pc_last_week)
print 'Last week PC return users: ' + str(len(pc_return))
pc_this_week = new_users(start_date, end_date, ['signup', 'batch'])
print 'This week PC new users: ' + str(len(pc_this_week))
mobile_last_week = new_users(start_date - datetime.timedelta(weeks=1), end_date - datetime.timedelta(weeks=1), ['android', 'ios'])
print 'Last week mobile new users: ' + str(len(mobile_last_week))
mobile_return = return_users(start_date, end_date, mobile_last_week)
print 'Last week mobile return users: ' + str(len(mobile_return))
mobile_this_week = new_users(start_date, end_date, ['android', 'ios'])
print 'This week mobile new users: ' + str(len(mobile_this_week))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment