TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data

原文:https://community.tibco.com/feed-items/using-public-data-rest-api-spotfire

您是否曾在网上浏览数据并以API形式查看数据?一些组织,包括一些城市,正在通过开放数据门户提供公共数据。例如,以下是新加坡,欧盟,纽约市和西雅图的开放数据门户的链接。

浏览这些数据集目录,有一些不同的选项可以获取可以使用的数据副本; 最直接的选择是将数据集的副本下载为csv文件。许多数据集都有另一种选择,即使用REST API来处理数据。API选项非常有吸引力,因为您获得了数据集的最新版本,因此您最终不会得到使用陈旧数据的分析。

作为一个示例,这里是指向描述西雅图周围公共艺术装置数据的页面的链接:  

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第1张图片

该页面包含一些基本信息,例如通过视图数量和下载量来衡量数据集的流行度,页面底部显示数据前几个记录的预览。在右上角有一些选项,用于以几种不同的格式选择(包括csv)导出数据,以及另一个指向API信息的链接:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第2张图片

此API信息页面附带了一些有关如何使用此选项的良好文档; 主要信息是“API端点”,它是访问数据本身的方式。    以下是西雅图周围公共艺术装置的API端点。如果您在浏览器中转到此链接(例如,单击链接),您将看到JSON格式的数据。JSON是一种流行的 API 格式数据格式,XML是另一种经常使用的格式。

我们将使用Spotfire原生R引擎(TERR)通过此API获取数据。使用TERR访问此JSON格式数据的便捷方法是通过R包“jsonlite”,它提供了易于使用的工具来操作JSON数据。

我们首先打开一个新的Spotfire dxp文件。从这里我们将使用Spotfire的内置TERR来开发R代码。 

首先,我们打开“TERR工具”窗口(来自Spotfire,工具 - > TERR工具)。  

我们的第一个任务是确保在我们的TERR环境中安装“jsonlite”R软件包,这是一次性操作,在此之后不需要重复。在TERR工具窗口中,单击“包管理”选项卡,然后按右上角的“加载”。显示可用R包的列表。我们在搜索栏中输入“jsonlite”以缩小列表范围,如下所示:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第3张图片

然后,我们单击“安装”按钮在我们的系统上安装jsonlite软件包。这是一次性操作,不需要再次进行。

首先,让我们做一些探索性工作,并使用TERR控制台在交互式TERR会话中加载JSON数据。这是一个方便的环境,我们可以探索数据并尝试以不同的方式交互操作它。一旦我们有一个简短的功能脚本,我们就会把它打包成一个TERR数据函数,在那里可以重复使用它,而不必再看到代码。

要启动我们的TERR控制台,我们将转到TERR工具窗口的“引擎”选项卡:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第4张图片

从这里我们点击标有“Launch TERR Console”的按钮,这会打开一个控制台,我们将在那里完成所有的探索性工作:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第5张图片

对于更多涉及的项目,有更多全功能的交互式开发环境(IDE),例如RStudio,但是这个控制台可以像我们在这里一样开发一个简单的脚本。

在我们的交互式TERR会话中,我们使用library()函数加载jsonlite包,并使用fromJSON()函数检索数据(“json payload”)并将此数据保存为我们命名为“artData”的新本地对象:

> library(jsonlite) 
> artData = fromJSON("https://data.seattle.gov/resource/public-art.json", 
      flatten=TRUE)

这里我们使用了可选参数“flatten = TRUE”来展平任何嵌套表。 

任何数据对象(例如artData)都将在会话中保留,直到会话窗口关闭或对象被删除。现在我们已经将JSON有效负载下载到我们的本地artData对象,我们可以在闲暇时检查这个对象。

我们调查一些基本信息:

> class(artData)
[1] "data.frame"
> dim(artData)
[1] 316  22

对象artData是一个包含316行和22列的简单数据框。因此,它可以直接返回Spotfire。 

请注意,如果我们为不同的数据源尝试了不同的API端点,则其JSON有效负载可能具有非常不同的结构。我们仍然可以在交互式TERR环境中检查和操作任何这些可能的数据结构; 但是,并非所有可由fromJSON()返回的对象都适合从TERR数据函数直接返回Spotfire。从TERR数据函数,我们可以将矩形对象返回到Spotfire(数据框和矩阵)或矢量对象,或“原子”对象,如字符串和数字或布尔值。

这正是我们在这个交互式TERR环境中进行早期探索的原因 - 如果我们遇到更复杂的数据结构,我们仍然可以在交互式环境中深入检查它,通常可以直接选择单个组件,可以从TERR数据功能返回。如果需要,可以编写TERR数据函数以返回多个数据对象。

在将此数据框返回到Spotfire之前,最好至少检查一下我们拥有的数据类型,因此我们使用R summary()命令:

