【Alink-Python版本】学习&实践-数据源、数据处理、回归、分类、聚类

Alink学习链接汇总

https://www.mianshigee.com/tutorial/Alink-1.0.1/regression.md

https://www.zhihu.com/people/alink_pinshu/posts?page=2

在这里插入图片描述

以下将采用jupyter进行学习&实践

#导入这一个包就可以了
from pyalink.alink import *
#重置运行环境,并切换到另一个环境
resetEnv()
useLocalEnv(1, flinkHome=None, config=None)

使用以下一条命令来开始使用 pyalink:设置是本地模式还是云环境

  • useLocalEnv(parallelism, flinkHome=None, config=None)
  • useRemoteEnv(host, port, parallelism, flinkHome=None, localIp=“localhost”, config=None)
    Call resetEnv() to reset environment and switch to another. 使用
    resetEnv() 来重置运行环境,并切换到另一个。
能否连接远程 Flink 集群进行计算?

A:通过方法可以连接一个已经启动的 Flink 集群:useRemoteEnv(host, port, parallelism, flinkHome=None, localIp="localhost", shipAlinkAlgoJar=True, config=None)。其中,参数

host 和 port 表示集群的地址;
parallelism 表示执行作业的并行度;
flinkHome 为 flink 的完整路径,默认使用 PyAlink 自带的 flink-1.9.0 路径;
localIp 指定实现 Flink DataStream 的打印预览功能时所需的本机IP地址,需要 Flink 集群能访问。默认为localhost。
shipAlinkAlgoJar 是否将 PyAlink 提供的 Alink 算法包传输给远程集群,如果远程集群已经放置了 Alink 算法包,那么这里可以设为 False,减少数据传输。
Flink-1.10 及以上版本对应的 pyalink 包,还支持类似 pyflink 脚本的远程集群运行方式。

1、数据源读取

例子中所用的文件内容如下:

6.6,3.0,4.4,1.4,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
7.7,3.8,6.7,2.2,Iris-virginica
5.1,3.8,1.9,0.4,Iris-setosa
6.2,2.9,4.3,1.3,Iris-versicolor
4.8,3.0,1.4,0.3,Iris-setosa

1.1、读取CSV文件(分批流)


filePath = 'iris.csv'
schema = 'sepal_length double, sepal_width double, petal_length double, petal_width double, category string'
csvSource = CsvSourceBatchOp()\
    .setFilePath(filePath)\
    .setSchemaStr(schema)\
    .setFieldDelimiter(",")
BatchOperator.collectToDataframe(csvSource)

