Re: [討論] R語言與其他語言

作者: Wush978 (拒看低質媒體)   2016-04-22 13:58:17
※ 引述《clansoda (小笨)》之銘言:
: 標題: [討論] R語言與其他語言
: 時間: Tue Apr 19 12:31:03 2016
:
: 不知道這樣的討論能不能PO在板上,若不行請告知我立刻刪除
:
: 剛學資料分析的時候是用SAS,但是考量到SAS只有大公司的授權版本
:
: 我認為說可能很多公司用不了,因此尋找替代方案
:
: 這時候R出現在我面前,既開源又有許多的PACKAGE來使用很符合需求
:
: 因此開始使用R語言來做分析,就我來說R是一個把資料丟進去跑分析
:
: 然後可將結果視覺化的工具軟體,確實相當優秀,可是得出結論
:
: 但是如果要應用的話感覺有些不足,像是我先前一段時間再研究arules package
:
: 所使用的association rule 和collaborative filtering 這樣的推薦系統
:
: 確實可以跑出結果,例如A可能會像B一樣想買C產品,這樣的一條結果
:
: 但是結果怎麼實用呢,感覺還需要其他輔助才能做出真的像是amazon或pchome那樣
:
: 使用者真的能立刻被推薦的系統,我查了一下發現apache的開源專案mahout跟hadoop
:
: 我之前有上過hadoop的課程,不過聽不太懂,而mahout是一個可以應用推薦系統的開源
:
: 專案,網路上是說用java去寫,因此我是不是就去學java呢?
:
: 也想知道板友除了R之外是不是都有另外的語言專長像是C或JAVA這樣的語言
:
: 也深深感到自己的不足,有板友可以推薦其他可以和R或者實務連結的語言嗎?
:
實務上,你可以透過作業系統來串連不同的工具
透過Rscript 執行檔,R 可以包成命令列應用程序,讓所有能呼叫system call的
語言使用,例如:C, java, python, php, nodejs, ... 族繁不及備載
hadoop streaming也是用類似的概念來串接其他的工具,讓你可以用Hadoop cluster
來跑R, python, ...
如果你相關經驗不足(例如這篇文章中用的名詞沒辦法全部看懂),我強烈建議你先
去學這個解決方案,會省很多時間。
如果要更直接的連結,一種方式是把R 或其他工具整合到相同的Process中,只要掌握
得當,這種方法可以有更好的效能。但是掌握不得當,就是拿石頭砸自己的腳。
基本上,R 可以跟任何C based的工具有深入的連結,例如:C, C++, python,
php,以python為例,可以看看我投Rcpp Gallery的:
http://gallery.rcpp.org/articles/rcpp-python/
如果是要嵌入R 的話,有RInside專案。
現成解決方案的話,要看工具。Python的話,有rPython套件,nodejs的話有V8
(但是少很多東西,所以我不推薦)
我是覺得,如果你只是自己用,可以玩一玩。如果要做成服務,最好搞懂我上面那篇文章
中的技術,因為穩定性是系統最重要的事情之一,用rPython這種套件,你很難確認它有沒
有埋地雷到你的系統裡面。
R 和Java的話,有rJava套件,但是我的經驗是除了Linux based的系統外,可能光Hello
World 就要搞很多系統設定,這是因為R 是C 寫的,所以和C 寫的其他工具整合比較容
易,而Java就要透過jni... 我不會說做不到,但是脆弱更多。rJava 幫你搞定很多問題
但是也可能導入其他地雷。
ps. 脆弱的意思是,容易出錯的地方更多,所以用起來更不穩定,新手要嘗試也更容易失

Scala, Spark 也都是走rJava,所以如果你真的想玩的話,去弄Linux 作業系統來試吧,
會省下你很多的時間的。Mac 上的rJava我自己都搞不定,Windows的話有一些額外的設定
動作要跑。Ubuntu的話,只要照著說明跑一兩行程式碼就可以開始玩你的目標了。
以上是方向,以下是我個人經驗
我有寫一個小專案來透過python做資料前處理後匯入R 。跑了一兩年都沒問題,因為我
100%掌握了裡面所有關鍵。(我知道不會有記憶體洩漏,因為我自己看到記憶體怎麼管)
但是最終,我還是把程式拆解成python先處理,寫入硬碟,R再讀出來的架構,因為...
用python,我才能找工程師來幫忙。
我在R中進行模型學習後,最後把模型寫到database。在nodejs中,再連到database中
讀取模型,並且在nodejs中實作演算法。雖然這樣簡單,但是後續維護會有兩倍成本:
R 在模型學習中產生feature的動作,要100%和nodejs中產生feature的動作一致。
這會讓後續的維護成本變成兩倍以上(除了要改兩套之外,還要確保一致性)
現在我正在嘗試用nodejs直接把所有產生feature的動作做完後才交給R,以降低未來的
維護困難度。
以上是我個人整合系統的經驗,給你參考
:
作者: memphis (讓你喜歡這世界~)   2016-04-22 15:57:00
wow 好有誠意的一篇
作者: bowin (盡其在我)   2016-04-22 18:52:00
推 Wush 這篇!
作者: HeroNoah   2016-04-22 20:08:00
受用, 推!
作者: cywhale (cywhale)   2016-04-22 21:15:00
great to learn.. thanks sharing~
作者: ehome (BelieveRedSox)   2016-04-23 21:39:00
大推~超詳盡分析
作者: JackBaska (Baska)   2016-04-23 21:58:00
語言的可能性果然是由使用者功力決定
作者: Neisseria (Neisseria)   2016-04-23 21:58:00
推這篇文章

Links booklink

Contact Us: admin [ a t ] ucptt.com