:::

學習R的感想 / About Learning R

image

這篇閒聊這幾天我對R的研究過程,一篇初學者的感想而已。


開始文本探勘吧 / Let’s Text Mining

這一篇開始的緣由很簡單,我只是要做文本探勘,計算詞頻而已。我之前也沒摸過R,搞不懂R的listdata frame有什麼差異,只是看網路上文件這麼多,好像路邊隨便一個路人寫過R,我想這應該不是很難吧?

 

踏進來之後,我才發現門檻還真不是普通的高。我幾乎把整個週末都花在這上面了。

 

這次文本探勘的困難分成兩個階段。第一個階段是R環境的建設,像是處理Windows中用R輸出中文會變成亂碼、在Ubuntu上安裝RStudio Server的障礙、Ubuntu上的UTF-8設定安裝在Ubuntu上的舊版R無法安裝套件、安裝rJava跟資料庫套件時還有系統相依問題等種種障礙。

然後下一個問題是文本探勘的處理。雖然用R進行中文 text Mining[R] TEXT MINING(文字探勘、文本分析練習)都有分享文本探勘的R Script,但是它們都是從檔案系統中使用DirSource()取得資料,而我想要的是從PostgreSQL取得資料,這兩種方式取得的資料類型竟然有蠻大的差異。從資料庫取得的資料是Data Frame,但是DirSource()取得的是向量的樣子,而文本探勘要用的Corpus要的好像也是向量形態……唉,我到現在還是搞不太懂這之間的差異。經過比對分析各種R Script,雖然還是不能參透原因,但還是姑且找到怎樣接合不同資料形態的做法。最後的成果就是整合PostgreSQL的這篇了。

版本問題 / Problems of Different Version

弄著弄著,我就順手把R升級到最新版本,但沒想到隨之而來的就是文本探勘腳本不能使用的問題。也許會有強者覺得說,我們是時候該拋下原本老舊的R Script,改用新版R的寫法啦。但就我這樣一個R的初學者來說,這好像不是一個合理的道路。儘管如此,我還是有試著找找看怎麼解決新版本下文本探勘問題的解決方法,但並沒有發現有用的方案。

因為版本的問題,加上之前配置R環境竟然如此的複雜,這就讓我決定動手來做之前就想要做的R Remote API。這個想法又是另外一個架構,而且真正來做的時候才發現,原來在RStudio Server中執行好好的腳本,在PHP中用exec()呼叫RScript工具執行腳本時竟然是完全不同的事情。

因為PHP預設的使用者是www-data,而非我一般在RStudio中用的rstudio帳號,所以R腳本一開是用www-data帳號來執行。有人可能會問,換個帳號執行R有啥問題嗎?反正R環境都配置好了?但事實上,RStudio將套件下載在使用者各自的家目錄底下,所以www-data不能用rstudio所安裝的套件。

好吧,那我把Apache的使用帳號從www-data換成rstudio總行了吧。結果沒想到Rscript這個工具只能用系統整體的環境配置,因此原本用rstudio安裝的中文字型、語系設定,透過Rscript工具執行的話就全部都不一樣!這逼的我得再去研究怎麼修改字型跟語系的全域配置,又花了不少時間調整RStudio Server。

弄到最後,總算有一個可以運作的R Remote API架構出現。雖然這個架構讓我不算滿意,但我花在研究R的時間已經超越了預期,應該適可而止了。

關於Blog / About Blog

其實這篇的內容也是我在寫之前每一篇R的時候逐步想要閒聊的內容,但是每一篇寫到最後都覺得太長了,不應該在後面加上這些閒聊。弄到最後就變成像是這篇一樣的獨立閒聊文。這幾天雖然寫了很多關於R的文章,不過我的思維還是在寫程式的模式,腦袋想得都是怎樣趕快解決遇到的問題,Blog的內文只是做到階段性的記錄,所以寫出這些文字會讓人感覺非常奇怪,邏輯跟語句都不慎流暢。這點就請大家多多見諒了,寫程式腦袋真的很不適合拿來寫文件。不過我的目的也只是做一個記錄,就跟以往一樣,僅供看得懂的讀者來看,這樣就足夠了。

現在時間是半夜2點半,明天早上還要上課,那就聊到這邊吧。