楼主: 我的素质低
4954 3

[clementine] 〖SPSS Modeler〗用 R 为 IBM SPSS Modeler 16 创建新节点 [推广有奖]

学术权威

83%

还不是VIP/贵宾

-

TA的文库  其他...

〖素质文库〗

结构方程模型

考研资料库

威望
8
论坛币
23388 个
通用积分
28302.3504
学术水平
2705 点
热心指数
2881 点
信用等级
2398 点
经验
223623 点
帖子
2977
精华
52
在线时间
2175 小时
注册时间
2012-11-24
最后登录
2024-1-13

一级伯乐勋章 初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章 中级信用勋章 高级学术勋章 高级热心勋章 高级信用勋章 特级学术勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

来自IBM DEVELOPERWORKS

IBM SPSS Modeler 中的可视编程基于叫做 SPSS Modeler 节点的图标。用户创建一个流程来让数据经历一系列节点的处理,这个流程叫做。节点表示要在数据上执行的操作,节点之间的链接表示数据流的方向。通常,我们使用一个数据流从一组数据源中读取数据,然后处理该数据,将该数据发送到一个目的地(可能是一个表或查看器)。


开始之前的准备工作

要在 SPSS Modeler 中运行 R 代码,需要下载并安装 R 2.15.2IBM SPSS Modeler Essentials for R Plugin

SPSS Modeler 不能用作编写 R 代码的工作台;它只能够运行 R 代码。使用 RStudio 等工作台来编写和测试 R 代码,然后再将它移植到 IBM SPSS Modeler。


Custom Dialog Builder

Custom Dialog Builder(最先在 IBM SPSS Statistics 中提供)使您能够创建和管理将在 SPSS Modeler 16 中使用的节点。要打开 Custom Dialog Builder(如 图 2 所示),可以单击主菜单中的 Tools > Custom Dialog Builder for R,其中显示了以下元素:


  • 对话框画布:您设计节点对话框的布局的区域。
  • Properties 窗格:列出组成节点对话框的属性和该对话框的属性,比如节点类型。
  • 工具面板:设置可包含在自定义节点对话框中的控件。

图 2. Custom Dialog Builder


回页首

示例 1. 创建一个地理编码节点作为第一个节点

作为一个创建新节点的示例,开发一个节点来对地理数据执行地理编码。地理编码 是从其他地理数据(比如街道地址、ZIP 代码和类似数据)中找到地理坐标的过程。许多 Internet 公司(比如 OpenStreetMap、Mapquest、Bing 和 Google Maps)都提供了地理编码服务。本文将介绍如何基于 Google Maps API 构建一个节点。


第 1 步. 获取并测试用于地理编码的 R 代码

要创建一个新节点,可以获取针对地理编码任务的适当的 R 代码。R 代码可由任何拥有 R 技能的用户编写,或者从 Internet 下载。本文依靠 清单 1 中的 R 代码,该清单来自文章 “使用 Google maps API 和 R”。在 SPSS Modeler 中使用此代码之前,应使用 RStudio 或 R 控制台对它进行测试。


  • 打开 Rstudio 并运行 清单 1 中的代码。

    • 创建一个变量,其中包含字符串形式的地址,比如 address<-geoCode("The White House, Washington, DC")
    • 运行命令 address[1] 来获取纬度,运行 address[2] 来获取经度。结果应为 "38.8976831" 和 "-77.0364972"。清单 1. 使用 Google Maps API 执行地理编码的 R 代码
      1. #### This script uses RCurl and RJSONIO to download data from Google's API:
      2. #### Latitude, longitude, location type (see explanation at the end), formatted address
      3. #### Notice ther is a limit of 2,500 calls per day

      4. library(RCurl)
      5. library(RJSONIO)
      6. library(plyr)

      7. url <- function(address, return.call = "json", sensor = "false") {
      8. root <- "http://maps.google.com/maps/api/geocode/"
      9. u <- paste(root, return.call, "?address=", address, "&sensor=", sensor, sep = "")
      10. return(URLencode(u))
      11. }

      12. geoCode <- function(address,verbose=FALSE) {
      13. if(verbose) cat(address,"\n")
      14. u <- url(address)
      15. doc <- getURL(u)
      16. x <- fromJSON(doc,simplify = FALSE)
      17. if(x$status=="OK") {
      18. lat <- x$results[[1]]$geometry$location$lat
      19. lng <- x$results[[1]]$geometry$location$lng
      20. location_type <- x$results[[1]]$geometry$location_type
      21. formatted_address <- x$results[[1]]$formatted_address
      22. return(c(lat, lng, location_type, formatted_address))
      23. } else {
      24. return(c(NA,NA,NA, NA))
      25. }
      26. }

      27. ##Test with a single address
      28. #address <- geoCode("The White House, Washington, DC")
      29. #address
      30. #[1] "38.8976831"
      31. #[2] "-77.0364972"
      32. #[3] "APPROXIMATE"
      33. #[4] "The White House, 1600 Pennsylvania Avenue Northwest, Washington, D.C., DC 20500, USA"
      复制代码

  • 要验证这些坐标是否正确,可以在浏览器中访问 Google Maps,并将这些坐标粘贴在搜索框中,如 图 3 中所示。在本例中,地理编码能正常工作,这些坐标指向华盛顿的白宫。图 3. 在 Google Maps 中标出这些坐标 [38.8976831, -77.0364972]。

