内容


分析 IoT 设备移动数据

使用 IBM Watson IoT Platform 捕获并发送传感器数据,然后使用 SPSS Modeler 分析移动模式

Comments

本教程基于 Romeo Kienzler 开发的 Harlem Shake 游戏,Romeo Kienzler 在其教程创建简单有趣的 IoT 加速计游戏中提供了该游戏。Kienzler 的游戏使用了来自智能手机的简单移动数据,将该数据传输到云,将数据捕获到 Cloudant 数据库中,然后使用 IBM Data Science Experience 确定获胜者。

在本教程中,我们将从 Kienzler 的基础步骤开始介绍,还将使用 IBM Cloud(以前称为 IBM Bluemix)和 IBM Watson IoT Platform 服务,包括 Node-RED、MQTT(在 Watson IoT Platform 中)和 Cloudant。我们将在以下方面与 Kienzler 的 Harlem Shake 游戏区别开来:

  • 除了简单的加速计输入之外,我们还将使用更多传感器数据。
  • 我们将使用 SPSS Modeler(而不是 Data Science Experience)来分析数据。SPSS Modeler 是一种无代码的分析、模型生成和部署工具。它非常适合大体了解数据但没有编码背景的业务用户。(熟悉在开源环境中编码的数据科学家可能更喜欢 IBM Data Science Experience,它可以使用 R 和/或 Python。)

处理来自智能手机的传感器输入很有趣,但是有针对传感器数据的业务应用程序吗?答案很简单:有。设想您有一个生产设施,传感器数据告诉您只要卡车驶近它,生产质量就会降低。这是值得了解的有用信息。一次“移动”只是有关位置和速度的三维传感器数据的一种组合。请记住,不仅要考虑移动传感器,还可以考虑其他传感器输入,比如温度、压力,甚至对进入店内的人的光学识别。所有这些数据都可能影响业务的关键绩效指标 (KPI),比如质量、吞吐量、销量或员工的效率。现在,如果您知道具体情况,就可以采取相应措施来改善这种情况。

我们将通过一些步骤来构建我们的游戏:

  • 使用 Internet of Things Platform 服务、Cloudant 和 Node-RED 创建基础应用程序、连接和数据存储。
  • 通过检查确认数据已存储在 Cloudant 中。
  • 修改数据库以收集 3 种不同移动类型的数据。
  • 通过 SPSS Modeler,使用来自 Cloudant 数据库的数据创建一个分析流。
  • 通过以下方法在 SPSS Modeler 中创建一个分类模型:转换时间戳,计算使用的能量的新度量指标,告诉 SPSS Modeler 要预测的目标是什么,并添加一个分类算法。
  • 手动部署并测试分类模型,方法是收集评分数据,修改 SPSS Modeler 中的现有流,以便对移动数据进行分析和评分。
  • 向 SPSS 流添加一个用于实时评分的新分支。
  • 在 IBM Cloud 中使用 IBM Machine Learning 部署 SPSS Modeler 流。

构建您的应用程序需要做的准备工作

1

创建基础应用程序并验证 Cloudant 数据库中的数据

第一步很重要。之前已经提到过,本教程基于 Romeo Kienzler 发布的 Harlem Shake 游戏。首先,参阅创建简单有趣的 IoT 加速计游戏,完成第 1-5 步。当系统要求您为应用程序命名时,可以使用您喜欢的任何名称来称呼它,但在本教程的示例中,我将我的应用程序称为 anythinguniquewilldods123

返回到本教程来扩展 Kienzler 的作品之前,您已使用一键式部署方法部署了一个游戏应用程序,替换了 Internet of Things Platform 服务,确保 MQTT 消息代理能接收数据,设置了一个 Cloudant NoSQL 数据库来存储该数据,还使用 Node-RED 将该数据传输到了 Cloudant。(不用担心,工作量没有听起来那么多,而且很有趣!)

在完成 Kienzler 的文章中的这些步骤后,我们接下来将检查数据是否已传到表中。查看 Node-RED 中的 debug 选项卡,确保智能手机上的游戏应用程序仍在发送数据。

所有功能都应在正常工作。摇动智能手机,将数据传输到云,用数据库保存该数据。但在此刻,我们仍然无法知道数据是否实际传到 Cloudant 实例中。Kienzler 的方法是使用 Data Science Experience,但我们将使用 SPSS Modeler。不过,在这之前,我们需要做一些更改。

