Python与R语言混合编程方法的研究和应用

2018-02-27 03:06宫薇薇齐向春裴世廉
计算机应用与软件 2018年1期
关键词:调用新建可视化

宫薇薇 齐向春 裴世廉

1(中国铁道科学研究院运输及经济研究所 北京 100081) 2(沈阳铁路局信息技术所 辽宁 沈阳 110002)

0 引 言

Python由Guido van Rossum于20世纪90年代编写,是一种面向对象的解释型语言,功能强大、简单易学、完全免费。拥有大量的算法、图库及各种基于Web的应用库,受编程初学者及试验者的广泛欢迎。特别是在大数据时代,Python兼顾算法和应用开发,是Spark三大开发语言之一,是大数据采集、处理及数据可视化的最佳开发语言。但是其在数理统计特别是预测算法方面略显不足,以Holt-Winters算法为例,Python seasonal算法包不够成熟,使用复杂,应用需要大量的编程工作。R语言是一种超强的数理统计算法库,历史悠久,拥有比Python更加成熟的算法包,使用方便,参数简洁,自身不具备Web应用开发的诸多功能,但对Java、.net、Python都具有良好的接口。

因此,本文提出通过Python调用R语言,充分利用各自的优点,发挥Python开发应用程序和粘合的功能,弥补其在算法包方面的不足。讨论本地和远程两种调用方法,并开发基于Echarts可视化数据面板的Holt-Winters算法Web应用。

1 Python对R的调用原理

Python对R的调用方法主要通过第三方库进行。如果将两种语言均安装在同一台PC上,需要在设置完环境变量的基础上,通过rpy2库进行调用。如果分别设置服务器,则需要在R语言的基础上安装RServe,在Python上安装PyRserve进行服务的远程调用。两种方法的调用流程如图1所示。

图1 Python调用R流程图

单机版通过rpy2,服务器版通过RServe/PyRserve进行调用。通过Python进行Flask Web、MySQLdb进行数据库、pySaprk进行大数据、ECharts进行数据可视化等扩展开发,调用R语言pylr、forecast提高应用平台预测算法的能力。

2 环境安装

在混编之前,首先需要对两种软件进行安装和测试。如果采用本地模式,则将两种软件安装在同一台PC机上;如果采用服务器模式则将两种软件分别运行安装。

Python:在https://www.continuum.io/downloads,下载Anaconda软件并安装。与安装Python软件相比,该软件不需要配置Python环境变量,同时已完成大量常用库的更新。cmd进入命令行,输入python(如图2所示),如果能够显示Python和Anaconda的版本号,说明安装成功。

图2 Python安装成功

在http://www.jetbrains.com/pycharm/网站,下载Pycharm软件,进行安装。在File—〉Settings—〉Project—〉Project Interpreter中选择安装目录下的Python作为编译器,如:C:UsersgwwAnaconda2python.exe。如果需要添加更多的库,点击右侧加号进行搜索添加。新建.py文件,输入print('hello'),首次运行,环境需要一段时间进行更新,完毕后执行py文件查看打印结果。

R语言:访问官网https://www.r-project.org/,点击download下载最新版本R语言软件。安装完毕后,在系统环境变量Path中添加R语言的include和bin文件夹的位置,如:

C:Program FilesRR-3.3.0include;C:Program FilesRR-3.3.0in

cmd进入命令行,输入R,如果能够显示R语言版本号,说明安装成功。打开R语言环境,输入命令install.packages安装预测软件包,设置dependencies 为TRUE完成依赖包的安装,完整书写如下:

install.packages(″forecast″, dependencies = TRUE)

在R语言环境中输入以下语句进行测试:

skirts<- scan(″http://robjhyndman.com/tsdldata/roberts/

skirts.dat″,skip=5)

skirtsseries <- ts(skirts,start=c(1866))

plot.ts(skirtsseries)

执行效果如图3所示,说明安装成功。

图3 R语言输出结果

3 Python对R的调用方法

在完成了两种软件的安装及测试后,对于采用本地模式,具体调用步骤如下:

步骤1从http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2下载文件rpy2-2.5.6-cp27-none-win_amd64.whl,将其拷贝至新建工程的根目录下,执行pip install命令:pip install rpy2-2.5.6-cp27-none-win_amd64.whl。

步骤2新建用户变量R_HOME,变量值为R语言安装目录,如:C:Program FilesRR-3.3.2。

步骤3新建用户变量R_USER,变量值为rpy2的安装目录,如:C:UsersgwwAnaconda2libsite-packages py2。

步骤4在Pycharm中新建.py文件,引入rpy2库,然后使用ro.r('')执行R语言,通过变量赋值形式获得计算结果,代码如下:

import rpy2.robjects as ro

ro.r(′library(forecast)′)

ro.r(′skirts<- scan(″http://robjhyndman.com/tsdldata/

roberts/

skirts.dat″,skip=5)′) # generate x at R

ro.r(′skirtsseries <- ts(skirts,start=c(1866))′)

ro.r(′skirtsseriesforecasts <- HoltWinters

(skirtsseries, gamma=FALSE)′)

ro.r(′skirtsseriesforecasts2 <- forecast.HoltWinters

(skirtsseriesforecasts, h=19)′)

skirtsseries =ro.r(′skirtsseries′)

print skirtsseries

skirtsseriesforecasts2 =ro.r(′skirtsseriesforecasts2′)

print skirtsseriesforecasts2

远程调用方式,需要在R语言上安装RServe,在Python上安装PyRserve库,具体步骤如下:

步骤1在http://www.rforge.net/Rserve/files/下载Rserve_1.8-0.zip,在R语言中点击程序包->Install package(s) from local files进行本地安装。也可以在使用命令行进行远程安装:

