力扣之1322.广告效果

news2024/10/7 5:18:39
  • 题目:

  • sql建表语句:

  • Create table If Not Exists Ads
    (
        ad_id   int,
        user_id int,
        action  ENUM ('Clicked', 'Viewed', 'Ignored')
    );
    Truncate table Ads;
    insert into Ads (ad_id, user_id, action)
    values ('1', '1', 'Clicked');
    insert into Ads (ad_id, user_id, action)
    values ('2', '2', 'Clicked');
    insert into Ads (ad_id, user_id, action)
    values ('3', '3', 'Viewed');
    insert into Ads (ad_id, user_id, action)
    values ('5', '5', 'Ignored');
    insert into Ads (ad_id, user_id, action)
    values ('1', '7', 'Ignored');
    insert into Ads (ad_id, user_id, action)
    values ('2', '7', 'Viewed');
    insert into Ads (ad_id, user_id, action)
    values ('3', '5', 'Clicked');
    insert into Ads (ad_id, user_id, action)
    values ('1', '4', 'Viewed');
    insert into Ads (ad_id, user_id, action)
    values ('2', '11', 'Viewed');
    insert into Ads (ad_id, user_id, action)
    values ('1', '2', 'Clicked');
  • 分析:看到题目,我们先了解一下公式,了解完成之后,我们先按照ad_id分组,然后用if算出action为Clicked和Viewed的所有次数,然后再算出Clicked的次数,然后判断所有次数是否为零,如果为零,就返回零,如果不为零,就返回Clicked的次数、所有次数,然后*100保留两位小数。

  • sql实现:

  • select ad_id,
           round(if(sum(if(action != 'Ignored', 1, 0)) = 0, 0,
              sum(if(action = 'Clicked', 1, 0)) / sum(if(action != 'Ignored', 1, 0)))*100,2) ctr
    from Ads  -- 多层if判断来实现
    group by ad_id order by ctr desc,ad_id
  • pandas例子:

  • data = [[1, 1, 'Clicked'], [2, 2, 'Clicked'], [3, 3, 'Viewed'], [5, 5, 'Ignored'], [1, 7, 'Ignored'], [2, 7, 'Viewed'], [3, 5, 'Clicked'], [1, 4, 'Viewed'], [2, 11, 'Viewed'], [1, 2, 'Clicked']]
    ads = pd.DataFrame(data, columns=['ad_id', 'user_id']).astype({'ad_id':'Int64', 'user_id':'Int64', 'action':'object'})

  • pandas分析,我们先按照ad_id分组算出所有的次数,然后再算出Clicked的次数,然后两个相除*100保留两位小数,然后我们再把所有id取出来然后在用merge左连接,把NaN值换成0,然后在排序就好了

  • 实现:

import pandas as pd

def ads_performance(ads: pd.DataFrame) -> pd.DataFrame:
    total_clicks = ads[ads['action'] == 'Clicked'].groupby('ad_id')['action'].count() --算出Clicked的次数
    total_views = ads[ads['action'] != 'Ignored'].groupby('ad_id')['action'].count() --算出Clicked和Viewed的总次数
    ctr = round(100 * total_clicks / total_views,2) --输出ctr
    ads.drop_duplicates(subset = 'ad_id', keep = 'first', inplace = True) -- 找出所有的ad_id
    ctr = ctr.reset_index(name = 'ctr') -- 重新生成索引,然后给action的列名改成ctr
    ans = pd.merge(ads[['ad_id']],ctr,left_on = 'ad_id',right_on = 'ad_id', how = 'left').fillna(0).sort_values(by = ['ctr','ad_id'], ascending = [False,True],inplace = False)   -- 左连接,然后排序
    return ans
  • 兄弟们有错误了要跟我说哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sublime Text 下载地址分享

Sublime Text官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Sublime Text最新版正式版官方版绿色版下载,Sublime Text安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123684.com/s/kPxoTd-dCnxHSublime Text官方版下载丨最新版下…

双十一可以买什么物品?重磅推荐五款好用品牌!

距离今年的双十一盛典仅剩数十日,您是否已将心爱商品添加至购物车中了呢?还在犹豫未满载的朋友也无需焦虑,特意为您精选了五款好用的宝贝推荐,旨在为您的购物清单增添几分灵感与便捷,期待能为您的双十一购物之旅增添一…

GPU 是否有朝一日可以取代 CPU?

讨论 GPU 是否能够取代 CPU,需要从两者的基本架构、设计目的、性能表现、应用领域等多个方面进行分析。虽然你提到的4060显卡的核心频率接近服务器 CPU 的频率,这看起来似乎有一些相似性,但 GPU 和 CPU 的设计思路和适用场景差异显著&#xf…

18448 最小生成树

### 思路 使用Kruskal算法求解图的最小生成树。Kruskal算法通过对所有边按权值排序,然后逐步选择最小权值的边,确保不会形成环,直到构建出最小生成树。 ### 伪代码 1. 读取输入的结点数n和边数m。 2. 读取每条边的信息,存储在边列…

羊城杯2024WP

