当前位置: 首页 > news >正文

广告效果分析-广告点击率mysql+pandas

本题知识点:case when ;fillna;apply……

链接

目录

思路:

Mysql

pandas


思路:

(以下 clicked,viewed,ignored 简称为 c,v,g)

看公式,对于没有全是ignore记录的广告也需要有ctr结果(0),

所以我们要保留所有的广告记录。而不是一开始就把所有ignore记录筛掉去计算。

这里有两种方法:

方法1(鸡肋版)

分别按照ad_id 分组筛出 action= v或c的记录然后计数,然后两个分组结果合并后对两个计数列相加得到v+c列,最后c列 / v+c列 得到 ctr。

但是这种方法鸡肋就鸡肋在现在得到ctr的结果中并没有包含action全是g的广告。因为前面分组计数时根据action = c或 v筛选后g记录就不在结果中了。

此时你就得回到ads表中找到去重后的ad_id,再与ctr结果左连表后 以0填充空值。 略显麻烦

所以

方法2 :

ads表中先新添加一列tag,action = c 或 v 时 tag = 1, action = g 时 tag = 0。

然后根据 ad_id 分组后对tag 求和 得到结果表 tvc,得到的sum就是 v+c,且 action 全是 g的广告也被保留在这个结果中,sum结果为0。

然后再单独根据 action = c 从表中筛记录 ,按ad_id  分组后进行计数得到c,结果表命名tc。

tvc 左连表 tc ,在结果表中  c列 / v+c 列 得到 ctr ,其中 v+c = 0也参与计算但是不会有结果,会置空,最后替换空值为0。

方法2比方法1就显得不那么绕了。

Mysql

with tvc as
(select ad_id,sum(tag) as vc from 
(
select ad_id,
case when action = 'Clicked' or action = 'Viewed' then 1
else 0  end as tag
from ads
) t group by ad_id)
,tc as 
(
select ad_id,count(1) as c from 
ads where action = 'Clicked'
group by ad_id)select tvc.ad_id, ifnull(round(c/vc,4)*100,0) as ctr 
from tvc left join tc on tvc.ad_id = tc.ad_id 
order by ctr desc, ad_id asc

pandas

import pandas as pd
def ads_performance(ads: pd.DataFrame) -> pd.DataFrame:ads['tag'] = ads.apply(lambda row:1 if row['action'] == 'Clicked' or row['action'] == 'Viewed' else 0,axis=1)df1 = ads.groupby(by='ad_id')['tag'].sum().reset_index(name='v+c')df2 = ads[ads['action'] == 'Clicked'].groupby(by='ad_id')['action'].count().reset_index(name='c')df = pd.merge(left=df1,right=df2,how='left',on='ad_id').fillna(0)df['ctr'] = round(df['c'] / df['v+c'],4) * 100return df[['ad_id','ctr']].fillna(0).sort_values(by=['ctr','ad_id'],ascending=[False,True])

相关文章:

  • 初识网络原理
  • 《门》凡是过往,皆为序曲。我们的爱,和最初一样
  • 屏幕录制工具Leawo Free Screen Recorder v1.0.0.0绿色版,支持定时录制计划+实时标注
  • 【程序员 NLP 入门】词嵌入 - 如何基于计数的方法表示文本? (★小白必会版★)
  • 【数据结构】第五弹——Stack 和 Queue
  • bgp实验.包括联盟,隧道相关,以及一个低级错误
  • 静压模型SWASH学习(9)——平底水槽高频驻波算例(Standing short wave in closed basin)
  • C++ 算法(12):数组参数传递详解,值传递、指针传递与引用传递
  • ARM汇编的LDM和STM指令
  • ubuntu 交叉编译 macOS 库, 使用 osxcross 搭建 docker 编译 OS X 库
  • Vue el-checkbox 虚拟滚动解决多选框全选卡顿问题 - 高性能处理大数据量选项列表
  • 网络开发基础(游戏)之 粘包分包
  • N8N 官方 MCP 节点实战指南:AI 驱动下的多工具协同应用场景全解析
  • Java—— 正则表达式
  • 算法之回溯法
  • C++初阶——string的使用(上)
  • 词语关系图谱模型
  • QGIS实用功能:加载天地图与下载指定区域遥感影像
  • Python实例题:Python3OpenCV视频转字符动画
  • [Java · 铢积寸累] 基础函数 — 生成随机数 - Math.random() 详解
  • “女孩被前男友泼汽油烧伤致残案”二审择期宣判
  • 2025年度“沪惠保”将于4月22日开售,保费不变
  • 多地市场监管部门公开征集居民水电气计量不准确、收费不规范问题线索
  • 外交部介绍中印尼“2+2”机制首次部长级会议将讨论的议题
  • 工信部:加快推进6G技术研发等,前瞻布局和培育面向6G的应用产业生态
  • 在全社会营造浓郁书香氛围,上海市全民阅读工作会议召开