简介: 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...本文为阿里云原创内容,未经容许不得转载。