Python脚本

<< Click to Display Table of Contents >>

当前位置:  深度分析 > 脚本 

Python脚本

Previous pageReturn to chapter overviewNext page

Python脚本节点可以连接数据节点,输入脚本用于建模,也可以连接Python脚本,进行验证。

拖拽一个数据集连接一个Python脚本节点,选中Python脚本节点设置及展示区只有一个页面:配置项目。

ML143

 

配置Python脚本

8.5-9.0的接口

Python脚本内置输入、输出变量和系统函数。

输入变量

_input_table_ :pandas.DataFrame类型,为前驱数据集节点的输出数据;

_input_model_ :前驱Python脚本节点向本节点输入的数据,可以使模型对象、list、dict等可序列化任意类型;

输出变量

_output_table_ :pandas.DataFrame类型或dict类型,用于输出数据到表格;

_output_model_ :本节点向所有直接后继Python脚本节点输出的数据,可以是模型对象、list、dict等可序列化任意类型;

_pmml_ :为训练模型的PMML文本内容,作为该模型节点的输出值,与函数to_pmml()配合使用;

_plot_ :matplotlib.pyplot类型,用于输出图片;

系统函数

to_pmml(model,features,target):用于导出训练模型的PMML文本文件,其中model为训练出的模型,features为含有训练集所有特征(自变量)的list,这些特征顺序必须与训练模型时的特征顺序保持一致,target为含有训练集标签字段(因变量)的字符串,该系统函数返回的PMML文本可以赋值给_pmml_,以便传递给后继节点;

 

9.1新接口

Python脚本节点的变更:

(1)8.5-9.0的接口仍然兼容,仅能使老版本创建的实验导入到9.1时仍然可以正常运行,但由于不能支持多数据集输入,所以不要在9.1版本新创建的实验中使用9.0及以前的接口;

(2)新API从产品9.1搭配DM-Engine_v1.2使用,脚本可使用python SDK v0.2进行离线编写;

 

yonghong.script.port  编写自定义python脚本的子工具包,包含两个工具类:

                   EntryPoint:当前脚本节点的输入输出端口

                             input:本节点的数据输入,访问某个前置节点的某种数据可以这样:entry.input['数据集节点1'][ResourceType.DATAFRAME] 表示

                                   获取“数据集节点1”的输出数据集;

                                                           

                             output:本节点的数据输出;

                                    dataset: 待输出的数据集

                                    model: 待输出的模型

                                    pmml: 待输出的pmml

                                    images: 待输出的png图片数据,使用方法 images.put_image_from_plot("图片名字1",plot)

                                   

                   ResourceType: 输入输出数据的枚举类型,DATAFRAME表示数据集,MODEL表示模型

 

 

新API使用案例

案例1--前置节点为一个数据集节点、一个训练模型节点(Python脚本导出的训练模型);节点输出为一个数据集

 

# EntryPoint:当前脚本节点的输入输出端口

# ResourceType:输入输出数据的枚举类型,DATAFRAME表示数据集,MODEL表示模型

from yonghong.script.port import EntryPoint, ResourceType

entry = EntryPoint()  # 持有本节点的输入输出

input_df = entry.input['样例数据集'][ResourceType.DATAFRAME]  # 获取指定的前置节点'样例数据集'的输出数据

input_model = entry.input['决策树模型'][ResourceType.MODEL]  # 获取指定的前置节点‘决策树模型’输出的训练模型

import pandas as pd

entry.output.dataset = pd.DataFrame({'字段名':input_model.predict(input_df)})  # 将预测结果输出,如果有后置节点将被后置节点接收

 

anli1

 

 

 

案例2--前置节点为一个数据集节点、一个插件节点(有输出数据集);节点输出为一个训练模型

 

# EntryPoint:当前脚本节点的输入输出端口

# ResourceType:输入输出数据的枚举类型,DATAFRAME表示数据集,MODEL表示模型

from yonghong.script.port import EntryPoint, ResourceType

from xgboost import XGBClassifier

 

entry = EntryPoint()  # 持有本节点的输入输出