羊城杯-2024 web web2 进题信息搜集一下,dirsearch发现了login路由可访问,先随便点一下,发现了一个文件读取: http://139.155.126.78:30148/lyrics?lyricsRain.txt 我尝试了一下: http://139.155.126.78:30148/lyrics…

【教学类-77-02】20241007青花瓷纹理纸(手工)

背景需求: 大班《我是中国人》主题下,有一个“青花瓷”的主题,各种平面绘画 这些青花瓷花瓶、盘子都是平面的,我想能不能做个立体的,所以前期设计了“青花瓷立体卡”【教学类-77-01】20241005青花瓷立体书-CSDN博客文…

构建 10 万卡 GPU 集群的技术挑战

构建 10 万卡 GPU 集群的技术挑战 摘要 揭示AI训练集群关键基础设施挑战,探讨突破现有AI瓶颈的必要性与10万GPU集群(如OpenAI、Meta)建设所面临挑战与需求。 构建网络拓扑,需权衡多层交换机成本、带宽与维护。本文对比Ethernet与…

JDBC 快速入门

JDBC 快速入门 搭建步骤代码实现数据库java 代码 搭建步骤 准备数据库官网下载数据库连接驱动jar 包。https://downloads.mysql.com/archives/c-j/创建 java 项目,在项目下创建 lib 文件夹,将下载的驱动 jar 包复制到文件夹里选中 lib 文件夹右键 ->…

通信工程学习:什么是ICP网络内容服务商

ICP:网络内容服务商 ICP,全称Internet Content Provider,即网络内容服务商,是指那些通过互联网向用户提供各种类型内容服务的组织或个人。ICP在数字化时代扮演着至关重要的角色,它们不仅是信息的传播者,更是…

微服务获取用户信息和OpenFeign传递用户

问题一: 网关已经完成登录校验并获取登录用户身份信息。但是当网关将请求转发到微服务时,微服务又该如何获取用户身份呢? 由于网关发送请求到微服务依然采用的是Http请求,因此我们可以将用户信息以请求头的方式传递到下游微服务…

机器人技术基础(1-3章坐标变换)

位置矢量的意思是B坐标系的原点O相对于A坐标系的平移变换后的矩阵: 齐次坐标最后一个数表示缩放倍数: 左边的是T形变换矩阵,右边的是需要被变换的矩阵:T形变换矩阵的左上角表示旋转,右上角表示平移,左下角最…

使用 NVIDIA H100 上的 Azure 机密计算释放隐私保护 AI 的潜力

通过 NVIDIA H100 上的 Azure 机密计算释放隐私保护 AI 的潜力 文章目录 前言一、机密计算二、使用 NVIDIA H100 Tensor Core GPU 的 Azure 机密计算1. 安全功能2. 可扩展性和可编程性三、场景1. 模型机密性2. 推理/提示机密性3. 使用私有数据进行微调4. 多方培训结论前言 这是…

71.【C语言】动态内存管理(重点)(4)

本文为数据结构打下基础 备注:数据结构需要掌握指针,结构体和动态内存管理 目录 6.常见的动态内存的错误 1.对空指针解引用 2.对动态空间的越界访问 3.对非动态内存空间进行free释放 4.使用free只释放开辟的内存空间的一部分 5.对同一块动态内存多次释放 6.动态开辟的…

多线程编程-定时器

定时器相当于一个“闹钟”,在日常生活中,我们需要闹钟的辅佐,在代码中,也经常需要“闹钟”机制(网络通信中经常需设定一个超时时间)。 一.定时器的使用 在Java标准库中,也停供了定时器的实现。…

华为OD机试 - 约瑟夫问题(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

日语发音

这里写目录标题 一个视频教你搞懂日语音调!【日语入门课】小白入门轻松学!最全的日语零基础教程合集!唱儿歌学日语~(已完结) 一个视频教你搞懂日语音调! 中文 阴平(第一声&#xff…

【d61】【Java】【力扣】【递归】3304. 找出第 K 个字符 I

思路 递归考虑:就像正常一样想出来思路,然后递归调用的地方,当作一个已经确定的量(可直接说一个值,这样就不会一直向下层想) 注意绝对不要在递归调用的地方一直往下层想,绝对不要,…

C++面试速通宝典——7

150. 数据库连接池的作用 数据库连接池的作用包括以下几个方面: 资源重用:连接池允许多个客户端共享有限的数据库连接,减少频繁创建和销毁连接的开销,从而提高资源的利用率。 统一的连接管理:连接池集中管理数据库连…

传感器模块编程实践(一)AS608指纹模块简介及驱动源码

文章目录 一.概要二.AS608模块主要技术指标三.AS608模块接线说明四.AS608模块通讯协议介绍五.AS608模块指纹录入与刷指纹流程六.STM32单片机与AS608模块指纹录入与刷指纹实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 七.CubeMX工程源代码下载八.小结 一.概要 AS608 指纹…

打印机驱动安装教程-共享打印机修复工具-打印机扫描教程

金舟打印机驱动修复软件是驱动下载软件,无法解决打印机报错、打印异常、打印机无法连接等问题。 Part 1:打印机驱动安装教程 第一步:确定电脑上的打印机服务已启动 1.1右击桌面的“此电脑”然后点击“管理”。 1.2点击左侧任务栏中的“服务…