Pandas+ SLS SQL:融合灵活性和高性能的数据透视

Pandas是什么

Pandas是一个十分强大的python数据分析工具,也是各种数据建模的标准工具。Pandas擅长处理数字型数据和时间序列数据。Pandas的第一大优势在于,封装了一些复杂的代码实现过程,只需要调用接口就行了,避免了编写大量的代码。Pandas的第二大优势在于灵活性,可以实现自动化批量化处理复杂的逻辑,这些工作是Excel等工具是无法完成的。因而Pandas介于Excel和自主编写程序之间,兼具灵活性和简洁性的数据分析工具。

在输入上,Pandas支持读取多种格式的文件,包括csv、orc、xml、json,也支持读取分布式文件系统HDFS,此外还支持通过jdbc协议读取mysql或兼容mysql协议的数仓。输入的数据会转换成内存中的数据结构DataFrame,之后的数据分析就是围绕着DataFrame进行。

在输出上,pandas可以实现非常震撼的可视化效果,对接众多赏心悦目的可视化库,可以实现动态数据交互效果。

pandas毕竟是一种python脚本语言,性能上一般,只能处理少量数据,跟现代化的数仓的计算能力差别是比较大的。但是如此灵活的pandas分析,能否和数仓相结合,赋予数仓更灵活的数据分析能力,同时获得大规模数据的分析能力呢?

SQL语言的优势和缺点

SQL是目前使用最为广泛的数据分析语言,SQL自从1980年代在IBM研发出来之后,立即成为各种数据分析系统的标准语言。究其原因,SQL是一种声明式语法,用户只需要声明想要的结果,不必指定获取结果的过程。这种方式有两个好处,一方面,如何以最高性能最小代价获得计算结果,需要编写复杂的算法,乃至了解机器的硬件特性,这需要专门的数据库内核工程师才能做到;对于数据分析师而言,这个要求有点过于复杂。因而声明式语法,解放了数据分析师的工作量,降低了数据分析门槛,扩大了SQL的受众。另一方面,没有指定运行过程,则给了数据库内核工程师们更大的自由度去生成最佳的执行计划。这是SQL的优势。

SQL的理论基础来自于关系代数,任何一个操作的对象都是关系,任何操作的结果也是一个关系。关系+操作生成一个新的关系。任何时刻,用户都可以看到一个关系实体。这套极强的理论基础,可以让一个SQL语句无限扩展,在任意时刻都能获得一个关系,再附加一个操作,变成另外一个关系。

由于SQL是基于关系代数和关系模型,关系模型中的关系这个实体,我们可以把它想象成一个二维的表格包含多行多列,行数无限制,而列数则是有限制的。行数是动态的,可以是0行,也可以是无限行。列数则是静态的,不可变更的,不管有无数据,都是固定的列数输出。静态列的这种方法,也限制了SQL在一些场景的应用。两个典型的场景是矩阵转置或者生成透视表(交叉表)。这两种场景下,列的个数都是动态的。因而SQL需要部分借助于编程才能实现完整的数据分析。

SLS SQL的优势

SQL只是一个语法表现成,是用户和数仓系统交互的语言。而数仓的真正强大之处在于它的内核。SLS日志数仓,采用SQL为语法接口,借助于云原生的分布式架构,可以实现query级别的弹性分析能力,可以实现单次分析千亿条数据的能力。

Pandas具备分析灵活性,SLS具备强大的SQL分析能力。两者融合,既能享受SLS强大的SQL分析能力,又能借助Pandas的灵活的数据分析和分析库。那么两者怎么结合呢?

Pandas连接SLS 做融合分析

Pandas支持jdbc接口读取数据,SLS也支持jdbc协议。因而Pandas可以通过jdbc协议连接SLS。对于分析任务中的比较重的计算,通过SQL传递给SLS计算;对于比较灵活的分析、SQL完成不了的分析,则在Pandas上做二次分析和可视化。例如构建透视表或者交叉表:先通过SQ L完成两个维度的交叉计算,这个过程往往计算量比较大;再通过Pandas完成行列转换,展示成二维表。

