乐趣区

关于后端:Pandas-SLS-SQL融合灵活性和高性能的数据透视

简介:Pandas 是一个非常弱小的 python 数据分析工具,也是各种数据建模的规范工具。Pandas 善于解决数字型数据和工夫序列数据。Pandas 的第一大劣势在于,封装了一些简单的代码实现过程,只须要调用接口就行了,防止了编写大量的代码。Pandas 的第二大劣势在于灵活性,能够实现自动化批量化解决简单的逻辑,这些工作是 Excel 等工具是无奈实现的。因此 Pandas 介于 Excel 和自主编写程序之间,兼具灵活性和简洁性的数据分析工具。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 npimport pandas as pdimport pymysql # sql 命令 slshost=””username=””password=””dbname=””  # project is databasesql_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 函数构建透视表。执行后果如下图:

 原文链接:https://click.aliyun.com/m/10… 本文为阿里云原创内容,未经容许不得转载。

退出移动版