我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何利用SQL和Python分别实现人流量查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何利用SQL和Python分别实现人流量查询

这篇文章主要讲解了“如何利用SQL和Python分别实现人流量查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用SQL和Python分别实现人流量查询”吧!

案例介绍

案例来源于LeetCode,这样的需求在时间序列数据中还是较为常见的。

某市体育馆每日人流量信息被记录在stadium表的三列信息中:序号 (id)、日期 (visit_date)、 人流量  (people),找出至少连续三行人流量不少于100的记录。

如何利用SQL和Python分别实现人流量查询

思路分析

最简单的思路肯定是对stadium表进行三次笛卡尔积连接,但这种方式在数据量大时不可取,而且也不具备泛化性(譬如需求改成至少连续十行)。网上也流传着阿里的编程规范——禁止三表以上的连接。

总之,这种思路不是我们该采取的,我们需要寻找其它思路。

(1)构建等差数列

如何利用SQL和Python分别实现人流量查询

从上图中我们能发现一个规律,满足条件的数据区域在原始表和结果表中的行编号均是等差数列,两个等差数列的差值是固定的。譬如,数列A1和B1的差值均为1;数列A2和B2的差值均为2。

只要我们保证每块区域等差数列的差值各不相等,那我们就可以通过筛选差值出现的次数来筛选满足条件的区域。例如,差值2出现了4次,满足条件,那该差值对应的记录就是我们需要的数据。

构建差值的方式除了通过行编号外,也还有其它方式,大家可以想一想。

(2)数据切片

如何利用SQL和Python分别实现人流量查询

从图中可看出,if_true是辅助列,表示是否满足条件,1为True,0为False。我们要选择满足条件的区域,可通过用0对该列进行切片,得到的是全为1的不同长度的小数列,根据每个小数列的长度来筛选满足条件的区域。

在图中就是得到了长度为a和b的数列,通过计算数列的长度来找出满足条件的区域。

程序实现

上节我们选择了两种思路,其中Python两种思路都可以实现,SQL可实现第一种思路。本节用SQL实现第一种思路,用Python实现第二种思路。

(1)SQL