install.packages(′Rserve′,,′http://www.rforge.net/′)

步骤2启动RServe,执行如下命令开启远程访问连接:

> library(Rserve)

> Rserve(args=′--RS-enable-remote′)

输出以下结果,说明启动成功。

Starting Rserve...

″C:ANACON~1LibSITE-P~1 py2RWIN-LI~13.3Rservelibsx64Rserve.exe″ --RS-enable-remote

步骤3在Pycharm环境下,打开File—〉Settings—〉Project—〉Project Interpreter,点击右侧加号,搜索pyRserve,并进行安装。

步骤4在.py文件中编写代码,引入PyRserve,建立conn,进行RServe的远程连接。通过conn.eval和conn.voidEval进行R语言语句的执行。如果想进一步查找更多实用方法及变量互传,访问pyRserve网站http://pythonhosted.org/pyRserve/。使用以下代码进行测试:

import pyRserve

conn = pyRserve.connect(host=′Rserve IP地址′, port=6311)

aa = conn.eval(′13 + 25′)

conn.voidEval(″t <- c(-8.49, 0.99)″)

print(conn.r.t)

print(aa)

conn.close()

使用R语言的HoltWinters方法,执行语句如下:

import pyRserve

conn = pyRserve.connect(host=′ Rserve IP地址′, port=6311)

conn.eval(′library(forecast)′)

conn.eval(′skirts <- scan(″http://robjhyndman.com/

tsdldata/

roberts/skirts.dat″,skip=5)′)

conn.eval(′skirtsseries <- ts(skirts,start=c(1866))′)

conn.eval(′skirtsseriesforecasts <- HoltWinters(

skirtsseries, gamma=FALSE)′)

conn.eval(′skirtsseriesforecasts2 <- forecast.

HoltWinters(skirtsseriesforecasts, h=6)′)

conn.eval(′skirtsseriesforecasts2 <- forecast.

HoltWinters(skirtsseriesforecasts, h=19)′)

conn.voidEval(′func0<-function(){skirtsseriesforecasts2}′)

print(conn.r.func0())

4 程序设置示例

使用ECharts作为测算结果的可视化工具,应用Python Flask作为网站框架,在阿里云平台上申请ECS作为R语言服务器,实现Holt-Winters预测算法的Web应用示例开发。

步骤1布置阿里云ECS R语言服务器。为了R语言运算和使用方便,应用于多用户解决实际问题,在阿里云上申请ECS空间实例,系统选择Windows Server 2012 R2 数据中心版64位中文版(如图4所示),设置白名单,允许远程访问。

图4 阿里云ESC设置

使用mstsc.exe进行远程桌面的连接和登录,安装R语言、更新软件包、完成配置、启动远程访问。如图5所示。

图5 阿里云R语言服务器配置

步骤2配置Flask环境。在本地机器上安装Python,Pycharm,并加载flask、pyRserve等包。新建Flask Web应用,选择Anaconda作为编译器。

步骤3Holt-Winters算法编入。打开Flask项目的.py路由文件,将远程访问步骤4中的语句输入,采用json数据形式进行参数返回,代码框架如下:

from flask import Flask, jsonify

@app.route(′/getResult′)

def getResult():

import pyRserve

conn = pyRserve.connect(host=′ Rserve IP地址′,

port=6311)

conn.voidEval(′func0<-function(){skirtsseriesforecasts2}′)

return jsonify(result= conn.r.func0())

步骤4ECharts可视化显示。使用Boostrap框架设计Web界面样式,嵌入需要使用的ECharts图表,通过步骤3中的getResult()函数获取输出结果,进行Echarts图表的数据更新和显示。核心javascript编码如下:

$.getJSON(′/ getResult ′, function(data){

console.log(″从服务器收到:″+data.result[1]);

option.series[0].data.shift();

option.series[0].data = data.result[1];

myChart.setOption(option);}

基于上述方法,使用月度货运量数据进行程序运行,使用Holt-Winters预测未来6个月的运量,输出界面如图6所示。

图6 ECharts输出面板

5 结 语

Python和R语言都是主流的免费计算科学软件,Python的各种应用开发功能是R语言所不具备的,R语言简洁成熟的算法包可以弥补Python软件在该方面的不足。因此,通过使用Python调用R语言,可以发挥R语言算法在Web应用中的大数据挖掘功能,完善Python解决实际问题的运算功能。通过开发基于ECharts的Flask Web应用,嵌入R语言Holt-Winters算法,证明了该方案的有效性和实际应用的可行性。

[1] 孙强,李建华,李生红.基于Python的文本分类系统开发研究[J].计算机应用与软件,2011,28(3):13-14.

[2] 王国强,张贝克.基于Python的嵌入式脚本研究[J].计算机应用与软件,2010,27(3):107-109.

[3] 王晓宇,陈吉红,黄植红.一种基于Python的红外图像分析软件结构[J].计算机应用与软件,2008,25(11):31-33.

[4] 罗霄,任勇,山秀明.基于Python的混合语言编程及其实现[J].计算机应用与软件,2004,21(12):17-18,112.

[5] Grinberg M.Flask Web开发:基于Python的Web应用开发实战[M].安道,译.北京:人民邮电出版社,2015:7-18.

[6] 张若愚.Python科学计算[M].北京:清华大学出版社,2012:1.

[7] http://pythonhosted.org/pyRserve/.

[8] https://cran.r-project.org/web/packages/forecast/.

[9] http://echarts.baidu.com/.

猜你喜欢
调用新建可视化
基于CiteSpace的足三里穴研究可视化分析
自然资源可视化决策系统
思维可视化
自然资源可视化决策系统
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
万紫蝶、梁新建作品
曹曙东、温新建作品
2016年10月70个大中城市新建住宅价格指数
2016年6月70个大中城市新建住宅价格指数