请记住,Cloudant 是一个 NoSQL(“不只是 SQL”)数据库系统,我们使用它来存储数据。我们可以使用 Cloudant Dashboard 执行一次基本检查,查看数据是否已到达。

  1. 您应该已经登录到您的 IBM Cloud 帐户。如果尚未登录,请进行登录。
  2. 汉堡包形状的菜单中,选择 Dashboard
  3. Dashboard 显示了您的应用程序和服务。在 Services 部分查看您的 Cloudant NoSQL 数据库实例。该实例是在 Kienzler 教程的第 2 步中使用 IoT Starter Kit 创建的。
  4. 单击包含您的 Cloudant NoSQL DB 实例的行。
  5. 在 Cloudant Service Details 页面上,单击 Launch。Cloudant Dashboard 将在一个新窗口中打开。
  6. 从左侧菜单中,单击数据库图标来查看您的 Cloudant 数据库列表。
  7. 找到 harlemshake 数据库并记下存储的 # of Docs
  8. 激活您的智能手机上的 IoT 传感器。

    要激活智能手机上的 IoT 传感器,请执行以下步骤:

    1. 在智能手机上,使用您在 Kienzler 教程的第 1 步中记下的链接。
    2. 使用您自己的唯一字母数字 ID 和 8 位字符的字母密码 (a-z) 进行登录。不要包含空格。
    3. 等到应用程序状态显示“Connected”时,开始统计提交的已发布消息。
  9. 刷新 Cloudant Dashboard 页面,观察增加的 # of Docs。(稍后我们会使用 SPSS Modeler 查看该数据。)
2

替换现有的 Cloudant 数据库,以便可以收集扩展的数据点

我们需要修改 Harlem Shake 应用程序,以便不仅能够记录智能手机的 x、y、z 位置数据,还能记录加速数据和其他一些数据点。

2a

替换现有的 Cloudant 数据库

  1. 您应该已经打开了 Node-RED 实例。如果没有打开,请打开它。

    要打开您的 Node-RED 实例,请执行以下步骤:

    1. 转到 IBM Cloud Dashboard。
    2. Cloud Foundry Apps 下,单击您的应用程序的链接(例如,我的链接名为 anythinguniquewilldods123)。
    3. 在应用程序名称旁边,单击 Visit App
    4. 单击 Go to your Node-RED flow editor
    5. 使用您在 Kienzler 的教程中自行分配的用户名和密码,登录游戏应用程序的 Node-RED 实例。

    下面这个流将会显示。

  2. 要存储更多数据点,还需要一个新的数据库。我们将把现有的 harlemshake 数据库替换为我们自己的名为 iotmovements 的数据库。
    1. 双击名为 harlemshakeCloudant 节点。
    2. Database 字段中,输入新数据库的名称 iotmovements
    3. 单击 Done

      备注:暂时不要执行部署和测试。

  3. 断开 Cloudant 节点的连接。我们希望在新数据库中避免“不干净的数据”。稍后再重新连接它。让 debug 节点保持连接状态。
  4. 双击 function 节点,扩展 JavaScript 代码以包含加速数据和消息的时间戳。将现有代码替换为此代码:
    	msg.payload =
    	{
    	X : msg.payload.d.ax,
    	Y : msg.payload.d.ay,
    	Z : msg.payload.d.az,
    	alpha: msg.payload.d.oa,
    	beta: msg.payload.d.ob,
    	gamma: msg.payload.d.og,
    	stime: msg.payload.d.ts,
    	mtype: "roll",
    	SENSORID : msg.payload.d.id
    	};
    	return msg;

    在您的智能手机上运行的应用程序会提供参数 XYZalphabetagammastimemtype 参数被设置为我们的第一个试验性移动类型。后续步骤会更深入地分析这个参数。

    或者,您可以为该函数提供一个有用的名称(我使用了 flatten_for_training)。最终结果应该类似于下图。

  5. 单击 Done
  6. 单击 Deploy。激活智能手机应用程序后,debug 选项卡上的输出应类似于下图。

备注:SENSORID 值应该反映了您在激活智能手机时使用的字母数字 ID。不用担心时间戳的格式。我们稍后会将它转换为更容易理解的格式。

2b

修改数据库以收集 3 种不同移动类型的数据

我们记录了 3 种不同移动类型的一些示例数据,如图 1 所示:

  • Roll – 水平握持智能手机并连续朝远离您的方向翻转它,使您快速交替看到它的正面和背面。
  • Turn – 垂直握持智能手机并连续朝右翻转它,使您快速交替看到它的正面和背面。
  • Wiggle – 垂直握持智能手机,然后从一侧向另一侧(或从左向右)转动您的手。
