Board logo

标题: 使用 R 为 IBM SPSS Modeler 16 创建新节点(2)实例1 [打印本页]

作者: look_w    时间: 2018-6-23 11:09     标题: 使用 R 为 IBM SPSS Modeler 16 创建新节点(2)实例1

示例 1.        创建一个地理编码节点作为第一个节点作为一个创建新节点的示例,开发一个节点来对地理数据执行地理编码。地理编码 是从其他地理数据(比如街道地址、ZIP 代码和类似数据)中找到地理坐标的过程。许多        Internet 公司(比如 OpenStreetMap、Mapquest、Bing 和 Google Maps)都提供了地理编码服务。本文将介绍如何基于 Google Maps        API 构建一个节点。
第 1 步. 获取并测试用于地理编码的 R 代码要创建一个新节点,可以获取针对地理编码任务的适当的 R 代码。R 代码可由任何拥有 R 技能的用户编写,或者从 Internet 下载。本文依靠 清单 1 中的 R 代码,该清单来自文章 “”。在 SPSS Modeler 中使用此代码之前,应使用 RStudio 或 R 控制台对它进行测试。
运行  中的代码时,执行了以下任务:
第三方 API(比如 Google Maps API)可能具有 。免费的 Web        服务也提供了地理编码功能,而且只需对代码稍作调整即可使用它们。但是免费服务所提供的数据可能不太准确。
第 2 步. 在 IBM SPSS Modeler 16 上创建新节点现在代码已经过了测试,下一步是开发新节点。
该节点的创建几乎完成了,但还必须对 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
2
var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real",
fieldFormat="",fieldMeasure="",  fieldRole="")




R 对象 modelerDataModel 包含原始数据的数据模型和生成的额外的字段。这个额外的字段名为        Latitude,拥有指定的特征。
1
modelerDataModel<-data.frame(modelerDataModel,var1)




在 SPSS Modeler 中处理 R 代码时,可使用一些命令对 R 脚本执行有限的调试,包括 print() 和        str()。
图 5 显示了脚本模板和开发末期的节点。
图 5. 要在 Custom Dialog Builder 中设置的属性
下面这个代码清单显示了需要执行的修改。
清单 2. 包含针对地理编码而进行的修改的 R        代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
library(RCurl)
library(RJSONIO)
location <- modelerData$%%address%%
print(location)
root <- "http://maps.google.com/maps/api/geocode/"
u <- paste(root,"json", "?address=", location,
"&sensor=", "false", sep = "")
u <- gsub(' ','%20',u) #Encode URL Parameters
print(u)
require("plyr")
doc <- aaply(u,1,getURL)
json <- alply(doc,1,fromJSON,simplify = FALSE)
coord = laply(json,function(x) {
    if(x$status=="OK") {
      lat <- x$results[[1]]$geometry$location$lat
      lng <- x$results[[1]]$geometry$location$lng
      return(c(lat,lng))
    } else {
      return(c(NA,NA))
    }
  })
lat<-c(coord[,1])
lng<-c(coord[,2])
modelerData<-cbind(modelerData,lat)
print(modelerData)
var1<-c(fieldName="Latitude",fieldLabel="",fieldStorage="real",
fieldFormat="",fieldMeasure="",  fieldRole="")
modelerDataModel<-data.frame(modelerDataModel,var1)
modelerData<-cbind(modelerData,lng)
print(modelerData)
var2<-c(fieldName="Longitude",fieldLabel="",fieldStorage="real",
fieldFormat="",fieldMeasure="",  fieldRole="")
modelerDataModel<-data.frame(modelerDataModel,var2)




第 3 步. 保存并安装新节点开发完成后,保存该节点,以便将它分发给同事或其他 SPSS Modeler 用户。单击 Custom Dialog Builder 中的 File >          Save。该文件是使用扩展名 .cfd 来保存的。安装新节点。单击 File > Install。关闭 Custom        Dialog Builder。新节点位于属性窗格中指定的 Record Ops 面板中。
第 4 步. 测试地理编码节点使用 User Input 节点生成手动数据来测试该节点:
现在我们已经创建了第一个使用 R 的新节点,而且该节点能够正常运行。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0