《PolarDB forPG:用 SQL 做数据分析》|学习笔记

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 快速学习《PolarDB forPG:用 SQL 做数据分析》。

开发者学堂课程【PolarDB for PostgreSQL 入门:《PolarDB forPG:用 SQL 做数据分析》】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/813/detail/13916


《PolarDB forPG:用 SQL 做数据分析》

 

内容介绍

一.环境搭建

二.案例演示

三.功能总结

 

数据分析是近几年非常热门的话题,在金融、电商、制造等众多行业都需要用到数据分析。数据分析工具多种多样,这节课用 PolarDB 展示怎么用纯 SQL 做数据分析.后面提到 PolarDB 即使 PolarDB  forPG(不再赘述)。

SQL 是一门非常强大的数据分析,围绕二维表数据结构除了提供增删改查基础功能之外,还提供了非常完整的数据操作,数据查询和数据处理功能,此外在今天的课程里面也会展示通过 PolarDB 的插件是可以实现用 SQL 做数据可视化展示,今天的课程不是专业的数据分析入门课程,所以不需要大家有数据分析的背景,并且为方便演示整个数据分析过程,我是刻意演化过程,整个过程会介绍一些 SQL 简单语法,所以不需要有太多的背景知识,大家可以在自己的电脑上安装一个 PolarDB 进行练习。 

首先来看一下今天的课程内容今天的课程内容有三个部分组成,首先我会介绍一下如何搭建 Pro 的数据分析环境,包括安装和相关的插件,再介绍简单的数据分析的一些知识,并且通过两个案例介绍怎么用 SQL 去做数据分析,介绍的过程里面我会穿插的讲一些收获的基本基础知识,最后总结今天学到的一些关于 polarDB 的知识点。

 

一.环境搭建

1.安装 polardDB

搭建环境完成之后,可以通过 polarDB 的数据库的命令行客户端,命令行的工具运行数据分析的 sql,前面我们已经提到用 SQL 去做数据可视化的展示,所以在今天去运行 sql 的时候,需要在命令行下面去展示图片,就需要大家使用的终端软件里面能够支持这种图片格式,罗列了几款长期的操作系统,上面能够支持显示图片的终端,比如说使用苹果操作系统,推荐用 iQOO,如果使用的是linux操作系统,可以有自带的终端桥,如果用的是 Windows,可以 meanty。

2.环境搭建方法

搭建的方法有两种。

第一种,使用源码搭建,从源码开始一步一步进行手工编译。使用此方式可以通过图片上的链接进行软件安装。

第二种方法比较简单,推荐如果电脑上存在 docker 可以尝试在本地进行搭建 polarDB,边看视频边进行练习,环境搭建好后。启动 SQL 进入运行环境。可以尝试使用 skleam 上的 sql。若在屏幕上查看到安装图片,即为安装成功。

因为下载和安装比较耗时,在这里不进行操作。

image.png 

 

二.案例演示

有很多工作要做掌护,比较繁琐并且融残的,但是我们大致可以把它分成以下四个步骤,第一步要获取数据,第二步是处理数据,第三步是分析数据以及第四步是预测数据。获取数据其实就是把数据加载到数据分析的工具里面,所以先找到要分析的数据,然后将数据导入到你的工具里面,数据可能是散落在互联网上,也可能是在某个文件里面,总而言之,要先在电脑上拿到你的数据时候要去分析的数据,这些刚拿到手的数据通常格式数不正确,比如说如果你是下载的网页,格式可能是很少没有格式,然后有一些是没有格式,有些是呃基层格式等等,甚至还有一些数据格式自定义的,就不是一种通用的格式,为了分析这些数据,我们得先把这些数据做一些格式转换,把它转换成类似于像sv或者局层的各方面处理的一些结构化格式,最后把这些数据导入到分析工具里面在现实的工作里面除了数据格式的不统一之外,数据的往往是的内容往往也是参差不齐的,很少直接拿到手就是一份非常干净,非常完整的数据。

比如有些数据是会缺失一些特征,有些数据是明显能看出来是重复的或者是错误的或者异常的。

 image.png

1. 获取数据

获取数据其实就是把数据加载到数据分析的工具里面

2. 处理数据

3. 分析数据

产生的数据,所以我们还需要对数据做一些进一步的处理,比如说我们如果遇到缺失的数据,就可以提出默认值,然后有些明显是重复的或者是异常的数据,那我们就把它过滤掉,这个过程一般也称为特征工程,是耗时非常长的一个过程,大家在做数据分析的时候,这个过程可能是占用了你特别长的一个时间。