图 1. 3 种不同移动类型的示意图

您稍后可以根据自己的想法进行试验。

要识别数据记录中的移动类型,需要在代码内标记它们。我们已在上一步中对第一种移动类型 roll 执行了此操作。为了测试,我们断开了 Cloudant 节点的连接。前期工作现已完成,我们将开始收集样本数据。

  1. Cloudant 节点重新连接到 function 节点。该流应该类似于下图。
  2. 单击 Deploy
  3. 收集 rollmtype 的数据。
    1. 重新激活您的智能手机上的 IoT 传感器。
    2. 只要应用程序开始发送数据,就水平握持您的智能手机,就像您想拍一张风景照一样。开始以稳定的速度翻转智能手机至少 45-60 秒。(就我的情况而言,45 秒导致数据库中增加了约 500 个文档。)

      备注:如果在执行此操作期间观察您的 Node-RED 流编辑器中的 debug 选项卡,您可能会看到红色的错误消息。Cloudant 免费版每秒仅处理 10 个事件,有时智能手机更快一些。我们可以忽略这种少量的数据丢失。

    3. 关闭您的智能手机或禁用浏览器应用程序,以便禁用智能手机上的 IoT 传感器。
  4. 收集 turnmtype 的数据。
    1. 转到 Node-RED 流编辑器并双击 function 节点。
    2. 在代码中,找到 roll 并替换为 turn
    3. 单击 Done
    4. 单击 Deploy
    5. 重新激活您的智能手机上的 IoT 传感器。
    6. 只要应用程序开始发送数据,就垂直握持智能手机并开始以稳定的速度旋转它。(尝试使用与之前大体相同的时长。)
    7. debug 选项卡中检查新移动的测试结果。
    8. 禁用您的智能手机上的 IoT 传感器。
  5. 收集 wigglemtype 的数据。
    1. 转到 Node-RED 流编辑器并双击 function 节点。
    2. 在代码中,找到 turn 并替换为 wiggle
    3. 单击 Done
    4. 单击 Deploy
    5. 重新激活您的智能手机上的 IoT 传感器。
    6. 只要应用程序开始发送数据,就保持手臂垂直,稍微倾斜智能手机,然后开始以稳定的速度前后(或从左向右)旋转手中握持的智能手机。(尝试使用与之前大体相同的时长。)
    7. debug 选项卡中检查新移动的测试结果。
  6. 断开 Cloudant 节点的连接,以避免记录更多数据。
  7. 单击 Deploy

现在,我们已在数据库中记录了不同移动类型的样本数据,我们需要将该数据库连接到我们的分析工具 SPSS Modeler。我们构建一个统计模型,“教它”了解这些移动操作的数据结构。

3

安装并配置 Cloudant Extension,以便将 SPSS Modeler 连接到数据库

在将我们的数据库连接到我们的建模工具之前,需要先安装 SPSS Modeler。具体步骤取决于您的 SPSS Modeler 版本和操作系统。如果已安装 SPSS Modeler,您可以使用自己安装的版本。

