本文目录导读:

要统计分析推送效果,通常需要关注关键指标、数据埋点、脚本逻辑以及结果输出,以下是一个通用的脚本化方案,适用于分析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或日志的字段样本),我可以给出更精确的脚本代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播