然后终于我们把数据整理的干干净净,非常整齐,这时候才能真正开始去做数据分析,但是数据分析这个过程目前为止还是非常依赖人工的,然后需要大家凭借自己的经验来观察数据,到这个时候一般我们会考虑说先把数据以一种可视化的方式展示出来,通过人工去观察,不断的去寻找其特征,最后用一些复杂度合适的一个模型去训练出来,并且不断的去调参数去调用,然后有了模型之后

4. 预测数据

然后有了模型之后,可以预测新的数据,并且根据结果不断的去优化升级模型,讲到这里的时候,大家可能会有一个疑问,这好像是做机器学习的模型训练没错,因为机器学习的本质其实就是通过数学建模来理解数据和分析数据,所以如果机器学习是一种大家可以把机器学习当成一种数据分析的方法,并且在接下来的案例里面,也会用到一些机器学习的算法来帮助我们更好的理解和分析数据。

(1)鸢尾花分类案例

数据集介绍

鸢尾花卉数据集(英文:Iris flower data set)是一类多重变量分析的数据集.最初由埃德加安德森从加拿大加斯帕半岛上的鸢尾属花朵中提取的形态学变异数据,后由罗纳德费雪作为判别分析的一个例子,运用到统计学中,该致据失包含了150个样本,都属于鸢尾属下的三个亚属,分别足山这尾、变色这尾和维吉尼亚这尾.样本包含花碧与花的长度和宽度四个特征,基于这四个特征的集合,可分析以确定其属种,是非常经典的分类问题数据集。

下载地址

中文维基百科:http://archive ics uci.edu/ml/datasets/Iris

插件预置数据:home/postgres/datasets/ns.csv

花萼长度

花萼宽度

花瓣长度

花瓣宽度

属种

5.1

3.5

1.4

0.2

setosa

4.9

3.0

1.4

0.2

setosa

4.7

3.2

1.3

0.2

setosa

4.6

3.1

1.5

0.2

setosa

5.0

3.6

1.4

0.2

setosa

山鸢尾数据

花萼长度

花萼宽度

花瓣长度

花瓣宽度

属种

7.0

3.2

4.7

1.4

versicolor

6.4

3.2

4.5

1.5

versicolor

6.9

3.1

4.9

1.5

versicolor

5.5

2.3

4.0

1.3

versicolor

6.5

2.8

4.6

1.5

versicolor

变色鸷尾数据

花萼长度

花萼宽度

花瓣长度

花瓣宽度

属种

6.3

3.3

6.0

2.5

Virginica

5.8

2.7

5.1

1.9

Virginica

7.1

3.0

5.9

2.1

Virginica

6.3

2.9

5.6

1.8

Virginica

6.5

3.0

5.8

2.2

Virginica

 

维吉尼亚鸿尾数据

分析的工具是多种多样的,每种工具的数据保存是不同的,比如如果是用 excel 来做数据分析,用到的就是 excel

的表格,如果是其他用做数据分析比较常见的有二维表,在 sql 所有的数据都是以一种数据库表格的形式保存和记录的,所以要先创建出一张数据库的表来保存数据,大家可以打开链接看语法。

建表语句参考

(PostgreSQL 13中文文档》-SQl 命令

-CREATE TABLE:http://www.postgres.cn//docs/13sal-createtable.html

创建数据统一的表示形式:二维表

create table flowers

sepal_length float8

sepal width float8,

patal_length float8,

patal width float8,

species text

);

polarDB 是基于开源的数据库。对SQL支持比较好。创建一个 flowers 的表包括五个字段,前面四个类型是 double的浮点数。分别是雨花般的长度和宽度,最后一个字段的类型是 text,可以保存任意长度的字段并且性能较好。用此来保存花的品种属性。

添加表与字段的注释

comment on table f1 owers is'鸢尾花数据';

comment on column flowers.sepal_length is'花萼长度';

comment on column f1 owers.sepal_width is'花萼宽度';

comment on column f1 owers.patal_1 ength is'花长度';

comment on column f1 owers.patal_width is'花宽度';

comment on column f1 owers.species is'属种';

给数据库字段和表添加注释是一种非常好的习惯,它可以方便我们理解数据的含义内容.所以若大家创建表语字段,可以尽早将其进行注释。

