国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Python與R語言混合編程方法的研究和應用

2018-02-27 03:06宮薇薇齊向春裴世廉
計算機應用與軟件 2018年1期
關鍵詞:調用新建可視化

宮薇薇 齊向春 裴世廉

1(中國鐵道科學研究院運輸及經(jīng)濟研究所 北京 100081) 2(沈陽鐵路局信息技術所 遼寧 沈陽 110002)

0 引 言

Python由Guido van Rossum于20世紀90年代編寫,是一種面向對象的解釋型語言,功能強大、簡單易學、完全免費。擁有大量的算法、圖庫及各種基于Web的應用庫,受編程初學者及試驗者的廣泛歡迎。特別是在大數(shù)據(jù)時代,Python兼顧算法和應用開發(fā),是Spark三大開發(fā)語言之一,是大數(shù)據(jù)采集、處理及數(shù)據(jù)可視化的最佳開發(fā)語言。但是其在數(shù)理統(tǒng)計特別是預測算法方面略顯不足,以Holt-Winters算法為例,Python seasonal算法包不夠成熟,使用復雜,應用需要大量的編程工作。R語言是一種超強的數(shù)理統(tǒng)計算法庫,歷史悠久,擁有比Python更加成熟的算法包,使用方便,參數(shù)簡潔,自身不具備Web應用開發(fā)的諸多功能,但對Java、.net、Python都具有良好的接口。

因此,本文提出通過Python調用R語言,充分利用各自的優(yōu)點,發(fā)揮Python開發(fā)應用程序和粘合的功能,彌補其在算法包方面的不足。討論本地和遠程兩種調用方法,并開發(fā)基于Echarts可視化數(shù)據(jù)面板的Holt-Winters算法Web應用。

1 Python對R的調用原理

Python對R的調用方法主要通過第三方庫進行。如果將兩種語言均安裝在同一臺PC上,需要在設置完環(huán)境變量的基礎上,通過rpy2庫進行調用。如果分別設置服務器,則需要在R語言的基礎上安裝RServe,在Python上安裝PyRserve進行服務的遠程調用。兩種方法的調用流程如圖1所示。

圖1 Python調用R流程圖

單機版通過rpy2,服務器版通過RServe/PyRserve進行調用。通過Python進行Flask Web、MySQLdb進行數(shù)據(jù)庫、pySaprk進行大數(shù)據(jù)、ECharts進行數(shù)據(jù)可視化等擴展開發(fā),調用R語言pylr、forecast提高應用平臺預測算法的能力。

2 環(huán)境安裝

在混編之前,首先需要對兩種軟件進行安裝和測試。如果采用本地模式,則將兩種軟件安裝在同一臺PC機上;如果采用服務器模式則將兩種軟件分別運行安裝。

Python:在https://www.continuum.io/downloads,下載Anaconda軟件并安裝。與安裝Python軟件相比,該軟件不需要配置Python環(huán)境變量,同時已完成大量常用庫的更新。cmd進入命令行,輸入python(如圖2所示),如果能夠顯示Python和Anaconda的版本號,說明安裝成功。

圖2 Python安裝成功

在http://www.jetbrains.com/pycharm/網(wǎng)站,下載Pycharm軟件,進行安裝。在File—〉Settings—〉Project—〉Project Interpreter中選擇安裝目錄下的Python作為編譯器,如:C:UsersgwwAnaconda2python.exe。如果需要添加更多的庫,點擊右側加號進行搜索添加。新建.py文件,輸入print('hello'),首次運行,環(huán)境需要一段時間進行更新,完畢后執(zhí)行py文件查看打印結果。

R語言:訪問官網(wǎng)https://www.r-project.org/,點擊download下載最新版本R語言軟件。安裝完畢后,在系統(tǒng)環(huán)境變量Path中添加R語言的include和bin文件夾的位置,如:

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

cmd進入命令行,輸入R,如果能夠顯示R語言版本號,說明安裝成功。打開R語言環(huán)境,輸入命令install.packages安裝預測軟件包,設置dependencies 為TRUE完成依賴包的安裝,完整書寫如下:

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

在R語言環(huán)境中輸入以下語句進行測試:

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

skirts.dat″,skip=5)

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

plot.ts(skirtsseries)

執(zhí)行效果如圖3所示,說明安裝成功。