SPSS Modeler 可以使用公共资产进行扩展。我们使用这些公共资产之一来连接到 Cloudant 数据库。执行有效安装之后,安装这些必要的扩展。

  1. 转到 SPSS Predictive Analytics 网站的 Downloads 区域,向下滚动并单击 Get R/Python。使用该表格查找正确的 R 版本,按照提供的链接下载 R 并将它安装在您的计算机上。(我使用的是 SPSS Modeler 18.1 和 R 3.2.2。)
  2. 在 GitHub 中,转到 R essentials for Modeler。找到适合您的平台和 SPSS Modeler 的正确版本并进行安装。
  3. 在 GitHub 中,安装 Cloudant Extension for SPSS Modeler
  4. 提取 Cloudant Extension 文件。

    Cloudant Extension 位于一个包含示例 SPSS 流的压缩文件 (.zip) 中。我们需要修改该示例流来连接到我们自己的 Cloudant 数据库。

    备注:该压缩文件还在 Example 文件夹中包含了 PDF 格式的文档。请参阅名为 Mining Cloud Data with SPSS 的文档。

  5. 在 SPSS Modeler 中的 Example 文件夹中,打开 cloudant_import_demo_complete_real_sensor.str 流。示例流的左上方包含一个与 Cloudant 数据库的简单连接和一个传输到表的输出。
  6. 除了 User Input 节点以及与 Cloudant 节点的简单连接之外,删除流中的所有内容。
  7. 用新的名称保存该流。保持 SPSS Modeler 窗口处于打开状态。

    备注:Cloudant 节点基于一个通用的 R 节点,因此需要一个 input 节点。出于这个原因,我们可以在这里找到 User Input 节点。不要删除它,即使它没有执行任何相关操作。

    SPSS Modeler 中的流现在应类似于下图。

  8. 要连接到 Cloudant 节点,需要将连接凭证替换为我们自己的 Cloudant 实例凭证。可以在您的 IBM Cloud Dashboard 中查找它们:
    1. 登录到 IBM Cloud。
    2. 从汉堡包形状的菜单中,选择 Dashboard
    3. 在 IBM Cloud Dashboard 的 Cloud Foundry Apps 下,单击您的应用程序名称。
    4. 单击 Connections
    5. 在 Cloudant 磁贴上,单击 View credentials。我们需要一些字符串值。
    6. 使用 Copy 按钮复制全部文本。将它们粘贴到您选择的文本编辑器中,保存它们以供将来引用。
  9. 返回到打开的 SPSS Modeler 流,双击 Cloudant 节点以打开该节点的配置。
  10. 从您记下的文本中复制 hostusernamepassword 的值,并将它们粘贴到 Cloudant 节点中的匹配字段中。

    备注:不要复制引号。

  11. database 字段中,输入 iotmovements。结果应类似于下图。
  12. 单击 OK
  13. 右键单击 Table 选项卡,单击 Run 来查看来自您的移动类型记录的移动数据。

现在,我们已在 SPSS Modeler 的基于桌面的分析工作台工具与基于云的数据库之间建立了一个有效连接。然后,可以像分析任何本地数据库或文件一样分析该数据。

接下来,我们将创建一个“知道”如何识别原始数据中的移动类型的预测模型。

4

在 SPSS Modeler 中创建一个分类模型流

SPSS Modeler 从现有数据“学习”如何创建一个模型,并使用结果模型将所学知识应用到新数据。

在这一步中,我们向该模型教授我们记录的数据。结果模型“知道”识别不同移动类型所需的参数组合。

在统计术语中,这是一个分类决策树模型。SPSS Modeler 的巨大优势在于,我们不需要进一步了解统计数据 - 该工具会自动找到正确的模型。

我们的教程反映了一个有关真实数据科学项目的事实:80-90% 的工作是以某种方式获取并转换数据。在我们的例子中,需要执行两个简单步骤:

  • 让时间戳可用于进一步分析。
  • 利用记录的原始数据计算一个新度量指标。
4a

转换时间戳

时间戳是传感器提供的需要转换才能使用的原始数据的一个很好示例。来自智能手机应用程序的时间戳是一个以 1970 年 1 月 1 日为起点的序列号。我们可以在流的属性中设置这个参考点。

  1. 在 SPSS Modeler 中,选择 File > Stream Properties
  2. Options 选项卡上,选择 Date/Time
  3. 对于 Date baseline,输入 1970
  4. 单击 OK
  5. 保存流。
  6. 在流中,选择 Cloudant 节点。
  7. 在底部托盘中的 Field Ops 选项卡中,双击 Derive 节点并将它添加到 Cloudant 节点的后面。
  8. 双击 Derive 节点。
  9. Annotations 选项卡上,为该节点输入一个自定义名称 timestamp
  10. 选择 Settings 选项卡。
  11. 对于 Derive 字段,输入 timestamp
  12. Formula 字段中,键入或粘贴此代码:datetime_timestamp(stime/1000)

    结果应类似于下图。

  13. 单击 OK

新字段包含一个时间和日期值,可供 SPSS Modeler 用于绘制图表和分析。本教程不会使用它(它只是一个转换示例),但是,如果您以后想绘制数据图表,可以选择它。

4b

为使用的能量计算一个新度量指标