一个例子:

import numpy as np
import pandas as pd
import pymysql# sql 命令
slshost=""
username=""
password=""
dbname=""  # project is database
sql_cmd = "select method,status ,count(1) as pv from access_log group by method, status limit 1000"
con = pymysql.connect(host=slshost, port=10005,user=username, password=password, database=dbname, charset='utf8', use_unicode=True)
data = pd.read_sql(sql_cmd, con)
tab=pd.pivot_table(data,values="pv",index="status",columns="method" )
print(tab)

例子中的SQL,分析nginx访问日志,计算method和status两个维度的pv。再调用pandas的pivot_table函数构建透视表。

执行结果如下图:

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

iLogtail 开源之路

2022年6月底,阿里云iLogtail代码完整开源,正式发布了完整功能的iLogtail社区版。iLogtail作为阿里云SLS官方标配的采集器,多年以来一直稳定服务阿里集团、蚂蚁集团以及众多公有云上的企业客户,目前已经有千万级的安装量&#xff0…

迁移 Nacos 和 ZooKeeper,有了新工具

背景 注册中心迁移在行业中主要有两个方案,一个是双注册双订阅模式(类似数据库双写),一个是 Sync 模式(类似于数据库 DTS);MSE 同时支持了两种模式,对于开通 MSE 服务治理客户&…

判断子字符串是否出现在主字符串内

//strstr(string,search)#include <stdio.h>#include <string.h>// 从str1中查找str2的个数&#xff0c;并返回int findChildCnt(char* str1, char* str2){int len strlen(str2);int cnt 0;while (str1 strstr(str1, str2)) // 如果查找到,则执行循环&#xff0…

基于 Serverless+OSS 分分钟实现图片秒变素描

场景介绍 小明接到学校老师安排的任务&#xff0c;需要批量将班级里同学们拍的普通照片转换为素描图&#xff0c;供课堂游戏使用&#xff0c;于是求助到程序员老爸&#xff0c;机智的程序员老爸分分钟用几行Python代码解决&#xff1a;在阿里云Serverless函数计算服务中部署普…

C++ Stacks(堆栈)

C Stack&#xff08;堆栈&#xff09; 是一个容器类的改编&#xff0c;为程序员提供了堆栈的全部功能&#xff0c;——也就是说实现了一个先进后出&#xff08;FILO&#xff09;的数据结构。 操作比较和分配堆栈empty()堆栈为空则返回真pop()移除栈顶元素push()在栈顶增加元素…

解析 RocketMQ 业务消息 - “顺序消息”

引言 Apache RocketMQ 诞生至今&#xff0c;历经十余年大规模业务稳定性打磨&#xff0c;服务了阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案&#xff0c;RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。本篇将继续业务消息…

C++ Lists(链表)

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除&#xff0c;但是随机访问却比较慢. assign()给list赋值back()返回最后一个元素begin()返回指向第一个元素的迭代器clear()删除所有元素empty()如果list是空的则返回trueend()返回末尾的迭代器e…

Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

阿里云原生开源的混部系统 Koordinator 基于阿里超大规模混部生产实践经验而来&#xff0c;旨在为用户打造云原生场景下接入成本最低、混部效率最佳的解决方案&#xff0c;助力用户企业实现云原生后提升计算资源利用率、降低 IT 成本。 经过社区多位成员的贡献&#xff0c;Koor…

KubeVela Maintainer 徐佳航:什么样的开源项目将具有可延续的生命力?

云原生的技术价值喻示着它就是未来&#xff0c;加入到一个具有可延续性生命力的开源社区&#xff0c;可以帮助我们更快地到达那里。——徐佳航&#xff0c;KubeVela Maintainer&#xff0c;来自招商银行基础设施研发中心云平台及运维平台开发团队。来自招商银行基础设施研发中心…

C++ Queues(队列)

C队列是一种容器适配器&#xff0c;它给予程序员一种先进先出(FIFO)的数据结构。 back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的个数

龙蜥社区首推“分层分类”顶设 发展以云为终态的开源产业创新生态

