力扣之1322.广告效果

news/2024/12/22 0:46:52/
  • 题目:

  • 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 pddef 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) --输出ctrads.drop_duplicates(subset = 'ad_id', keep = 'first', inplace = True) -- 找出所有的ad_idctr = ctr.reset_index(name = 'ctr') -- 重新生成索引,然后给action的列名改成ctrans = 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.ppmy.cn/news/1537028.html

相关文章

【Linux】Shell脚本基础+条件判断与循环控制

目录 一、介绍 1. Linux提供的Shell解析器 2. bash和sh关系 3. Centos默认的Shell解析器是bash 二、定义 1. 变量名的定义规则 2. 等号周围没有空格 3. 查看变量 4. 删除变量 5. 正确地定义数组 6. 将局部环境变量提升为全局 7. 正确选择引号 8. 特殊变量名 三…

LeetCode 3162.优质数对的总数 I:暴力模拟

【LetMeFly】3162.优质数对的总数 I:暴力模拟 力扣题目链接:https://leetcode.cn/problems/find-the-number-of-good-pairs-i/ 给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j…

大语言模型入门(四)——检索增强生成(RAG)

一、什么是检索增强生成 检索增强生成(Retrieval-Augmented Generation,RAG)由Facebook AI Research(FAIR)团队于2020年首次提出,这是一种结合了信息检索技术与语言生成模型的人工智能技术。它通过从外部知…

ChatGPT实时语音将于本周向免费用户推出:OpenAI DevDay 2024详细解读

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

Swift 方法

Swift 方法 Swift 是一种强大的编程语言,用于开发 iOS 和 macOS 应用程序。在 Swift 中,方法是一段代码,它定义了执行特定任务的步骤。方法可以提高代码的可重用性和可维护性。本文将介绍 Swift 方法的基本概念、语法和用法。 1. 基本概念 …

智云人才推荐与管理系统

1.产品介绍 产品名称:智云人才推荐与管理系统 主要功能: 智能人才匹配引擎 功能描述:利用先进的人工智能算法,根据企业岗位需求(如技能要求、工作经验、教育背景等)自动从海量人才库中筛选并推荐最合适的…

c语言中有关指针的题型整理,以及一些详解

(1)应注意其二维数组的书写形式,以及逗号表达式的 (2)要注意数组名表示首元素地址,解引用之后表示元素,&a表示整个数组,1表示指向后面的,ptr-1又指向数组末尾&#x…

深度解析企业数据治理目标,提升核心竞争力

在当今数据驱动企业发展的时代,数据治理在企业管理当中显得尤为重要。随着企业的不断壮大和发展,数据资产也逐步快速扩张,企业的日常管理和运营也随之难度增加,如何有效管理和利用这些数据成为企业成功的关键。企业数据治理的目标…