热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php调用python绘图程序_SPL中调用Python程序

【摘要】集算器SPL集成了对python程序的调用,也提供对建模算法接口支持。具体开发要求、使用详细情况,请前往乾学院:SPL中调用Pyt

【摘要】
集算器 SPL 集成了对 python 程序的调用,也提供对建模算法接口支持。具体开发要求、使用详细情况,请前往乾学院:SPL 中调用 Python 程序!

集算器是强大的数据计算引擎,但目前对于机器学习算法的提供还不够丰富。而 python 中有许多此类算法。借助 YM 外部库,就可以让集算器 SPL 调用 python 写的代码,从而弥补这一不足。

下面具体说明:

1.SPL 与 python 环境配置2.python 模块开发规范要求3.ym_exec 接口调用4.建模算法模块使用

SPL、python、接口关系示意图:

90e7bd760f91171abb6bc14f99ef523a.png


SPL 中调用 ym_exec 接口,将参数传递给 python 下的 apply() 接口,apply 调用 python 程序处理后返回结果给 SPL。

1. SPL 与 python 环境配置

为了 SPL 与 python 之间能通信,实现相互访问,需要进行有关的设置。
下面以在 win10 下,python3.7+SPL 为例来说明如何设置的。

本接口依赖集算器 SPL 外部库 Yimming。 Yimming 与 python 通过 userconfig.xml 关联。A、安装 Python 软件:
下载 python3 软件安装包,安装位置如 c:Program FilesaqsoftyimmingPython37。B:外部库安装:
缺省安装在集算器 SPL 软件的 esProcextlibYimming 路径下,在集算器的外部库设置中勾选 Yimming 项让其生效。( 通过外部库指南能找到 Yimming jar 依赖包 )

ae8c9ad6e96f831655741ab3fdce30a0.png

C、 配置文件: 在外部库目录 esProcextlibYimming甥敳捲onfig.xml 文件中设置参数,参数如下:

fe81abcd6dd6c89a56b265636d5ed656.png

D、服务端程序应用程序指提供的 python 服务端程序:

aa430650abcbd5a7144a8e098f233e49.png

以上配置完成之后,重启集算器后就可以使用 ym_exec() 接口。

2. python 模块开发规范要求

A、def apply(ls) 接口,python 程序的对外接口,实现与 SPL 交互处理。
B、参数 ls 为 list 数据类型,它类似于 java 中的入口函数 void main(string argv[]) 中的 argv 参数。
C、返回值,返回 dataframe 结构数据存放在 list 类型的变量中, 可在 SPL 中显示。
D、样例说明:demo.py
import pandas as pd
import sys
def apply(lists):
cols = [“value”]
ls = []
for x in lists:
ls.append(“{}”.format(x))
df = pd.DataFrame(ls, columns=cols)
lls=[]
lls.append(df)
return lls
if __name__ == “__main__”:
res = apply(sys.argv[1:])
print(‘res={}’.format(res))运行:python demo.py “AAA” “BBB” 1000输出:res=[ value
0 AA
1 BBB
2 1000]
本程序 apply()接口,实现将传递的参数加入到变量列表 ls 中,然后 ls 放入 dataframe 结构里,dataframe 再放入要返回的变量列表 lls 里。开发中,先在 python 下测试 apply() 接口正常后,就可以在 SPL 中调用了。

需要注意的是,由于 dataframe 是通过 msgpack 编码后返回的数据,因此要求 dataframe 中同一列的数据类型一致,否则 msgpack 编码时出错,SPL 中收不到 dataframe 数据.

3.ym_exec 接口调用格式: ym_exec(pyfile, p1,p2,…)。
调用 pyfile 文件并运行它,后面跟传入的参数 p1,p2 等。参数个数不定, 只要与接口 apply() 对应。

具体用法 如 demo.py:

50ec74e545d1711c4391fc58666e7721.png

运行结果:

d494e54c9c5db364e725e8e8366615a0.png

4. 建模算法模块使用

