脚本怎样统计分析推送效果

wen 实用脚本 28

本文目录导读:

脚本怎样统计分析推送效果

  1. 核心分析指标
  2. 脚本逻辑设计
  3. 示例脚本(Python版)
  4. 高级用法:API自动化(以友盟为例)
  5. 你可能会用到的工具链
  6. 需要注意的陷阱

要统计分析推送效果,通常需要关注关键指标数据埋点脚本逻辑以及结果输出,以下是一个通用的脚本化方案,适用于分析APP推送(Push)或短信/邮件推送的效果。

核心分析指标

在写脚本前,先明确你要统计什么,通常分析推送效果的核心指标包括:

  1. 触达率:推送成功发送到设备的数量 / 目标发送数量
  2. 点击率:用户点击推送的数量 / 触达数量
  3. 转化率:点击后完成目标行为(如打开APP、下单、注册)的数量 / 点击数量
  4. 漏斗流失:从发送 -> 触达 -> 点击 -> 转化,每一步的流失比例。
  5. 时段效果:不同时间段发送的推送,点击率差异。
  6. 用户分群效果:针对不同用户标签(如活跃用户、沉睡用户)的推送效果对比。

脚本逻辑设计

脚本通常需要以下几个步骤,才能完成自动化统计分析:

  1. 数据获取:从推送平台(如极光、个推、友盟)的API、数据库或埋点日志文件读取原始数据。
  2. 数据清洗与关联:关联“推送记录表”与“用户行为日志表”(如点击事件、打开事件)。
  3. 指标计算:按时间段、人群、推送ID进行聚合计算。
  4. 结果输出:生成Excel报表、CSV文件或将结果写入BI看板数据库。

示例脚本(Python版)

假设你有一个名为 push_logs.csv 的日志文件,包含以下字段:push_id, user_id, statussent, delivered, clicked), event_time, campaign_name

安装依赖

pip install pandas matplotlib

分析脚本 (analysis_push.py)

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
# ========== 1. 加载数据 ==========
# 假设数据是从推送平台导出的CSV
df = pd.read_csv('push_logs.csv', parse_dates=['event_time'])
# 确保状态列标准化
state_map = {'成功发送': 'sent', '到达设备': 'delivered', '用户点击': 'clicked'}
df['status'] = df['status'].map(state_map).fillna(df['status'])
# ========== 2. 按推送任务分组统计 ==========
def calculate_push_stats(group):
    total_sent = len(group[group['status'] == 'sent'])
    total_delivered = len(group[group['status'] == 'delivered'])
    total_clicked = len(group[group['status'] == 'clicked'])
    return pd.Series({
        '发送量': total_sent,
        '触达量': total_delivered,
        '点击量': total_clicked,
        '触达率': round(total_delivered / total_sent * 100, 2) if total_sent > 0 else 0,
        '点击率': round(total_clicked / total_delivered * 100, 2) if total_delivered > 0 else 0,
        '点击发送率': round(total_clicked / total_sent * 100, 2) if total_sent > 0 else 0
    })
# 按推送名称或推送ID分组
push_stats = df.groupby('campaign_name').apply(calculate_push_stats)
push_stats = push_stats.reset_index()
# ========== 3. 按小时分析点击趋势 ==========
# 只筛选点击事件
clicks = df[df['status'] == 'clicked'].copy()
clicks['hour'] = clicks['event_time'].dt.hour
# 按小时统计点击量
hourly_click = clicks.groupby('hour').size().reset_index(name='点击量')
# ========== 4. 输出结果 ==========
print("=== 推送效果概览 ===")
print(push_stats.to_string(index=False))
# 保存到Excel
with pd.ExcelWriter('推送效果分析报告.xlsx', engine='openpyxl') as writer:
    push_stats.to_excel(writer, sheet_name='推送概览', index=False)
    hourly_click.to_excel(writer, sheet_name='小时点击趋势', index=False)
# 绘制饼图:点击率 vs 未点击
total_delivered = df[df['status'] == 'delivered']['push_id'].nunique() # 简化
clicked_users = len(clicks)
not_clicked = total_delivered - clicked_users
if total_delivered > 0:
    plt.figure(figsize=(6,6))
    plt.pie([clicked_users, not_clicked], 
            labels=['点击用户', '未点击用户'], 
            autopct='%1.1f%%',
            colors=['#ff9999','#66b3ff'])
    plt.title('推送点击占比')
    plt.savefig('push_click_pie.png')
    print("饼图已保存为 push_click_pie.png")
print("\n分析完成!结果已保存至 推送效果分析报告.xlsx")

执行脚本

python analysis_push.py

高级用法:API自动化(以友盟为例)

如果推送平台有API,脚本可以全自动拉取数据:

import requests
import json
# 假设友盟的API
APP_KEY = "your_app_key"
APP_MASTER_SECRET = "your_secret"
url = "https://msg.umeng.com/api/status"
# 获取昨天的推送数据
params = {
    "appkey": APP_KEY,
    "timestamp": int(time.time()),
    "date": "2025-03-01"  # 指定日期
}
# 签名等逻辑省略...
response = requests.post(url, data=json.dumps(params))
data = response.json()
# 解析返回的推送统计数据
for push in data['data']:
    print(f"推送ID: {push['task_id']}, 发送: {push['sent_count']}, 点击: {push['click_count']}")

你可能会用到的工具链

  1. 命令行工具awk, grep, sort, uniq
    • 适用于超大日志文件:grep "clicked" push.log | wc -l
  2. SQL:如果数据在数据库里
    • SELECT campaign_name, COUNT(DISTINCT user_id) as clicks FROM push_events WHERE event='click' GROUP BY campaign_name;
  3. BI工具:配合脚本将数据写入数据库后,用Tableau/Power BI可视化。

需要注意的陷阱

  • 去重问题:同一个用户可能收到多条推送,统计“点击人数”时要按 user_id 去重,而不是按点击次数。
  • 归因窗口:用户可能在收到推送后1小时才点击,脚本中需要设定归因时间窗口(如24小时内)。
  • 平台差异:iOS和Android的推送统计口径不同(例如iOS的“送达”依赖APNs回执,不一定是100%准确)。

如果你能提供具体的数据格式(例如CSV或日志的字段样本),我可以给出更精确的脚本代码。

抱歉,评论功能暂时关闭!