在刚刚结束的 2022 开放原子全球开源峰会 OpenAnolis 分论坛上&#xff0c;龙蜥社区技术委员会主席杨勇做了《OpenAnolis 社区技术发展报告》的主题演讲&#xff0c;分享龙蜥社区如何从 0 到 1 实现原生社区布局&#xff0c;以及发展以云为终态的开源产业创新生态。 全文整理如…

友邦人寿可观测体系设计与落地

业务场景与挑战 友邦保险是香港联合交易所上市的人寿保险集团&#xff0c;覆盖 18 个市场。截至 2021 年 12 月 31 号&#xff0c;总资产 3400 亿美元。 友邦保险于 1992 年在上海设立分公司&#xff0c;是改革开放后最早一批获发个人人身保险业务营业执照的非本土保险机构之…

如何写出有效的单元测试

什么是单元测试 《单元测试的艺术》中对单元测试的定义&#xff1a; 一个单元测试是一段自动化的代码&#xff0c;这段代码调用被测试的工作单元&#xff0c;之后对这个单元的单个最终结果的某些假设进行校验。 单元测试几乎都是用单元测试框架编写的&#xff1b;只要产品代…

测试环境不稳定复杂的必然性及其对策

这篇文章想要讲的&#xff0c;的确是两件事情&#xff1a; 为什么测试环境的不稳定是必然的&#xff0c;怎么让它尽量稳定一点&#xff1f;为什么测试环境比生产环境更复杂&#xff0c;怎么让它尽量简单一点&#xff1f; 此外&#xff0c;还会谈一谈对测试环境和生产环境的区别…

【计算几何】线段相交

问题描述&#xff1a;已知两条线段P1P2和Q1Q2&#xff0c;判断P1P2和Q1Q2是否相交&#xff0c;若相交&#xff0c;求出交点。 两条线段的位置关系可以分为三类&#xff1a;有重合部分、无重合部分但有交点、无交点。 算法的步骤如下&#xff1a; 1.快速排斥实验。 设以线段…

代码圈复杂度治理小结

网上有个段子&#xff0c;说建筑工程师不会轻易答应会给摩天大楼增加一个地下室&#xff0c;但代码开发工程师却经常在干这样的事&#xff0c;并且总有人会对你说“这个需求很简单”。到土里埋个雷&#xff0c;这确实不复杂&#xff0c;但我们往往面临的真实场景其实是“在一片…

向量的叉积

向量的叉积性质都忘完了……但是它可以用来判断点在直线的某侧。进而可以解决点是否在三角形内&#xff0c;两个矩形是否重叠等问题。向量的叉积的模表示这两个向量围成的平行四边形的面积。 设矢量P ( x1, y1 )&#xff0c;Q ( x2, y2 )&#xff0c;则矢量叉积定义为由(0,0)…

MSE 治理中心重磅升级-流量治理、数据库治理、同 AZ 优先

本次 MSE 治理中心在限流降级、数据库治理及同 AZ 优先方面进行了重磅升级&#xff0c;对微服务治理的弹性、依赖中间件的稳定性及流量调度的性能进行全面增强&#xff0c;致力于打造云原生时代的微服务治理平台。 前情回顾 在介绍升级能力之前&#xff0c;先简要回顾 MSE 产…

1801 不重复的三位数

1801 不重复的三位数 Time Limit : 1000 MS | Memory Limit : 65536 KBSubmits : 16 | Solved : 4 Description 给定一个正整数n&#xff0c;则1,2,...,n这n个数字能组成多少个互不相同且无重复数字的三位数。Input 输入一个正整数n ( 3 < n < 9 )。Output 先输出三位数的…

基于阿里云 Serverless 快速部署 Function 的极致体验

1.Serverless 前世今生 1.1 Serverless 背景介绍 云计算的不断发展&#xff0c;涌现出很多改变传统IT架构和运维方式的新技术&#xff0c;而以虚拟机、容器、微服务为代表的技术更是在各个层面不断提升云服务的技术能力&#xff0c;它们将应用和环境中很多通用能力变成了一种…