COPY 语句参考

·《PostgreSQL13中文文档》-SQL 命令

-COPY:http://www.postgres..cn/docs/13 ql-copy.html

数据导入:从 CSV 到数据库表

数据导出:从数据库表到 CSV

\copy flowers

from datasets/iris.csv'

with (format 'csv',

header true,

delimiter ',')

\copy flowers

to 'datasets/test.csv'

with (format 'csv',

header true,

delimiter ',')

当数据量小时可以通过手工这样数据导入,数据量大时手工导入不太可能,比如原尾花数据150行,比较难以手工导入。polarDB 提供 copy 命令,可以批量导入或数据导出从而简便,比如大家看那个 PPT 上的代码。从 CSV 导入或导出数据,规定了表的格式分割符是逗号.

演示:

在苹果上进行演示此时 polarDB 已经被打开

[root@ea81c9721241 datasets]#ls

boston.csv diabetes.csv

digits.csv iris.csv shares.csv

[root@ea81c9721241 datasets]#pwd

/home/postgres/datasets

[root@ea81c9721241 datasets]#head iris.csv

sepal_length,sepal_width,patal_length,patal_width,species

5.1,3.5,1.4,0.2,setosa

4.9,3.0,1.4,0.2,setosa

4.7,3.2,1.3,0.2,setosa

4.6,3.1,1.5,0.2,setosa

5.0,3.6,1.4,0.2,setosa

5.4,3.9,1.7,0.4,set0sa

4.6,3.4,1.4,0.3,setosa

5.0,3.4,1.5,0.2,setosa

4.4,2.9,1.4,.2,setosa

[root@ea81c9721241 datasets]#wc -l iris.csv

151 iris.csv

[root@ea81c9721241 datasets]#

额外包含标题,现在将此数据导入 polarDB 中

image.png

查看数据库可以正常使用  

展现出一张 polarDB 图片,即可以使用。

此时是一张空表,添加数据此时可以观察到有5个字段,浮点型(前四个)和字符型。 

\copy flowers

from datasets/iris.csv'

with (format 'csv',

header true,

delimiter ',')

进行数据导入

image.png

此时导入150行

导出

image.png

预置数据集介绍

·插件已预置了一些常见的数据集,其中包括高尾花数据集,

·预置数据集文件放置在容器的/home/postgres/datasets 目录下。

·插件同时提供了一些以 Ioad”开头的函数,可自动创建数据库表,并导入数据

·执行门 df load“查看预置的导入函数.

预置数据集清单

·load_boston:导入波士倾房价数据集,可用于回归分析.数据位于 home/postgres/datasets/boston.csv.

·load iris:导入鸢尾花数据集,可用于分类分析.数据位于/home/postgres/datasets/.is.csv.

·load diabetes:导入穗尿病数据集,可用于回归分析.数据位于 home/postgres/datasets/,diabetes.csv.

·load_digits:导入手写数字数据集,可用于分类分析.数据位于/home/postgres/datasets/digits.csv.

·load_shares:导入苹果公司股价数据集,可用于回归分析.数据位于/home/postgres/,datasets/shares.csv,

1.修改字段默认值语句参考

·(PostgreSQL13中文文档》-SQL 命令

-ALTER TABLE:http://www.postgres.(n/dos/13/sql-altertable.html

新建表时添加字段默认值

create table flowers

sepal_length float8 default 0,

sepal_width float8 default 0,

patal_length float8 default 0,

patal_width float8 default 0,

species text

鸢尾花150条是非常干净,非常整齐的数据,在现实的工作当中,数据往往会有很多缺失值,或者说有很多异常值需要对数据新作一本清晰,比如刚刚插入的一条新的文化的样本,但是部分的数据缺失,在时希望分析工具能自动的帮我们在数据缺失的时填充上一些默认值,比如我们填充已经提供了一种叫数据库表字段默认值的功能,在数据库知道缺失的时候,就会自动使默认值,补充给这个制造加上问题,然后给出库的表示添加后的方法能用第一种就是在表不存在的时候,创建表的时候直接指定字段的默认值,就像 PPT 上面左边的代码。

另外一种是已经创建好,制作也已经存在,这时候想要给字段去添加上新的一个默认值,或者说修改相关,同右侧一样,然后给创建的表四个字段加上默认值的具体的用法,可以根据 PPT 上的文档链接去查看。

已存在的表字段添加默认值

alter table flowers

alter column sepal_length

set default 0,

alter column sepal_width

set default 0,

alter column patal_length

);