CsvSourceBatchOp() 批运算符
设置set参数:

  • filepath文件路径:可以是从本地、hdfs、http读取
    schemaStr:设置列名和数据类型(这个的数据类型包含很多:https://www.mianshigee.com/tutorial/Alink-1.0.1/cn-csvsourcebatchop.md
    https://zhuanlan.zhihu.com/p/103027854)
    setFieldDelimiter字段分割符
    skipBlankLine是否忽略空行,默认true
    ignoreFirstLine是否忽略第一行数据,默认false
    rowDelimiter 行分隔符,默认\n

BatchOperator.collectToDataframe(csvSource)
或者写成csvSource.collectToDataframe()
每个批式数据源或批式算子都支持collectToDataframe()方法,数据结果转成Python的DataFrame形式。则可以利用Python丰富的函数库及可视化功能,进行后续的分析和显示

dataframe    python数组和alink批数据源之间转换
(https://zhuanlan.zhihu.com/p/97462270import pandas as pd

arr_2D =[
    ['Alice',1],
    ['Bob',2],
    ['Cindy',3]
]

df = pd.DataFrame(arr_2D) 
#使用BatchOperator的fromDataFrame方法,将前面定义好的DataFrame类型变量df作为第一个参数,后面的参数用来定义数据的列名与类型,使用SchemaStr格式,即列名与其类型间用空格分隔,各列定义之间使用逗号进行分隔。
BatchOperator.fromDataframe(df, 'name string, value int').print()

在这里插入图片描述


filePath = 'iris.csv'
schema = 'sepal_length double, sepal_width double, petal_length double, petal_width double, category string'
csvSource = CsvSourceStreamOp()\
    .setFilePath(filePath)\
    .setSchemaStr(schema)\
    .setFieldDelimiter(",")
csvSource.print()
#流运算符的执行,是按照一定时间间隔,每次显示若干条
StreamOperator.execute()

print(self, key=None, refreshInterval=0, maxLimit=100)
参数:
key 为一个字符串,表示给对应的 Operator 给定一个索引;不传值时将随机生成。
refreshInterval 表示刷新时间,单位为秒。当这个值大于0时,所显示的表将每隔 refreshInterval 秒刷新,显示前 refreshInterval 的数据;当这个值小于0时,每次有新数据产生,就会在触发显示,所显示的数据项与时间无关。
maxLimit 用于控制显示的数据量,最多显示 maxLimit 条数据。

1.2、按行读入文件(分批流)

分为批流,很明显在执行的时候,感受到批式读取,直接数据展现;流式读取,数据一行一行的呈现。
我们想看一下iris数据,但不想花时间详细定义其数据列名及类型,就可以将其每条数据简单地看作一行文本,使用TextSourceBatchOp,并设置文件路径的参数。

URL = "iris.csv"
data = TextSourceBatchOp().setFilePath(URL).setTextCol("text")
data.print()

在这里插入图片描述


URL = "iris.csv"
data = TextSourceStreamOp().setFilePath(URL).setTextCol("text")
data.print()
StreamOperator.execute()

在这里插入图片描述

1.3、读取Kafka数据(流式)

(1)部署单节点kafka(使用kafka中的zookeeper)
下载kafka压缩包:
https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/
#上传到云服务器上进行解压:
##解压
tar xvf kafka_2.12-2.3.1.tgz
#以守护进程的模式进行-daemon 启动kafka里面的zookeeper:到kafka解压的包里进行执行:
/bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
#检查一下是否启动成功,QuorumPeerMain表示启动成功
jps
#启动kafka:检查一下启动是否成功,kafka占用端口为9092,zookeeper占用端口2181
/bin/kafka-server-start.sh -daemon  config/server.properties
#常用命令:
#指定zookeeper的地址、端口,副本个数为1(因为我只是单机一个broker) 分区数1 和topic名称test
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

#查看top列表
bin/kafka-topics.sh --list --zookeeper localhost:2181

#启动生产者,--broker-list 指定broker集群的端口 多个用逗号隔开 ,--topic指定具体的topic
 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test  
#启动消费者,指定broker集群的端口 和具体的topic --from-beginning代表从头开始读取消息
 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning


#0.9版本之前:
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
#0.9版本之后:
./bin/kafka-console-consumer.sh --bootstrap-server 10.1.3.xxx:9092 --topic test --from-beginning

在这里插入图片描述

(2)使用Alink流式写入/读取topic数据
from pyalink.alink import *
resetEnv()
useLocalEnv(2, flinkHome=None, config=None)
#读取文件中的数据,查看一下数据内容
URL = "iris.csv"
SCHEMA_STR = "sepal_length double, sepal_width double, petal_length double, petal_width double, category string"
data = CsvSourceStreamOp()\
.setFilePath(URL)\
.setSchemaStr(SCHEMA_STR)\
.setFieldDelimiter(",")
data.print()
StreamOperator.execute()

在这里插入图片描述

#将读取到data变量的数据输入到kafka中,相当于kafka的生产者:
sink = KafkaSinkStreamOp()\
.setBootstrapServers("localhost:9092")\
.setDataFormat("json")\
.setTopic("test")

data.link(sink)
StreamOperator.execute()
#消费者:利用KafkaSourceStreamOp()进行读取kafka的topic中的数据:
source = KafkaSourceStreamOp()\
.setBootstrapServers("localhost:9092")\
.setTopic("test")\
.setStartupMode("EARLIEST")\
.setGroupId("test-consumer-group")

source.print(key='kafka_iris', refreshInterval=1, maxLimit=500)

StreamOperator.execute()

在这里插入图片描述

print(self, key=None, refreshInterval=0, maxLimit=100)
参数:
key 为一个字符串,表示给对应的 Operator 给定一个索引;不传值时将随机生成。
refreshInterval 表示刷新时间,单位为秒。当这个值大于0时,所显示的表将每隔 refreshInterval 秒刷新,显示前 refreshInterval 的数据;当这个值小于0时,每次有新数据产生,就会在触发显示,所显示的数据项与时间无关。
maxLimit 用于控制显示的数据量,最多显示 maxLimit 条数据。

参考链接:
https://zhuanlan.zhihu.com/p/101143978
https://www.jianshu.com/p/7b3f8e16ee52
解析json数据+sql格式转化
根据上述程度读取的数据可以看出,message数据是json数据:

我们需要对字符串里面的数据进行提取。
推荐使用JsonValueStreamOp,通过设置需要提取内容的JsonPath,提取出各列数据。

JsonValueStreamOp提取出来的结果都是object类型的。
我们可以使用Flink SQL 的cast方法,在代码实现上,只需在连接JsonValueStreamOp之后,再连接SelectStreamOp并设置其SQL语句参数,

在这里插入图片描述

from pyalink.alink import *
useLocalEnv(1, flinkHome=None, config=None)
source = KafkaSourceStreamOp()\
.setBootstrapServers("localhost:9092")\
.setTopic("ceshi")\
.setStartupMode("EARLIEST")\
.setGroupId("test-consumer-group")
### link方法关联一些解析规则
#source.print()
data = source.link(
    ### 解析成Json数据
    JsonValueStreamOp()\
    .setSelectedCol("message")
    .setReservedCols([])
    .setOutputCols(["sepal_length", "sepal_width", "petal_length",
 "petal_width", "category"])
    .setJsonPath(["$.sepal_length", "$.sepal_width", 
"$.petal_length", "$.petal_width","$.category"])
).link(
     ### 按照sql select格式转化
    SelectStreamOp()\
    .setClause("CAST(sepal_length AS DOUBLE) AS sepal_length, "\
               + "CAST(sepal_width AS DOUBLE) AS sepal_width, "\
               + "CAST(petal_length AS DOUBLE) AS petal_length, "\
               + "CAST(petal_width AS DOUBLE) AS petal_width, category")
)

data.print()
StreamOperator.execute()

在这里插入图片描述

2、数据处理(边用边总结)

3、回归

下面例子所用的文件data.csv:

50.186389494880601,69.847604158249183
52.378446219236217,86.098291205774103
50.135485486286122,59.108839267699643
33.644706006191782,69.89968164362763
39.557901222906828,44.862490711164398
56.130388816875467,85.498067778840223
57.362052133238237,95.536686846467219
60.269214393997906,70.251934419771587
35.678093889410732,52.721734964774988
31.588116998132829,50.392670135079896
53.66093226167304,63.642398775657753
46.682228649471917,72.247251068662365
43.107820219102464,57.812512976181402
70.34607561504933,104.25710158543822
44.492855880854073,86.642020318822006

3.1、线性回归

参考链接:
https://www.cnblogs.com/qiu-hua/p/14891409.html

流式读取csv----批式训练—批式预测
------------------流式读取的数据,无法在批式训练-----------
流式读取csv------流式预测
-------流式读取的数据类型就是 流式预测传入的数据类型格式,可以直接用训练好的模型---------
1、批式读取csv----批式训练—批式预测

2.批式读取csv----批式训练—流式预测
批式读取的数据是批式运算符BatchOperator 类型变量,可以直接进行训练,但是预测时需要转化为流数据:
先将BatchOperator —>>dataframe----->>StreamOperator
(1).先将BatchOperator —>>dataframe:
newdata=data.collectToDataframe()
newdata=BatchOperator.collectToDataframe(data)
(2).dataframe----->>StreamOperator:
streamData=StreamOperator.fromDataframe(newdata, schema)
streamData=dataframeToOperator(newdata, schemaStr=“col double,label double”, opType=“stream”)

训练(批式)(例子:批式读取csv----批式训练)
from pyalink.alink import *
resetEnv()
useLocalEnv(1, flinkHome=None, config=None)
批式读取csv:
schema='col double,label double'
data=CsvSourceBatchOp()\
.setFilePath("data.csv")\
.setSchemaStr(schema).setFieldDelimiter(",")

直接训练:
colnames=["col"]
lr=LinearRegTrainBatchOp().setFeatureCols(colnames).setLabelCol("label")
model=data.link(lr)
预测(批式和流式)
1.批式预测
批式读取csv:
schema='col double,label double'
data=CsvSourceBatchOp()\
.setFilePath("data.csv")\
.setSchemaStr(schema).setFieldDelimiter(",")
直接训练:
colnames=["col"]
lr=LinearRegTrainBatchOp().setFeatureCols(colnames).setLabelCol("label")
model=data.link(lr)

批式预测
predictor = LinearRegPredictBatchOp().setPredictionCol("pred")
predictor.linkFrom(model, data).firstN(5).print()
2.流式预测
批式读取csv:
schema='col double,label double'
data=CsvSourceBatchOp()\
.setFilePath("data.csv")\
.setSchemaStr(schema).setFieldDelimiter(",")
直接训练:
colnames=["col"]
lr=LinearRegTrainBatchOp().setFeatureCols(colnames).setLabelCol("label")
model=data.link(lr)

转换batchop---->>---dataframe----->>streamopdata
newdata=BatchOperator.collectToDataframe(data)或者newdata=data.collectToDataframe()

streamData=dataframeToOperator(newdata, schemaStr="col double,label double", opType="stream")或者streamData=StreamOperator.fromDataframe(newdata, ‘col double,label double’)
流式预测:
predictor = LinearRegPredictStreamOp(model).setPredictionCol("pred")
predictor.linkFrom(streamData).print()
StreamOperator.execute()

4、分类

5、聚类

数据导出

导出CSV文件

按行导出到文件

导出到Mysql

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
用户画像,作为一种勾画目标用户、联系用户诉求与设计方向的有效工具,用户画像在各领域得到了广泛的应用。用户画像最初是在电商领域得到应用的,在大数据时代背景下,用户信息充斥在网络中,将用户的每个具体信息抽象成标签,利用这些标签将用户形象具体化,从而为用户提供有针对性的服务。还记得年底收到的支付宝年度消费账单吗?帮助客户回顾一年的消费细节,包括消费能力、消费去向、信用额度等等,再根据每位客户的消费习惯,量身定制商品推荐列表……这一活动,将数据这个量化的词以形象生动的表现手法推到了大众面前。这就是用户画像在电商领域的一个应用,随着我国电子商务的高速发展,越来越多的人注意到数据信息对于电商市场的推动作用。基于数据分析的精准营销方式,可以最大限度的挖掘并留住潜在客户,数据统计与分析为电商市场带来的突破不可估量。在大数据时代,一切皆可“量化”,看似普通的小小数字背后,蕴藏着无限商机,也正在被越来越多的企业所洞悉。如何从大数据中挖掘商机?建立用户画像和精准化分析是关键。什么是用户画像呢?用户画像是根据市场研究和数据,创建的理想中客户虚构的表示。创建用户画像,这将有助于理解现实生活中的目标受众。企业创建的人物角色画像,具体到针对他们的目标和需求,并解决他们的问题,同时,这将帮助企业更加直观的转化客户。用户画像最重要的一个步骤就是对用户标签化,我们要明确要分析用户的各种维度,才能确定如何对用户进行画像。用户画像建立步骤首先,基础数据收集,电商领域大致分为行为数据、内容偏好数据、交易数据,如浏览量、访问时长、家具偏好、回头率等等。而金融领域又有贷款信息,信用卡,各种征信信息等等。然后,当我们对用户画像所需要的基础数据收集完毕后,需要对这些资料进行分析和加工,提炼关键要素,构建可视化模型。对收集到的数据进行行为建模,抽象出用户的标签。电商领域可能是把用户的基本属性、购买能力、行为特征、兴趣爱好、心理特征、社交网络大致的标签化,而金融风控领域则是更关注用户的基本信息,风险信息,财务信息等等。随后,要利用大数据的整体架构对标签化的过程进行开发实现,对数据进行加工,将标签管理化。同时将标签计算的结果进行计算。这个过程中需要依靠Hive,Hbase等大数据技术,为了提高数据的实时性,还要用到Flink,Kafka等实时计算技术。最后,也是最关键的一步,要将我们的计算结果,数据,接口等等,形成服务。比如,图表展示,可视化展示。基于Flink+Alink构建全端亿级实时用户画像系统课程,将带领大家一步一步实现一个强大的实时用户画像系统,该系统以热门的互联网电商实际业务应用场景为案例讲解,具体包含:标签管理(支持动态标签扩展,动态标签指标)、用户预测、用户群体画像、用户行为画像、用户中心、几大内容。本课程采用全新的大数据技术栈:Flink+Alink,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.13.0Alink1.5.0 ClickHouseDolphinSchedulerHadoopHbaseKafkaZookeeper SpringBoot2.0.8.RELEASE SpringCloud Finchley.SR2BinlogCanal MySQL MybatisVue.js、Nodejs、ElementUI 课程亮点: 1.与企业接轨、真实工业界产品2.标签化管理模块功能,支持动态标签扩展3.动态标签指标分析和维护4.Alink算法技术框架 5.大数据热门技术Flink版本 6.主流微服务后端系统 7.数据实时同步解决方案 8.涵盖主流前端技术VUE+NodeJS+ElementUI 9.集成SpringCloud实现统一整合方案 10.互联网大数据企业热门技术栈 11.支持海量数据的实时画像 12.支持全端实时画像 13.全程代码实操,提供全部代码和资料 14.提供答疑和提供企业技术方案咨询 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风吹海洋浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值