运行 清单 1 中的代码时,执行了以下任务:


  • 创建 Web 服务的 URL。因为此功能使用了一个 Web 服务,所以第一个操作是创建该 URL 来调用该服务。作为参数传递的地址在编写是包含空格,但会删除空格来创建 Google Maps API 需要的特定格式的 URL。结果可能是 XML 或 JSON 格式的。在此示例中,使用了 JSON 输出。
  • 创建了连接并收到了 JSON。
  • 解析该 JSON,获得给定的地址的纬度和经度

第三方 API(比如 Google Maps API)可能具有 使用限制。免费的 Web 服务也提供了地理编码功能,而且只需对代码稍作调整即可使用它们。但是免费服务所提供的数据可能不太准确。

第 2 步. 在 IBM SPSS Modeler 16 上创建新节点

现在代码已经过了测试,下一步是开发新节点。


  • 打开 IBM SPSS Modeler 16 并打开 Custom Dialog Builder。
  • 在节点的属性中,放入与 图 4 中相同的参数。对于 Node Icon,从 本文的示例代码 中下载图像 geocode_icon.gif,使用它作为您创建的新节点的图标。图 4. 要在 Custom Dialog Builder 中设置的属性
  • 从工具中,拖放 Field Chooser,双击 Field Chooser,将 identifier 更改为 address,将 Title 更改为 Address field。
  • 单击 Edit > Script Template 并粘贴入 清单 2 的 R 代码。

该节点的创建几乎完成了,但还必须对 R 代码执行一些修改,以映射来自 SPSS Modeler 流的数据。请参阅 SPSS Modeler 的 “允许的语法” 文档。其中描述了 R 可识别的语句和函数。要获取帮助,请参阅该文档获取脚本模板,位于 示例 下。

在合适的位置以 %%Identifier%% 格式指定控制标识符。按下 Ctrl+Spacebar 显示一个可用控制标识符列表。在本例中,该值为 %address%%。

  1. location <- modelerData$%%address%%
复制代码


R 对象 modelerData 是包含原始数据的数据范围。要为纬度和经度添加新列,可以使用 cbind 函数创建一个数据范围,其中包含原始数据和生成的输出,如下所示。

  1. modelerData<-cbind(modelerData,lat)
复制代码


R 对象 var1 在 SPSS Modeler 中设置一个针对数据模型的新字段,用于描述生成的新数据的类型和结构。新字段的名称和存储的类型在这个新字段中指定。

  1. var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real",
  2. fieldFormat="",fieldMeasure="",  fieldRole="")
复制代码


R 对象 modelerDataModel 包含原始数据的数据模型和生成的额外的字段。这个额外的字段名为 Latitude,拥有指定的特征。

  1. modelerDataModel<-data.frame(modelerDataModel,var1)
复制代码


在 SPSS Modeler 中处理 R 代码时,可使用一些命令对 R 脚本执行有限的调试,包括 print() 和 str()。

图 5 显示了脚本模板和开发末期的节点。

图 5. 要在 Custom Dialog Builder 中设置的属性

[size=1.16em]下面这个代码清单显示了需要执行的修改。