set default 0,

alter column patal_width

set default 0;

定义完成命令符号可以通过 insert 插入命令值,Insert 命令具体用法可以通过文档进行查看 insert 的两种命令方法。比如第一种同代码左侧,不去指定需要用到的列。第二种方法如同右侧代码指定需要的列。

问 copy 到如数据时会使用到默认值吗?

image.png

此时没有默认值,添加一段默认值

image.png

此时默认值为0.

另一种加入默认值:

image.png

用 copy 导入不存在默认值

image.png

但是每次导入数据之后都要执行这四条语句,其实很麻烦,有没有办法一次性有4次行的领域呢?这里就要介绍一个非常强大的功能,叫用 UDF 户定义的函数体积非常强大,甚至可以把它看成是一种发平台就放起来的位置。

允许我们用多种不同的编程语言来写函数,并且呢是不用重启数据库,更不用重新逼你数据库内核就可以直接动态的去创建和使用不同的状态函数,使用函数。插入数据语句参考

·(PostgreSQL13中文文档》-SQL 命令-CREATE FUNCTION:http://www.postgres.<n/docs/13/sqL(reatefunction html

创建 UDF(User Defined Function)

create function update_null_to_zero()returns void as $begin

update flowers set sepal_length 0 where sepal_length is null;

update flowers set sepal width =0 where sepal width is null;

update frowers set patal_length =0 where patal_length is null;

update flowers set patal_width =0 where patal_width is null;

end;$language plpgsql;

调用 UDF:像用 FaaS 一样用 UDF

select update null to zero();

大家可以参考一下 PPT,在 PPT 上面大家可以看到我用了 user 中的语言来创建了一个 q 语言,自带的计算器扩展,除此之外你还可以用原生的,或者其他语言写 UDF。

提到函数,必须有返回值,里面除了开始和结尾的总共也就是四句更新语句,函数定义完了之后调用函数的方法,之前大家也看到了 select,就在函数名和名字名前加个 select 就可以。

出现问题:能否在插入数据后自动调用 UDF?

可以的。

数据发生变更之前或者变更之后自动运行,正好符合我们的产品,表里的数据并更完之后去执行,触发器的定义是x,可以看文档,如果一个 udf 想要对触发器能够调用,还需要调整,比如返回结果不能是 void,并且至少要返回一个结果出来,然后用命令创建一个触发器,在每条插入表的语句执行完之后自动的去调用,可以很大负责任函数。

插入数据语句参考

(PostgreSQL13中文文档》-SQL 命令-CREATE TRIGGER:http://www.postgres.cn/docs/13 ql-createtriggerhtml

修改 UDF 的返回值为 TRIGGER

drop function if exists update_null_to_zero();

create function update null_to zero()returns TRIGGER as$

begin ..RETURN NULL;end;$language plpgsql;

后置触发器:每句插入语句执行后都填充缺失值

create trigger flowers_after_insert_trigger

after insert on flowers

for each statement

execute procedre update null to zero();

返回结果,return

image.png

创建并调用

image.png

被改成触发器

image.png

插入前置触发器过滤异常数据

创建函数:排除所有值都为空的样本

create function ignore_empty_sample()returns trigger as $begin

if new.sepal_length is null

and new.sepal width is null

and new.patal length is null

and new.patal_width is null then

return null;

else

return new;

end if;

end;$language plpgsql;

前置触发器:每行记录插入前都检查是否是异常值

create trigger flowers_before_insert_trigger before insert on flowers

for each row execute procedure ignore_empty_sample();

注意:

所以和这个相比 before 还有另外一种更好的,用法就是在数据真正被插入之前,我们可以判断一下数据是不是异常数据,如果异常数据,直接忽略这条记录,就让其不要插进来。

Copy150条

image.png

将4维数据变成二维数据,需要用降维方法

在降维前可以先修改此表

添加字段语句参考

·(PostgreSQL13中文文档》-SQL 命令-ALTER TABLE:http://www.postgres.cn/dos/13/sql-altertablehtml

已存在的表添加新的字段

alter table flowers

add column id bigserial primary key,

add column featurel float8,

add column feature2 float8;

comment on column f1 owers.id is'唯-编号';

comment on column f1 owers.feature1is‘降维后的第一个特征';

comment on column f1 owers.feature2is'降维后的第二个特征';

通过 id 可以标记

选择比较常用的 PC 的网算法,它包含四个参数,第一个参数是一个字符,表明告诉的方法数据是存在条例的结果。

第二个参数是刚刚提到的用来更新数据时用哪个文件。

第三个参数是一个字符串形式的数组,告诉创法原始的那些高位数据是存在哪些字段里面的。

第四个参数就是一个是一个数组,告诉降维完成数据是存在哪些里面去。

降维完成后通过散点图表示出,告知 x,y 走的数据,若一切顺利可观察到如下图:

image.png

降维演示:

4个特色字段加一个目标字段

image.png

多出3个字段

image.png

用降维算法将4个变量变成2个

多出两列已经被填充完成值

image.png

三种花用不同的颜色标记出来,大体上是能够被区分出来的

image.png

实际上插件已经预置了非常多的函数,包括降为分类,回归,聚类,绘图等等,具体函数用法参考插件文档,如果学会 udf 可以自己尝试安装分装类。

鸢尾花分类案例:分析数据 :预置函数

插件已经包装了一些 Scikit Learn 的算法以及 Matplotlib 绘图函数

预置降维算法

·插件已封装了一些 Scikit Learng 的算法,包括降维、聚类、分类和回归.

·其中,降维算法是“decomposition°开头的函数

·执行门 df decomposition_”查看预置的降维函数.

·法函放的调用方式都是指定来源表与字段,以及目标表与字段,

预置分类算法

·分类算法是“classification”开头的函数

·执行门 df classification_“直看预置的分类函数,

预置回归算法

·回归算法是“regression”开头的函数.

·执行 df regression_”查看预置的回归函数,

预置绘图函数

·绘图函改足“show”开头的函数,

·执行门 df show_“查看预置的绘图函数。

鸢尾花分类案例一预测数据——模型训练及预测

将多维数据降维成二维数据

1.使用高斯混合分类算法

select classification_gaussian_mixture(

'flowers',‘id'

ARRAY['sepal length',

'sepal_width',

'patal_length',

patal_width'],

‘species',-训练标签

'predict');-保存预测结果

image.png

简单的高速混合模型看起来效果也还不错.

(2) 苹果公司股价分析案例

分成4部用散点图展现,折线图绘画。

准备数据

select load_shares();-~加载预置的股价数据

分析数据

select show scatter('shares','id','prices');

训练模型并预测结果

select regression_linear('shares','id',ARRAY['id'],'price','predict');

展示拟合结果

select show plot('shares','id','price','predict');

image.png

 

三.功能总结

我们鸢尾花完成分类和苹果股价分析,其中在数据准备环节的时候,我们用到了 create table 来创建是表,用命令来导入数据,也学会了怎么留点符,在数据处理的环节,又学会怎么去添加新的页比例去添加默认值,怎么通过一次的语句去用到监管值,还有触发器,一些udf的定义等等,除了这些功能以外,还有许多今天是没有时间涉及到的,但是可以自行做。

通过这些特性可知 polarDB 是一个非常开放性的平台。可以通过任何自己所喜欢的方式来展示使用数据。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
SQL 存储 关系型数据库
关系型数据库SQLserver基本 SQL 操作
【7月更文挑战第28天】
35 4
|
3天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
3月前
|
SQL 数据挖掘
7张图总结:SQL 数据分析常用语句!
7张图总结:SQL 数据分析常用语句!
|
3月前
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
76 10
|
3月前
|
SQL 关系型数据库 数据库
关系型数据库SQL server UPDATE 语句
【8月更文挑战第3天】
68 10
|
3月前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
61 9
|
3月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
55 0
|
3月前
|
SQL 数据挖掘 关系型数据库
|
3月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
167 0
|
3月前
|
SQL 数据挖掘 Serverless
SQL 窗口函数简直太厉害啦!复杂数据分析的超强利器,带你轻松攻克数据难题,快来一探究竟!
【8月更文挑战第31天】在数据驱动时代,高效处理和分析大量数据至关重要。SQL窗口函数可对一组行操作并返回结果集,无需分组即可保留原始行信息。本文将介绍窗口函数的分类、应用场景及最佳实践,助您掌握这一强大工具。例如,在销售数据分析中,可使用窗口函数计算累计销售额和移动平均销售额,更好地理解业务趋势。
62 0
下一篇
无影云桌面