下面再演示一下如何在集算器调用 python 实现偏最小二乘算法(PLS,目前集算器本身未提供)。在运行它之前,需要安装易明外部库,配置设置参考《SPL 实现自动建模和预测》。

由于 PLS 算法的参数较为复杂,我们将调用格式约定为:ym_exec(pyfile, data, jsonstr)

SPL 中调用 pyfile 文件并运行它,data 为需要建模的数据(序表),将 PLS 算法众多参数写成 json 串。同样地,需要与 pyfile 中 apply() 处理对应起来,才能正确解析各参数值。

data: data 为预表或带头文件的数据文件名。数据中包括目标变量 target 所在的列。jsonstr: json 字符串,例如:
{target:0,n_components:3,deflation_mode:‘regression’,
mode:‘A’,norm_y_weights:False,
scale:False,algorithm:‘nipals’,
max_iter:500,tol:0.000001,copy:True}
其中 target 指定目标变量所在的列,不可缺少。

SPL 脚本 pls_demo.dfx:

f359980d7415bd62f042ccd07e62e7d6.png

首行为 target 的数据 data_test.csv:

953b5a1a43ab39cf0815273f151d7233.png

pls_demo.py 文件,针对 python 模块算法使用参考

from scipy.linalg import pinv2
import numpy as np
import pandas as pd
import demjson
#算法类 pls_demo:
class pls_demo():
… … .
Pass# 接口实现def apply(lists):
if len(lists)<2:
return None
data &#61; lists[0] # 数据参数
val &#61; lists[1] #jsonstr 串参数
if (type(data).__name__ &#61;&#61;“str”):
data &#61; pd.read_csv(data)
# 1. 对 json 字符串中特定值处理
#print(val)
val &#61; val.lower().replace(“false”, “‘False’”)
val &#61; val.replace(“true”, “‘True’”)
val &#61; val.replace(“none”, “‘None’”)
dic &#61; demjson.decode(val)
if dic.__contains__(‘target’) &#61;&#61;False:
print(“param target is not set”)
return
# 2. 对 target 参数的处理&#xff0c;它可能为列数&#xff0c;也可能为名称
targ &#61; dic[‘target’]
if type(targ).__name__ &#61;&#61; “int”:
col &#61; data.columns
colname &#61; col.tolist()[targ]
else:
colname &#61; targ
Y &#61; data[colname]
X &#61; data.drop(colname, axis&#61;1)
# 3. 模型参数处理&#xff0c;没有传递的参数需要设定缺省值.
if dic.__contains__(‘n_components’) :n_components&#61;dic[‘n_components’]
else: n_components&#61;15
if dic.__contains__(‘deflation_mode’) :deflation_mode&#61;dic[‘deflation_mode’]
else: deflation_mode&#61;“regression”
if dic.__contains__(‘mode’):mode&#61;dic[‘mode’]
else: mode&#61;“A”
…….
# 4. 模型算法加载
#print(“n_components&#61;{}”.format(n_components))
pls_model &#61; pls_demo(n_components,
deflation_mode,
mode,…)
# 训练数据
pls_model.fit(X, Y)
# 预测
y_pred &#61; pls_model.predict(X)
# 5. 填充返回值
f &#61; [“value”]
df &#61; pd.DataFrame(y_pred, columns&#61;f)
#print(y_pred)
lls&#61;[]
lls.append(df)
return lls

#6. 测试
if __name__ &#61;&#61; ‘__main__’:
ls &#61; []
ls.append(“a2ef764c53ec1fbc_X.new.csv”)
val &#61; “{target:0,n_components:3,deflation_mode:‘regression’,”
“mode:‘a’,norm_y_weights:False,”
“scale:False,algorithm:‘nipals’,”
“max_iter:500,tol:0.000001,copy:True}”
ls.append(val)
apply(ls)

开发过程中&#xff0c;先在 python 下通过 main 函数测试 apply() 接口正常后&#xff0c;就可以在 SPL 中调用了。



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
dasda
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有