清单 2. 包含针对地理编码而进行的修改的 R 代码
  1. library(RCurl)
  2. library(RJSONIO)
  3. location <- modelerData$%%address%%
  4. print(location)
  5. root <- "http://maps.google.com/maps/api/geocode/"
  6. u <- paste(root,"json", "?address=", location,
  7. "&sensor=", "false", sep = "")
  8. u <- gsub(' ','%20',u) #Encode URL Parameters
  9. print(u)
  10. require("plyr")
  11. doc <- aaply(u,1,getURL)
  12. json <- alply(doc,1,fromJSON,simplify = FALSE)
  13. coord = laply(json,function(x) {
  14.     if(x$status=="OK") {
  15.       lat <- x$results[[1]]$geometry$location$lat
  16.       lng <- x$results[[1]]$geometry$location$lng
  17.       return(c(lat,lng))
  18.     } else {
  19.       return(c(NA,NA))
  20.     }
  21.   })
  22. lat<-c(coord[,1])
  23. lng<-c(coord[,2])
  24. modelerData<-cbind(modelerData,lat)
  25. print(modelerData)
  26. var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real",
  27. fieldFormat="",fieldMeasure="",  fieldRole="")
  28. modelerDataModel<-data.frame(modelerDataModel,var1)
  29. modelerData<-cbind(modelerData,lng)
  30. print(modelerData)
  31. var2<-c(fieldName="Longitude",fieldLabel="",fieldStorage="real",
  32. fieldFormat="",fieldMeasure="",  fieldRole="")
  33. modelerDataModel<-data.frame(modelerDataModel,var2)
复制代码


第 3 步. 保存并安装新节点

[size=1.16em]开发完成后,保存该节点,以便将它分发给同事或其他 SPSS Modeler 用户。单击 Custom Dialog Builder 中的 File > Save。该文件是使用扩展名 .cfd 来保存的。安装新节点。单击 File > Install。关闭 Custom Dialog Builder。新节点位于属性窗格中指定的 Record Ops 面板中。

第 4 步. 测试地理编码节点

[size=1.16em]使用 User Input 节点生成手动数据来测试该节点:


  • 单击 Sources 面板,并将 User Input 节点拖放到画布上。
  • 双击 User Input 节点,创建一个名为 Location 的新字段,然后选择 String 作为存储。指定一些地址作为值。在本例中,使用了以下地址:"New York City""San Francisco,California""Paris, France"


  • 单击 Preview,以可视化的形式在一个表中显示生成的数据。图 6. 使用 User Input 节点手动生成的数据
  • 从 Field Ops 面板选择刚创建的新 Geocoding 节点。将 User Input 节点连接到 Geocoding 节点和一个 Table 节点作为输出。图 7. 测试新的地理编码节点的流
  • 双击 Geocoding 节点。在 Address 字段中,选择 Location
  • 运行该流。预期的输出是一个包含 3 列的表:location、latitude 和 longitude。图 8. 已完成的测试新地理编码节点的流

[size=1.16em]现在我们已经创建了第一个使用 R 的新节点,而且该节点能够正常运行。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:SPSS Modeler IBM SPSS MODELER modele model python 编程语言 数据流 数据源 接口

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 60  论坛币 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

心晴的时候,雨也是晴;心雨的时候,晴也是雨!
扣扣:407117636,欢迎一块儿吐槽!!
沙发
niuniuyiwan 在职认证  发表于 2015-11-17 12:11:44 来自手机 |只看作者 |坛友微信交流群
感谢分享,支持楼主!!!

使用道具

藤椅
nicolechen 发表于 2017-8-25 14:11:05 |只看作者 |坛友微信交流群
那个下载地址找不到,可以直接去开发者论坛找:https://github.com/IBMPredictiveAnalytics/R_Essentials_Modeler/releases?cm_mc_uid=23949019268515034793115&cm_mc_sid_50200000=1503640425

使用道具

板凳
zjlovefei 发表于 2018-3-7 15:02:10 |只看作者 |坛友微信交流群
nicolechen 发表于 2017-8-25 14:11
那个下载地址找不到,可以直接去开发者论坛找:https://github.com/IBMPredictiveAnalytics/R_Essentials_M ...
找到了,非常好!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 00:20