XYZ 方向的移动的原始数据可能不足以做出有效的预测。在数据科学项目中,一种非常典型的做法是使用原始数据计算一个新度量指标。在原始教程中,Kienzler 计算了总能量(类似于所有方向的相对移动)。在这里,我们将将通过添加另一个 Derive 节点,来再次应用该示例。

  1. 选择 timestamp 节点。
  2. 在底部托盘中,双击 Derive 节点。这会在 timestamp 节点的后面插入一个包含连接的新节点。
  3. 在新节点的 Annotations 选项卡上,为该节点输入自定义名称 energy
  4. 选择 Settings 选项卡。
  5. 对于 Derive 字段,输入 energy
  6. Formula 字段中,键入或粘贴此代码:

    sqrt((X*X)+(Y*Y)+(Z*Z))

    结果应类似于下图。

  7. 单击 OK
4c

告诉 SPSS Modeler 要预测的目标是什么

在这一步,我们会告诉 SPSS Modeler 到底应该预测什么 - 我们的目标是什么?此操作是通过使用一个 Type 节点来完成的。

在第二个 Derive 节点 energy 的后面,添加一个新的 Type 节点。

  1. Type 节点拖到流中的 Energy 节点的后面。
  2. 要将该节点连接到流,可选择 Energy 节点,按 F2,然后将该连接拖到新的 Type 节点。
  3. 双击 Type 节点并单击 Read Values。等待此过程的完成。
  4. Types 选项卡上,找到 stimetimestamp 行。
  5. Role 列中的两个值都更改为 None

    备注:我们主要在以后绘制结果图形时需要使用时间戳、日期和时间。在自动创建模型的过程中不会考虑这些字段。

  6. 对于 mtype,将 Role 列中的值更改为 Target
  7. 单击 OK
  8. 单击 Save
4d

添加一个分类模型

我们使用一个分类模型来“学习”原始数据、计算的能量与移动类型之间的连接。该模型将学习通常观察哪种输入数据组合来了解 3 种不同的移动类型。

SPSS Modeler 知道不同分类(或决策树)算法,甚至可以自动找到最有效的模型。因为我们希望稍后将该模型部署到 IBM Cloud 中的 IBM Machine Learning 中,所以我们在这里使用了一个独特的算法。

  1. Modeling 面板,将一个 C&R Tree 节点添加到 Type 节点的后面。它会根据之前选择的目标来自动命名为 mtype
  2. 右键单击新的 mtype 模型节点并选择 Run。等待模型方块出现。

    备注:我选择了 C&R Tree 模型作为一个示例。在某些情况下(取决于您的各种数据),此模型可能不适用,而且您会获得错误消息。您可以试用其他模型,但要知道不是所有模型都能在云部署环境中运行。例如,您可以使用 Logistic 模型(回归)。这可能不是最佳算法,但它应该在许多情况下都有效。

  3. 双击名为 mtype 的模型方块来检查结果。左侧展开的决策树可能类似于下图。(准确的结果很大程度上取决于您自己记录的移动数据。)
  4. 关闭该窗口。
5

手动部署和测试分类模型

我们现在已将所有的智能手机移动信息编程到分类模型方块中。现在,我们可以收集一些新数据(不含移动类型),让模型告诉我们这可能属于哪种移动类型。我们将此过程称为“模型的部署”。

在这一步,我们将收集一些新数据并确定智能手机的移动方式。

5a

创建一个 Cloudant 数据库来收集评分数据

我们设置了一个新的 Cloudant 数据库来收集评分数据(与之前一样的原始数据,但不含移动类型标识 - 设想一个人将智能手机放到一个隐蔽位置),并在 SPSS Modeler 中手动运行它。

首先,创建新的数据库实例。

  1. 您应该已经登录到您的 IBM Cloud 帐户。如果尚未登录,请进行登录。
  2. 从汉堡包形状的菜单中,选择 Dashboard
  3. Dashboard 显示了您的应用程序和服务。在 Services 部分,可以看到您的 Cloudant NoSQL 数据库服务实例。
  4. 单击包含该 Cloudant NoSQL DB 实例的行。
  5. 在 Cloudant Service Details 页面上,单击 Launch。Cloudant Dashboard 将在一个新窗口中打开。
  6. 从左侧菜单中,单击数据库图标来查看您的 Cloudant 数据库列表。
  7. 单击 Create Database 并输入 iotmovements_scoring 作为名称。
  8. 单击 Create
5b

修改现有的 Cloudant 节点

我们创建了一个新的空数据库实例,并将从智能手机收集的传感器数据重定向到这个新实例中。

  1. 启动用于您的 Cloud Foundry 应用程序的 Node-RED 流编辑器。您的流应类似于下图。
  2. 双击 Cloudant 节点。
  3. Database 名称更改为 iotmovements_scoring,以便与 IBM Cloud 中使用的名称相匹配。
  4. 单击 Done
  5. 双击 function 节点。
  6. mtype 的字符串值更改为中性的值。

    mtype: "-",

    备注:由于技术原因,不要删除该行!

  7. 将 function 节点连接到 Cloudant 节点。
  8. 单击 Deploy
