R

r-vs-python

從套件的發展談 R 與 Python

By | Data Science | No Comments

昨天到淡江大學參加大數據分析與 R 論壇,與談的過程中陳景祥老師提出了資料分析工具比較的討論議題。本來是想強調智庫驅動徵才要找怎樣的人,一不小心被引導到 R 與 Python 的比較 (後來想來,根本是陳老師在挖坑…)。網路上其實已經很多人討論過這個題目,譬如這篇《數據科學界華山論劍:R與Python巔峰對決》,整理得非常完整,根本就意圖 closed 這系列的討論。

這邊想補充一個會議上沒來得及說清楚的觀點。從資料分析的功能面上,即便 R 跟 Python 如果做一個比較表,也會發現兩邊不分上下,比不出一個所以然。筆者簡單將資料分析的方法分成四大類:Regression, Classification, Clustering and Dimensionality reduction,在下表中列出幾個代表性的演算法,接著再指出 R 與 Python 的對應資料分析套件。

看完這張表格就會理解 R 與 Python,這兩種語言在資料分析工具發展的思維上是有決定性差異的,筆者認為這個差異將決定使用者解決真實問題的方式。對於 R語言來說,各種演算法散落在各種套件當中,所以 R user 在做資料分析的時候,必須要先思考它所面對的問題需要載入怎樣的套件才能解決,如果這個套件提供的演算法仍不夠完善,R user 會先嘗試對該演算法做校正,而不是去思考要不要換其他套件庫。至於 Python user 在做資料分析時,當他載入 scikit-learn 之後,他有超級豐富的武器庫可以去嘗試,當某個演算法效果不如預期時,Python user 會傾向先換別的演算法再試一次看看。

R_Python_packages

從套件功能比較 R 與 Python

再次強調,在演算法的功能面以及模型優化上 R 與 Python 其實都可以做。就筆者自身經驗 R users 在討論資料分析遇到瓶頸的時候會先討論 outlier, overfitting, regularization。而 Python users 在討論的時候會先盤點用過哪些演算法,哪些演算法可以解決某某問題。筆者認為這是這兩種工具發展目的所造成的差異, R 語言是隨著學術研究而發展、Python 則是基於優化資料分析的應用環境。

從企業招募的觀點來說,主管應該要思考的是做資料分析的目的為何,需要招募怎樣特質的資料分析師。詢問筆者該學習 R 或 Python 的學生,則建議思考一下你的個人特質適合,想要橫向或縱向的分配你的技能點。

特色圖片取自:ActiveState

Big data 的三種資料分析類型

By | Big data | No Comments

Big data已經熱一陣子了,市面上許多企業紛紛提出各種Big data solutions,究竟這些solutions到底是在解決什麼樣的問題?筆者將近期對於 Big data的觀察心得做一點整理,分享給大家。就資料分析的觀點,筆者認為現今 Big data 面對的問題可以分成三種類型:

 

Type A. Big data 問題跟 Small data 是一樣的

無論資料量級的大小,資料分析重視如何展現資料的特徵。展示特徵的方法首要是對資料進行適當的疏理 (subsetting / summarise),整理出能夠進行資料建模 (modeling) 資料表、具代表意義的指標,或是資料視覺化圖表。儘管資料的問題本質一樣,但是在Big data上,需要分散式資料庫 (distributed database) 上的資料處理工具諸如Hive, impala, teradata …等才能實現。如果想要在R語言的環境下,執行量級較大 (GB層級) 的資料疏理 (Data ETL),可以參考dplyr, data.table, sparkR等套件。

Type B.  Big data 問題等同一大群 Small data 的問題

對於Big data進行分析的資料模型,可以由若干Small data models所組成的元件來表示。在這種情況下,分散式運算 (distributed computing) 是為必要技術。如果想要在R語言的環境下執行平行運算,可以參考pbdMPI, snow, foreach, Rth等套件。

Type C. Big data 問題需要靠特製系統解決

當資料分析模型無法透過分散式運算有效解決計算效率問題,需要經常性/即時性分析整包Big data的問題屬於此類。這需要根據整體資料分析的流程特製化設計解決方案,譬如說推薦系統。如果想在R環境下嘗試輕量資料可以運行的推薦系統演算法,可以參考recommenderlab套件。

這三種資料分析類型,其要求的 Big data 理論、技術、工具不盡相同。如果您是正在尋求所謂Big data solution的企業,筆者建議先檢驗您的資料量級是不是 Big data,接著再思考您面對的資料分析問題是哪一種類型,進而尋求解決方案。

日前一篇對知名資料科學家工具開發專家Hadley Wickham採訪報導中,提到一個有趣的數字,90%的Big data問題屬於Type A,9%的問題屬於Type B,其餘的部分則屬於Type C。姑且不論這數字的精確性,從Data life cycle的觀點,抑或從企業的資料成熟度來看,不妨依循 A -> B -> C 的流程,一步一步尋求解決方案囉。

服貿事件 X 資料科學

By | Data Science | 12 Comments

近期服貿議題越演越烈,自318學生佔領國會,324 學生攻佔行政院與強制驅離事件發生後。我以為身為一個統計人,應該用自己的專長來關心這個議題。有鑑於此,我問自己一個問題:抗議現場的情況與各家媒體報導的真實性為何

事實上,討論真實性這種虛無飄渺的概念並不容易,所以我退而求其次考慮比較能夠量化的問題,即報導之間的關聯性

有了這個想法之後,我蒐集了g0v.today提供的現場文字轉播資料,學生族群常用的PTT服貿版資料,以及幾家新聞的報導資料進行初步分析,3/25號晚上在臉書上發布了以下這張實驗性分析圖,並且徵求夥伴幫忙擷取各家媒體更完整的服貿報導資料。

 

這兩天,感謝很多人熱心的幫忙。無論是資料的提供、文本挖掘技術的交流還是媒體分析經驗的分享等等 (感謝Ronny, Marsan, 文心, Toley and 家齊)。我用更嚴謹的方法得到了以下關聯性分析結果,

服貿事件報導關係圖
先說圖怎麼看,曲線的粗細表示報導來源之間的相關性強度。再說我的主要發現:

  1. 蘋果日報與所有報導來源都有高度的關聯性
  2. 報導來源可以分成左右兩群,右半邊是一般的媒體報導,左半邊則是蘋果日報與民間報導。
  3. 儘管PTT與現場文字轉播的關聯性在所有報導來源中是最高的。但是,PTT與各大新聞媒體的關聯性都偏低。

至於分析方法,簡單來說就是以關鍵字找相似度。我用R當作主要分析工具,參考家齊與嘉葳參與Taiwan R user groupMLDM Monday meetup關於文本挖掘的演講 (1 & 2) 進行文本分析,分析出各家媒體報導的關鍵字詞頻,再利用我做生物統計最熟悉的相似度指標來計算各家報導的關聯性。

最後,我是打算用作研究的態度來玩這個題目。所以必須談談現在遇到的困難之處,希望有人能給點意見。最主要的困難點在於:「現場文字播報忠實的呈現現場結果,但相較一般新聞報導而言,有口語化過度的問題」。口語化的問題必然與媒體使用的文字有所不同,這個效應與媒體選擇性報導的差異混淆在一起。解決的辦法目前想嘗試:

  1. 確實移除口語化關鍵字之後,再計算相似度 (部分完成)
  2. 加入民間媒體進行分析,ex: 台大新聞E論壇 (周末動工)

對於上述分析有問題,或是我的後續研究有所建議者,不吝指教,謝謝。