iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何利用SQL和Python分别实现人流量查询
  • 241
分享到

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

2024-04-02 19:04:59 241人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

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

这篇文章主要讲解了“如何利用sqlpython分别实现人流量查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用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分别实现人流量查询这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何利用SQL和Python分别实现人流量查询

本文链接: https://www.lsjlt.com/news/60845.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 如何利用SQL和Python分别实现人流量查询
    这篇文章主要讲解了“如何利用SQL和Python分别实现人流量查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用SQL和Python分别实现人流量查...
    99+
    2024-04-02
  • vbs如何实现sql查询分析器lcx
    这篇文章将为大家详细讲解有关vbs如何实现sql查询分析器lcx,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。示例:if (lcase(right(wscript.fullname,11))=&...
    99+
    2023-06-08
  • SSH如何实现条件查询和分页查询
    这篇文章将为大家详细讲解有关SSH如何实现条件查询和分页查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、QueryHelper和PageResultQueryHel...
    99+
    2024-04-02
  • ajax如何实现分页和分页查询
    这篇文章将为大家详细讲解有关ajax如何实现分页和分页查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先为了页面的整齐与美观,我用到了bootstrap,需要引进所需要的文件包<link&nbs...
    99+
    2023-06-08
  • 如何利用axios和vue实现简易天气查询
    这篇文章主要讲解了“如何利用axios和vue实现简易天气查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用axios和vue实现简易天气查询”吧!我们先来看一下效果图,原理很简单就...
    99+
    2023-07-05
  • 如何利用Redis实现分布式地理位置查询
    如何利用Redis实现分布式地理位置查询地理位置查询在我们日常生活中随处可见,比如找附近的餐馆、定位快递包裹等。在传统的关系型数据库中,实现地理位置查询需要进行复杂的空间索引和距离计算,对于大规模的数据量来说效率较低。而Redis作为一种高...
    99+
    2023-11-07
    Redis分布式地理位置查询
  • 如何利用ChatGPT和Python实现个人助理功能
    如何利用ChatGPT和Python实现个人助理功能概述:在现代社会,随着人们生活节奏的加快,个人助理的需求也变得日益重要。ChatGPT 是一种基于深度学习的对话生成模型,它可以帮助我们实现个人助理的功能。在本文中,我们将介绍如何使用 C...
    99+
    2023-10-24
    ChatGPT Python 个人助理
  • 如何利用Python和C语言分别实现哈夫曼编码
    1.C语言实现1.1代码说明a 创建双向链表:在创建哈夫曼树的过程中,需要不断对结点进行更改和删除,所以选用双向链表的结构更容易'''C #include <stdlib.h> #include <...
    99+
    2023-05-22
    Python C语言
  • 利用Mybatis如何实现模糊查询、批量添加等功能
    利用Mybatis如何实现模糊查询、批量添加等功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。模糊查询:@Select({ "SELECT * ...
    99+
    2023-05-31
    mybatis 模糊查询
  • MySQL 普通查询、流式查询、游标查询以及使用 mybatis 如何实现
    MySQL 普通查询、流式查询、游标查询以及使用 mybatis 如何实现 MySQL 普通查询、流式查询、游标查询以及使用 mybatis 如何实现普通查询流式查询游标查询mybatis 如...
    99+
    2023-09-28
    mybatis java mysql
  • 基于Java 利用Mybatis实现oracle批量插入及分页查询
    目录1、单条数据insert2、批量数据批量insert3、创建序列4、oracle分页查询前端与后端交互,分页查询后端海量数据导出,批量查询1、单条数据insert <!--...
    99+
    2024-04-02
  • 使用MySQL如何实现分页查询
    目录一、分页1. 什么是分页2. 真分页3. 假分页4. 缓存层二、MySQL实现分页1. LIMIT用法2. 分页公式8种MySQL分页方法总结方法1: 直接使用数据库提供的SQL...
    99+
    2024-04-02
  • 如何实现用sql语句查询交叉表
    本篇内容介绍了“如何实现用sql语句查询交叉表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 如何使用SQL语句实现表的查询
    这篇文章主要介绍“如何使用SQL语句实现查询”,在日常操作中,相信很多人在如何使用SQL语句实现查询问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用SQL语句实现查询”...
    99+
    2024-04-02
  • 如何利用Python实现面部识别
    本篇内容介绍了“如何利用Python实现面部识别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于开发环境,我们将使用 Visual Stu...
    99+
    2023-06-30
  • MyBatis如何使用PageHelper实现分页查询
    目录使用PageHelper实现分页查询1、创建数据表2、创建项目2.1 创建实体类(Entity层)2.2 数据库映射层(Mapper层)3、运行测试MyBatis PageHel...
    99+
    2024-04-02
  • 如何使用Bootstrap4 + Vue2实现分页查询
    小编给大家分享一下如何使用Bootstrap4 + Vue2实现分页查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!写在前面工...
    99+
    2024-04-02
  • 使用spring data的page和pageable如何实现分页查询
    目录spring data的page和pageable实现分页查询PageablePage代码实现(Spring)SpringData通用分页查询思路实现总结spring data的...
    99+
    2022-12-08
    spring data的page spring data的pageable spring分页查询
  • 详解MyBatisPlus如何实现分页和查询操作
    目录1.定义查询字段2.修改分页函数接口3.修改分页实现方法4.修改控制层5.效果体验《SpringBoot整合MybatisPlus实现增删改查功能》在这篇文章中,我们详细介绍了分...
    99+
    2024-04-02
  • 如何利用MySQL特性实现MySQL查询结果的分页显示
    这篇文章将为大家详细讲解有关如何利用MySQL特性实现MySQL查询结果的分页显示,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在mysql中利用select语...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作