5c

通过测试来确保数据库收到了移动数据

我们已经创建数据库并为它提供了收集数据的代码。现在是时候测试它了。

  1. 像之前一样打开浏览器应用程序,以便重新激活您的智能手机上的 IoT 传感器。
  2. 建立应用程序连接后,执行一些不同的测试移动。
  3. 记住您执行的操作并禁用智能手机。这会在数据库中生成一些新数据,供我们现在用于评分。
  4. 记录一些数据后,您可能希望在 Node-RED 流中断开该 Cloudant 数据库的连接,以避免意外记录数据。

    备注:如果要断开连接,不要忘记执行部署!

5d

在 SPSS Modeler 中创建一个新流来分析移动数据(评分)。

我们需要创建一个有效的部署来预测移动类型。

  1. 在 SPSS Modeler 中,复制前 3 个节点:User InputCloudantTable。(选择这些节点;复制并粘贴它们。)
  2. 双击新的 Cloudant 节点。
  3. Connection settings 选项卡上,将 database 的名称更改为 iotmovements_scoring
  4. 单击 OK
  5. 右键单击 Table 节点并选择 Run 来测试该连接。
  6. 复制并粘贴 Derive 节点 date_timeEnergy,并将两个新节点连接到新的 Cloudant 节点。
  7. 将新流中的最后一个节点(Energy 节点)连接到旧流中的 mtype 模型方块。

    备注:新模型会自动连接到原始数据。在这里,我们将此连接替换为了包含评分数据的新流部分。

    1. 右键单击 Energy 节点,选择 Connect,然后单击 mtype 模型方块。

      备注:如果需要的话,您可能想先通过拖动将该方块节点,将它移动到画布上。

    2. 选择 Replace
    3. 选择 mtype 模型方块,在底部托盘区中的 Output 选项卡上,找到 Table 节点并双击它,将它添加到 mtype 模型方块的后面。
    4. 右键单击 Table 并选择 Run
    5. 在结果表中,滚到右侧,您会看到预测的移动类型和对此预测的评分。

      备注:此评分离 1.0 越近,预测结果就越好。

我们现在已有一个可以找到移动类型的“最佳猜测结果”的有效部署。有时,对传感器数据“动态”评分可能比在评分前将它记录在数据库中更有用。

6

向 SPSS 流添加一个用于实时评分的新分支

IBM Cloud 平台使您能轻松快速地将预测数据流部署到云。该数据可直接用于评分,无需您自己的软件基础架构。

IBM Cloud 中的 Machine Learning 服务可使用 SPSS Modeler 流文件 (.str) 执行基于云的评分。可以使用一个 Cloud Foundry 应用程序(比如我们已在使用的应用程序)将数据提供给这个流。我们再次使用 Node-RED 来设置所需的数据流。Machine Learning 服务省略(或剪切掉了)流中的第一个和最后一个节点,将剩余节点放到 Node-RED 数据流中。我们将再次尝试执行此过程来完全理解该思路。

回顾一下现有的 SPSS Modeler 流。它目前看起来类似于下图。

设想如果剪切掉第一个和最后一个节点,这个流看起来会是什么样。这不会奏效。开头的 User Input 节点是纯技术性的(请记住,Cloudant 节点需要一个输入),而且如果没有最后一个节点,就根本没有输出。我们不需要的是用于部署的 Cloudant 节点,因为数据直接从 Cloud Foundry 应用程序流入。但是,流的剩余节点仍需要相同的字段结构。有一个解决此问题的简单办法。

  1. 如果您想让您的流保留目前的样子,可以创建一个备份副本,或者将上述部分复制并粘贴到同一个 .str 文件中。
  2. 删除 Cloudant 节点下的 Table 节点,因为我们不需要它。
  3. 右键单击 Cloudant 节点,选择 Generate User Input Node
  4. 将新节点从 user input 重命名为 scoringdata
  5. 将新节点连接到 date_time 节点。这会为流提供正确的字段结构。新节点不会被使用,因为在将流部署到云中时会将其剪切掉。
  6. mtype 模型节点的后面,添加一个 Table 作为输出。这个表以后也会剪切掉并替换为 Node-RED 中的评分后数据流。
  7. 指定哪个节点是将在此流中用于评分的节点:右键单击新的 Table 节点并选择 Use as scoring branch。流中用于基于云的评分的相关部分已用绿色突出显示。结果应类似于下图。

    备注:我们可以删除左侧的两个 User InputCloudant 节点,但我总是保留这些部分,因为它们记录了我之前执行的操作。

  8. 将该文件保存为一个新名称并记住它在您的文件系统中的位置。