input_dataset1 = entry.input['样例数据集'][ResourceType.DATAFRAME]  # 获取指定的前置节点'样例数据集'的输出数据

input_dataset2 = entry.input['标准化'][ResourceType.DATAFRAME]  # 获取指定的前置节点‘标准化’的输出数据集

 

features = ['V' + str(i) for i in range(1, 29)] + ['Amount']  # 指定特征字段。

target = 'Class'

train_X = input_dataset1[features]  # 读入训练集特征数据。

train_y = input_dataset1[target]  # 读入训练集分类值。

 

clf = XGBClassifier(n_jobs=3)

clf.fit(X=train_X, y=train_y)

 

import pandas as pd

entry.output.dataset = pd.DataFrame({'字段名':clf.predict(input_dataset2[features])})  # 将预测结果输出,如果有后置节点将被后置节点接收

entry.output.model = clf  # 如果需要将分类器clf传递给下一个节点使用,则将clf赋值给model。

entry.output.pmml = to_pmml(clf, features, target)  # 生成模型的PMML文本。

 

anli2

 

 

案例3--前置节点为一个数据集节点、一个插件节点(有输出数据集);节点输出为一个png图片

 

# EntryPoint:当前脚本节点的输入输出端口

# ResourceType:输入输出数据的枚举类型,DATAFRAME表示数据集,MODEL表示模型

from yonghong.script.port import EntryPoint, ResourceType

from xgboost import XGBClassifier

 

entry = EntryPoint()  # 持有本节点的输入输出

input_dataset1 = entry.input['样例数据集'][ResourceType.DATAFRAME]  # 获取指定的前置节点'样例数据集'的输出数据

input_dataset2 = entry.input['标准化'][ResourceType.DATAFRAME]  # 获取指定的前置节点‘标准化’的输出数据集

 

# 绘图部分

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from sklearn import manifold

 

df= input_dataset1

df_lle, _ = manifold.locally_linear_embedding(df.drop(columns='ElectricLeakage'), n_neighbors=30, n_components=2)  # 对数据进行降维操作

 

fig = plt.figure()

ax = fig.add_subplot(211, projection='3d')

ax.scatter(df['LineLoss(%)'], df['ElectricQuantityDowntrend'], df['AlarmNumber'], c=df['ElectricLeakage'], cmap=plt.cm.Spectral)

ax.set_xlabel('LineLoss(%)')

ax.set_ylabel('EQD')

ax.set_zlabel('AlarmNumber')

ax.set_title('Original data')

ax = fig.add_subplot(212)

ax.scatter(df_lle[:, 0], df_lle[:, 1], c=df['ElectricLeakage'], cmap=plt.cm.Spectral)

ax.set_xlabel('x1')

ax.set_ylabel('x2')

ax.set_title('Projected data')

plt.axis('tight')

#绘图参数配置完毕后,不要使用plt.show()显示图片,该函数是无效的

 

entry.output.images.put_image_from_plot("案例图片名字1",plt) # 配置好绘图参数后将plt传递给images变量,图表就可以绘制到页面中

 

anli3

 

 

Python脚本运行

Python脚本节点的右键菜单中,选择“运行”,可以运行该节点及前置节点。
 

Python脚本节点重命名

Python脚本节点的右键菜单中,选择“重命名”,可以对节点进行重命名。

 

刷新Python脚本节点

Python脚本节点的右键菜单中,选择“刷新”,可以更新同步数据或者参数信息。

 

保存为组合节点

Python脚本节点的右键菜单中,选择“保存为组合节点”,可以将选中的节点保存为组合节点以实现复用节点,保存的节点的脚本与原节点一致。

 

复制/剪切/粘贴/删除脚本节点

脚本节点的右键菜单支持复制、剪切、粘贴、删除的操作。

【复制】选中脚本节点可以复制。

【剪切】选中脚本节点节点可以剪切。

【粘贴】选择复制后,画布空白处右键可以粘贴,把脚本节点复制一份。

【删除】点击节点右键菜单点击删除,或者点击键盘 delete 键进行删除,能够删除节点以及节点的输入、输出连线。