本文目录导读:

要统计分析推送效果,通常需要关注关键指标、数据埋点、脚本逻辑以及结果输出,以下是一个通用的脚本化方案,适用于分析APP推送(Push)或短信/邮件推送的效果。
核心分析指标
在写脚本前,先明确你要统计什么,通常分析推送效果的核心指标包括:
- 触达率:推送成功发送到设备的数量 / 目标发送数量
- 点击率:用户点击推送的数量 / 触达数量
- 转化率:点击后完成目标行为(如打开APP、下单、注册)的数量 / 点击数量
- 漏斗流失:从发送 -> 触达 -> 点击 -> 转化,每一步的流失比例。
- 时段效果:不同时间段发送的推送,点击率差异。
- 用户分群效果:针对不同用户标签(如活跃用户、沉睡用户)的推送效果对比。
脚本逻辑设计
脚本通常需要以下几个步骤,才能完成自动化统计分析:
- 数据获取:从推送平台(如极光、个推、友盟)的API、数据库或埋点日志文件读取原始数据。
- 数据清洗与关联:关联“推送记录表”与“用户行为日志表”(如点击事件、打开事件)。
- 指标计算:按时间段、人群、推送ID进行聚合计算。
- 结果输出:生成Excel报表、CSV文件或将结果写入BI看板数据库。
示例脚本(Python版)
假设你有一个名为 push_logs.csv 的日志文件,包含以下字段:push_id, user_id, status(sent, 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']}")
你可能会用到的工具链
- 命令行工具:
awk,grep,sort,uniq- 适用于超大日志文件:
grep "clicked" push.log | wc -l
- 适用于超大日志文件:
- SQL:如果数据在数据库里
SELECT campaign_name, COUNT(DISTINCT user_id) as clicks FROM push_events WHERE event='click' GROUP BY campaign_name;
- BI工具:配合脚本将数据写入数据库后,用Tableau/Power BI可视化。
需要注意的陷阱
- 去重问题:同一个用户可能收到多条推送,统计“点击人数”时要按
user_id去重,而不是按点击次数。 - 归因窗口:用户可能在收到推送后1小时才点击,脚本中需要设定归因时间窗口(如24小时内)。
- 平台差异:iOS和Android的推送统计口径不同(例如iOS的“送达”依赖APNs回执,不一定是100%准确)。
如果你能提供具体的数据格式(例如CSV或日志的字段样本),我可以给出更精确的脚本代码。