> summary(artData)
    sac_id            project          artist_first_name  artist_last_name      title           description       
 Length:316         Length:316         Length:316         Length:316         Length:316         Length:316        
 Class :character   Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 
 classification        media               date             location           address            latitude        
 Length:316         Length:316         Length:316         Length:316         Length:316         Length:316        
 Class :character   Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 
  longitude         :@computed_region_q256_3sug :@computed_region_kuhn_3gp2 :@computed_region_ru88_fbhk
 Length:316         Length:316                  Length:316                  Length:316                 
 Class :character   Class :character            Class :character            Class :character           
 Mode  :character   Mode  :character            Mode  :character            Mode  :character         
 
 measurements       :@computed_region_2day_rhn5 :@computed_region_cyqu_gs94 geolocation.latitude
 Length:316         Length:316                  Length:316                  Length:316          
 Class :character   Class :character            Class :character            Class :character    
 Mode  :character   Mode  :character            Mode  :character            Mode  :character    
 
 geolocation.longitude geolocation.human_address
 Length:316            Length:316               
 Class :character      Class :character         
 Mode  :character      Mode  :character  

我们注意到数据表中的所有列都具有类“字符”,这是有意义的,因为它们来自JSON有效负载,它本身就是一个字符串。

我们想将纬度和经度列转换为Spotfire的数值。Spotfire当然也可以做到这一点; 以下是我们在TERR脚本中执行此操作的方法:

artData$latitude = as.numeric(artData$latitude)
artData$longitude = as.numeric(artData$longitude)

由于我们示例中的artData现在已准备好返回Spotfire,因此我们在TERR中的开发工作已经完成,我们已准备好创建Spotfire TERR数据功能。

在Spotfire中,我们在新的dxp文件(工具 - >注册数据函数)中注册一个新的TERR数据函数,并根据我们的探索性工作使用此代码创建数据函数(单击以展开):

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第6张图片

我们将TERR数据功能命名为“Get Art Data”。我们还取消选中了“允许缓存”框,确保每次刷新时脚本都会运行。例如,如果我们在几个月后运行此数据函数,我们希望检索新数据而不使用任何缓存结果。  

接下来,我们转到“输出参数”选项卡,在此选项卡中指定我们将返回Spotfire的对象。在此选项卡上,我们单击“添加”按钮,弹出一个对话框,我们将artData声明为对象,使用Type“Table”返回Spotfire。请注意,我们需要将此对话框中的名称与我们创建的实际R对象的名称完全匹配。 

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第7张图片

一旦我们指定了至少一个输出参数返回Spotfire,我们的“注册数据函数”对话框右上角的“运行”按钮将最终启用,绿色三角形可见。如果我们将鼠标悬停在“运行”按钮上,则会出现一个弹出窗口,指示此按钮将“在分析和运行中保存数据功能”:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第8张图片

我们按下“运行”按钮一次,将此数据函数的副本嵌入到我们的Spotfire分析文件中,并询问我们有关Spotfire参数的说明,以用作输入或保存为输出。我们没有在数据函数中写入任何输入,因此我们跳转到“输出”选项卡,然后单击我们的一个输出artData:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第9张图片

我们指定我们将在名为artData的Spotfire分析中创建一个新数据表。 

管家提示:我们只按这个“运行”按钮一次(除非有执行错误)。数据函数执行并成功生成输出对象后,数据函数的副本已嵌入到Spotfire分析中。此时我们关闭这个“注册数据功能”对话框。如果我们再次按下“运行”按钮,我们最终会得到数据函数的第二个副本,这是我们不想要的。我们仍然可以编辑这个嵌入式数据函数,例如,我们可以编辑脚本本身,删除或添加输入或输出变量。要调出嵌入数据功能的编辑器,我们使用菜单数据 - >数据功能属性,然后导航到我们的“获取艺术数据”数据功能。

在Spotfire中运行我们的数据函数之后,我们将使用西雅图艺术装置的数据返回我们的表格(点击查看大图):

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第10张图片

使用左侧的“数据分析”弹出窗口检查数据,我们突出显示纬度和经度列,Spotfire建议使用地图图表:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第11张图片

我们选择此地图图表建议,并在Spotfire中显示地图。我们可以通过地图的“分类”列对这些标记进行颜色编码,以显示这些安装在西雅图周围的位置:

TIBCO Spotfire使用技巧:使用Spotfire中REST API访问Public Data_第12张图片

从这里我们可以对位置进行颜色编码(这里通过分类),应用Spotfire过滤器等。

如果我们将来某个时候打开这个Spotfire分析,我们所要做的就是刷新数据函数以获取更新的数据副本 

综上所述,

  • 许多公共数据源都可用作REST API,您可以在其中提供URL,并且服务以某种格式提供数据,通常是JSON。
  • 此JSON数据有效负载的结构因源而异,因此需要注意结构。
  • 我们已经展示了如何使用Spotfire的内置TERR环境作为开发一些简单的TERR代码来检索JSON数据,调查结构并返回Spotfire的便捷方式。
  • 使用API​​而不是下载数据副本的优点是可以轻松刷新API。

你可能感兴趣的:(TIBCO,Spotfire使用技巧,Spotfire数据可视化,TIBCO原厂,Spotfire代理,TIBCO,Spotfire技巧篇)