当前位置: 首页 > 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() 详解
  • 微博:严厉打击对肖某董某事件蹭炒热点、编造故事博流量等行为
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用
  • 15世纪以来中国文化如何向欧洲传播?《东学西传文献集成初编》发布
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 打工人的“小长假模式”,已经迫不及待地开启了
  • 柴德赓、纪庸与叫歇碑