select id,visit_date,people from (select t2.*,count(1) over(partition by rn2) rn3 from  (selectt1.*,rn1 - row_number() over(order by visit_date) rn2 from (select *,row_number() over() as rn1 from stadium order by visit_date)t1 #t1表对日期升序排列后生成行编号 where people>=100) t2 #t2表筛选人数不低于100的数据,并用原行编号减去新生成的行编号得到差值 where 1=1) t3 #t3表统计每类差值出现的次数 where rn3>2 #筛选次数大于2的数据即为所需要的数据

因为实际中表中的ID几乎都不是连续的数字,所以为了保证泛化性就先生成了行编号,这样就不用依赖于ID了。

除此之外也还可以通过用户变量等方式实现,大家可以试着想一想。

(2)Python

import pandas as pd dt=pd.DataFrame({"id":range(1,9),                   "visit_date":pd.date_range(start="2017-01-01",periods=8),                   "people":[10,109,150,99,145,1455,199,188]}) dt["col1"]=dt["people"].apply(lambda x : 1 if x>=100 else 0) #生成人数是否不低于100的新列 dt['counter'] = (dt["col1"]==0).cumsum() #按照col1列是否为0计算累计和,标记每个连续区域 dt = dt[dt["col1"] !=0] #剔除人数低于100的记录 gb=dt.groupby("counter")["id"].count() # 统计各标记值的次数 result=dt[dt["counter"].isin(gb[gb>2].index)] #筛选满足条件的数据

这里有一点需要注意,如果直接将col1列转为字符串按0进行切片的话,虽然可以求出满足条件的区域数量和长度,但很难再寻找到具体的区域。

split_col1="".join([str(i) for i in dt["col1"]]).split("0")

原本是按照的这种思路,但发现寻找长度符合字符串在原列表中的索引时会比较麻烦,尤其是当需要查找多个索引值时。

但此种思路还是非常重要,因为在只是计算连续区域的最大值时会非常简单。

感谢各位的阅读,以上就是“如何利用SQL和Python分别实现人流量查询”的内容了,经过本文的学习后,相信大家对如何利用SQL和Python分别实现人流量查询这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何利用SQL和Python分别实现人流量查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何利用axios和vue实现简易天气查询

这篇文章主要讲解了“如何利用axios和vue实现简易天气查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用axios和vue实现简易天气查询”吧!我们先来看一下效果图,原理很简单就
2023-07-05

如何利用Redis实现分布式地理位置查询

如何利用Redis实现分布式地理位置查询地理位置查询在我们日常生活中随处可见,比如找附近的餐馆、定位快递包裹等。在传统的关系型数据库中,实现地理位置查询需要进行复杂的空间索引和距离计算,对于大规模的数据量来说效率较低。而Redis作为一种高
如何利用Redis实现分布式地理位置查询
2023-11-07

如何利用ChatGPT和Python实现个人助理功能

如何利用ChatGPT和Python实现个人助理功能概述:在现代社会,随着人们生活节奏的加快,个人助理的需求也变得日益重要。ChatGPT 是一种基于深度学习的对话生成模型,它可以帮助我们实现个人助理的功能。在本文中,我们将介绍如何使用 C
2023-10-24

利用Mybatis如何实现模糊查询、批量添加等功能

利用Mybatis如何实现模糊查询、批量添加等功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。模糊查询:@Select({ "SELECT * FROM accou
2023-05-31

如何利用ChatGPT和Python实现用户意图识别功能

如何利用ChatGPT和Python实现用户意图识别功能引言:在当今的数字化时代,人工智能技术逐渐成为各个领域中不可或缺的一部分。其中,自然语言处理(Natural Language Processing,NLP)技术的发展使得机器能够理解
2023-10-27

使用spring data的page和pageable如何实现分页查询

这篇文章主要介绍了使用spring data的page和pageable如何实现分页查询,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-08

如何利用ChatGPT和Python实现聊天机器人性能优化

如何利用ChatGPT和Python实现聊天机器人性能优化摘要:随着人工智能技术的不断发展,聊天机器人已成为各种应用领域中的重要工具。本文将介绍如何利用ChatGPT和Python编程语言实现聊天机器人的性能优化,并提供具体的代码示例。引言
2023-10-27

如何利用ChatGPT和Python实现对话历史分析

如何利用ChatGPT和Python实现对话历史分析引言:人工智能的发展给自然语言处理带来了重大突破。OpenAI的ChatGPT模型是一种强大的语言生成模型,能够生成连贯、合理的文本回复。本文将介绍如何使用ChatGPT和Python实现
2023-10-25

如何利用ChatGPT和Python实现情感分析功能

如何利用ChatGPT和Python实现情感分析功能介绍ChatGPTChatGPT是OpenAI于2021年发布的一种基于强化学习的生成式预训练模型,它采用了强大的语言模型来生成连贯的对话。ChatGPT可以用于各种任务,包括情感分析。导
2023-10-24

如何利用ChatGPT和Python实现用户画像分析功能

如何利用ChatGPT和Python实现用户画像分析功能引言:随着互联网的迅猛发展和普及,人们在网络上留下了大量的个人信息。对于企业来说,了解用户的兴趣和偏好,为其提供个性化的服务,已经成为提高用户黏性和市场竞争力的重要手段之一。本文将介绍
2023-10-27

如何利用ChatGPT和Python实现对话情感分析功能

如何利用ChatGPT和Python实现对话情感分析功能引言:随着人工智能和自然语言处理的快速发展,对话情感分析成为了一个备受关注的研究领域。ChatGPT作为一个先进的生成式对话模型,为我们提供了一个很好的工具来实现对话情感分析。本文将介
2023-10-24

如何实现MySQL底层优化:查询缓存的使用和性能分析

如何实现MySQL底层优化:查询缓存的使用和性能分析MySQL是一种常用的关系型数据库管理系统,在大数据量的场景下,优化数据库性能是非常重要的。其中,查询缓存是一个可以帮助提高MySQL性能的重要组件。本文将介绍如何使用查询缓存以及如何进行
如何实现MySQL底层优化:查询缓存的使用和性能分析
2023-11-09

如何使用MySQL和Ruby实现一个简单的数据查询分析功能

要使用MySQL和Ruby实现一个简单的数据查询分析功能,首先需要确保已经安装了MySQL数据库和Ruby编程语言。下面是一个简单的步骤指南:1. 安装MySQL数据库:可以从MySQL官方网站下载并安装MySQL数据库。2. 安装Ruby
2023-10-10

如何实现MySQL底层优化:查询缓存的高级使用和性能分析

如何实现MySQL底层优化:查询缓存的高级使用和性能分析摘要:MySQL是一款广泛使用的关系型数据库管理系统,它的查询缓存功能可以有效提升查询性能。本文将介绍MySQL查询缓存的高级使用方法和性能分析,包括查询缓存的启用、使用查询缓存实例、
如何实现MySQL底层优化:查询缓存的高级使用和性能分析
2023-11-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录