7

在 IBM Cloud 中使用 IBM Machine Learning 部署 SPSS Modeler 流

我们已为 IBM Cloud Machine Learning 服务中的部署准备好了 SPSS 流文件。现在我们已为部署本身做好了一切准备。

  1. 登录到 IBM Cloud,如有必要,请打开 IBM Cloud Dashboard。
  2. 单击您的 Cloud Foundry 应用程序的名称来打开它的控制台。

    备注:不要单击 Route 列中的链接。

  3. 从左侧菜单中单击 Connections
  4. 在窗口的右上方,单击 Connect New
  5. 从服务列表中,选择 Machine Learning 服务。
  6. Connect to 字段中,确认您的应用程序已被选中并单击 Create
  7. 在新创建的服务的控制台中,从左侧菜单中单击 Service credentials。目前没有列出任何凭证。
  8. 在空列表顶部,单击 New Credentials
  9. 在新条目的行上,单击 View Credentials 并将该文本字段的内容复制到一个文本文件。我们稍后需要 access_keyurl
  10. 从左侧菜单中,单击 Manage 返回到 Machine Learning 服务的控制台。
  11. SPSS Streams Service 下方,单击 Launch Dashboard
  12. 单击 Dashboard 选项卡。在这里,您可以上传在之前的步骤中编辑并保存的 .str 文件。
  13. 拖放 .str 文件或使用 Select File 按钮找到该文件。
  14. 指定一个 Context id。将一个唯一名称(比如 iotmovements)输入到该字段中并单击 Deploy

该列表现在应类似于下图。

8

为实现实时评分而设置数据流

我们现在可以将所有部分都连接起来:

  • 我们的 IoT 应用程序包含在智能手机上运行的传感器模拟器。
  • 来自传感器的每个数据集都被传送到包含 SPSS 评分模型的 Machine Learning 服务,而不存储在数据库中。
  • 此数据流现在需要使用 Node-RED 来创建。
8a

登录到 IBM Cloud 并在 Node-RED 中启动 Cloud Foundry 应用程序。

首先,我们需要再次在 Node-RED 中工作。

  1. 返回到 IBM Cloud Dashboard,单击应用程序名称,以便再次启动 Cloud Foundry 应用程序的仪表板。
  2. 单击 Visit App URL,然后单击 Go to your Node-REDflow editor 并登录(如果有必要)。您的流图应类似于下图 - 包含或不含与右侧的 Cloudant 节点的连接。(您之前可能已将它断开连接。)
8b

将现有数据库替换为在线评分数据库

我们将当前数据库存储替换为在线评分。如果您熟悉该环境,还可以同时建立数据库存储和在线评分。

  1. 断开现有 function 节点与 IBM IoT 节点的连接,但不要删除该节点。
  2. 添加一个新的 function 节点,并将 IBM IoT 节点连接到该新节点。
  3. 插入一个 http request 节点,并将它连接到新的 function 节点的后面。
  4. 用于调用 Machine Learning 服务 API 的 URL 具有以下结构:https://<URL>/pm/v1/score/<CONTEXTID>?accesskey=<ACCESS_KEY>
    使用文本编辑器填充变量。
    1. 使用在之前的步骤(第 9 步)中创建的 Machine Learning 服务凭证中的 urlaccess key
    2. 使用在之前的步骤(第 14 步)中上传 SPSS 流时指定的 Context id。例如,我的完整字符串类似于下面这个链接。https://ibm-watson-ml.mybluemix.net/pm/v1/score/iotmovements?accesskey=7Axxxxxxxx1WXWeZv
  5. 将完成的字符串复制并粘贴到 http request 节点的 URL 字段中。
  6. Return 字段中,选择 a parsed JSON object
  7. 单击 Done
  8. http request 的输入是一个复杂对象,该对象包含字段的标题元组和具有必要值的匹配元组。我们使用 http request 节点之前的 function 节点执行必要的转换,这里不要过于深究细节。此函数连接到了我们之前创建并重命名的 scoringdata 节点。
    1. 双击 function 节点,并将以下代码复制到 Function 字段中:
      		msg.headers = { "Content-type" : "application/json"  };
      		msg.payload =
      		{
      		    "tablename":"scoringdata",
      		    "header":["X_id", "X_rev", "X", "Y", "Z", "alpha", "beta","gamma","stime","mtype","SENSORID"],
      		    "data":[["X_id","x_rev", msg.payload.d.ax, msg.payload.d.ay, msg.payload.d.az, msg.payload.d.oa, msg.payload.d.ob, msg.payload.d.og, msg.payload.d.ts, "-", msg.payload.d.id]]
      		};
      		return msg;
    2. function 节点重命名为一个有用的名称。
    3. 单击 Done

      最终结果应该类似于下图。