圖3 R語言輸出結果

3 Python對R的調用方法

在完成了兩種軟件的安裝及測試后,對于采用本地模式,具體調用步驟如下:

步驟1從http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2下載文件rpy2-2.5.6-cp27-none-win_amd64.whl,將其拷貝至新建工程的根目錄下,執(zhí)行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('')執(zhí)行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,執(zhí)行如下命令開啟遠程訪問連接:

> library(Rserve)

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

輸出以下結果,說明啟動成功。

Starting Rserve...

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

步驟3在Pycharm環(huán)境下,打開File—〉Settings—〉Project—〉Project Interpreter,點擊右側加號,搜索pyRserve,并進行安裝。

步驟4在.py文件中編寫代碼,引入PyRserve,建立conn,進行RServe的遠程連接。通過conn.eval和conn.voidEval進行R語言語句的執(zhí)行。如果想進一步查找更多實用方法及變量互傳,訪問pyRserve網(wǎng)站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方法,執(zhí)行語句如下:

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作為網(wǎng)站框架,在阿里云平臺上申請ECS作為R語言服務器,實現(xiàn)Holt-Winters預測算法的Web應用示例開發(fā)。

步驟1布置阿里云ECS R語言服務器。為了R語言運算和使用方便,應用于多用戶解決實際問題,在阿里云上申請ECS空間實例,系統(tǒng)選擇Windows Server 2012 R2 數(shù)據(jù)中心版64位中文版(如圖4所示),設置白名單,允許遠程訪問。

圖4 阿里云ESC設置

使用mstsc.exe進行遠程桌面的連接和登錄,安裝R語言、更新軟件包、完成配置、啟動遠程訪問。如圖5所示。

圖5 阿里云R語言服務器配置

步驟2配置Flask環(huán)境。在本地機器上安裝Python,Pycharm,并加載flask、pyRserve等包。新建Flask Web應用,選擇Anaconda作為編譯器。

步驟3Holt-Winters算法編入。打開Flask項目的.py路由文件,將遠程訪問步驟4中的語句輸入,采用json數(shù)據(jù)形式進行參數(shù)返回,代碼框架如下:

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()函數(shù)獲取輸出結果,進行Echarts圖表的數(shù)據(jù)更新和顯示。核心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);}

基于上述方法,使用月度貨運量數(shù)據(jù)進行程序運行,使用Holt-Winters預測未來6個月的運量,輸出界面如圖6所示。

圖6 ECharts輸出面板

5 結 語

Python和R語言都是主流的免費計算科學軟件,Python的各種應用開發(fā)功能是R語言所不具備的,R語言簡潔成熟的算法包可以彌補Python軟件在該方面的不足。因此,通過使用Python調用R語言,可以發(fā)揮R語言算法在Web應用中的大數(shù)據(jù)挖掘功能,完善Python解決實際問題的運算功能。通過開發(fā)基于ECharts的Flask Web應用,嵌入R語言Holt-Winters算法,證明了該方案的有效性和實際應用的可行性。

[1] 孫強,李建華,李生紅.基于Python的文本分類系統(tǒng)開發(fā)研究[J].計算機應用與軟件,2011,28(3):13-14.

[2] 王國強,張貝克.基于Python的嵌入式腳本研究[J].計算機應用與軟件,2010,27(3):107-109.

[3] 王曉宇,陳吉紅,黃植紅.一種基于Python的紅外圖像分析軟件結構[J].計算機應用與軟件,2008,25(11):31-33.

[4] 羅霄,任勇,山秀明.基于Python的混合語言編程及其實現(xiàn)[J].計算機應用與軟件,2004,21(12):17-18,112.

[5] Grinberg M.Flask Web開發(fā):基于Python的Web應用開發(fā)實戰(zhàn)[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的足三里穴研究可視化分析
自然資源可視化決策系統(tǒng)
思維可視化
自然資源可視化決策系統(tǒng)
核電項目物項調用管理的應用研究
系統(tǒng)虛擬化環(huán)境下客戶機系統(tǒng)調用信息捕獲與分析①
萬紫蝶、梁新建作品
曹曙東、溫新建作品
2016年10月70個大中城市新建住宅價格指數(shù)
2016年6月70個大中城市新建住宅價格指數(shù)