8c

测试评分

将数据库替换为基于云的评分后,我们可以测试评分是否工作正常。

  1. 将一个 debug 节点连接到 http request 节点的后面。
  2. 单击 Deploy
  3. 如果您的智能手机上的 IoT 传感器未激活,请重新激活它。
  4. 在 Node-RED 中,转到 debug 选项卡并将它与下面的示例比较。可以适当地展开显示的对象。
8d

让 JSON 对象更实用

将结果 JSON 对象转换为仅包含必要信息的更实用的格式。

  1. 重用已断开连接的旧 function 节点(如果已经删除了该节点,则添加一个新节点),将以下代码复制到 Function 字段中。这会从 JSON 对象内的堆叠数组中挑选所需的条目。
    		msg.payload =
    		{
    		 X : msg.payload[0].data[0][2],
    		 Y : msg.payload[0].data[0][3],
    		 Z : msg.payload[0].data[0][4],
    		 alpha : msg.payload[0].data[0][5],
    		 beta : msg.payload[0].data[0][6],
    		 gamma : msg.payload[0].data[0][7], 
    		 timestamp : msg.payload[0].data[0][8],
    		 device : msg.payload[0].data[0][10],
    		 energy : msg.payload[0].data[0][12],
    		 pred_mtype : msg.payload[0].data[0][13],
    		 pred_score : msg.payload[0].data[0][14]
    		};
    		return msg;
  2. 单击 Done
  3. 连接流末尾处的 debug 节点。
  4. 单击 Deploy。使用该智能手机的另一次测试应得到类似的 debug 输出。要特别注意预测的移动类型和预测分数。

最后,对于以后的报告,您可能想将结果显示在网页上和/或将它收集到另一个数据库中。对于数据库,您应该知道现在应该做什么。对于网页,这可能是一篇您需要自己编写的重要教程。

结束语

本教程起源于我个人对 IoT、云、传感器,尤其是“魔力何在?”问题的疑惑。从技术上讲,我们将一个传感器(我们的智能手机)连接到云,将生成的数据存储到云中,还使用 SPSS Modeler 分析了该数据。我们创建了一个模型,它能通过查看传感器数据来判断“设备发生了什么”。我们还学习了为创建的模型赋予生命力的不同方式。

就我而言,我获得的最佳经验就是 IBM Cloud 平台上的所有相互联系。在 IBM Cloud 之前,我执行过许多类似的测试设置,而许多配置和简单设置步骤令人感到困惑。有许多没有敲定的问题值得考虑,知道 IBM Cloud 是一个值得访问并了解如何着手解决的地方会很有帮助。此外,使用与云设置相连的统计和预测工作台 SPSS Modeler 具有不错的效果。

您接下来应该怎么做,或者您如何学到更多知识?可以朝所有方向自由拓展。第一个逻辑步骤是让模型变得更准确。考虑如何处理您自己的真实示例。如果您想要找到自己的拥有真实传感器数据的实际场景,可以从小范围开始来基本了解该数据,尤其是它背后的业务案例。对我来讲,完全不需要处理没有合适的目的或业务案例的数据。

从业务角度讲,要解决的问题可能非常实际,例如“如何在不更换旧机器的情况下从旧机器中获取传感器数据?”在数据方面,询问自己“我们真的需要全世界在未来几年内将会生成的所有详细传感器数据吗?”如果需要,我们如何判断哪些数据是重要数据?此问题的一个答案可能是,通过在 IBM Cloud 中也能找到的认知方法来扩展该架构。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=物联网, 认知计算, Information Management
ArticleID=1056388
ArticleTitle=分析 IoT 设备移动数据
publish-date=01032018