VMware CEO Pat Gelsinger曾說:
數(shù)據(jù)科學(xué)是未來,大數(shù)據(jù)分析則是打開未來之門的鑰匙
企業(yè)正在迅速用新技術(shù)武裝自己以便從大數(shù)據(jù)項(xiàng)目中獲益。各行業(yè)對大數(shù)據(jù)分析人才的需求也迫使我們升級自己的技能以便尋找更好的職業(yè)發(fā)展。
跳槽之前最好先搞清楚一個崗位會接觸到的項(xiàng)目類型,這樣你才能掌握所有需要的技能,工作的效率也會更高。
下面我們盡量列出了一些流行的開源大數(shù)據(jù)項(xiàng)目。根據(jù)它們各自的授權(quán)協(xié)議,你或許可以在個人或者商業(yè)項(xiàng)目中使用這些項(xiàng)目的源代碼。寫作本文的目的也就是為大家介紹一些解決大數(shù)據(jù)相關(guān)問題可能會用到的工具。
1.Apache Mahout
我 們可以使用Apache Mahout來快速創(chuàng)建高效擴(kuò)展性又好的機(jī)器學(xué)習(xí)應(yīng)用。Mahout結(jié)合了諸如H2O算法、Scala、Spark和Hadoop MapReduce等模塊,為開發(fā)人員提供了一個構(gòu)建可擴(kuò)展算法的環(huán)境?,F(xiàn)在最新的版本是去年11月6日發(fā)布的0.11.1版本。
Apache Mahout支持一個叫做Samsara的數(shù)學(xué)環(huán)境,用戶可以在Samsara中使用它提供的常見算法來開發(fā)自己的數(shù)學(xué)解決方案。Samsara對于線性 代數(shù)、數(shù)據(jù)結(jié)構(gòu)和統(tǒng)計(jì)操作都有著很好的支持,而且可以通過Scala的Mahout擴(kuò)展或Mahout庫來進(jìn)行定制。Samara對很多常見算法都進(jìn)行了 重寫因此速度上有一定的提升。這里我們能列出的一些算法包括:樸素貝葉斯分類器、矩陣分解、協(xié)同過濾以及神經(jīng)網(wǎng)絡(luò)。新加入的相似性分析還可以通過分析用戶 的點(diǎn)擊來實(shí)現(xiàn)共現(xiàn)推薦算法。
Apache Mahout GitHub地址:https://github.com/apache/mahout
2.Apache Spark
Apache Spark是一個為實(shí)時大數(shù)據(jù)分析所設(shè)計(jì)的開源數(shù)據(jù)處理引擎。目前Spark的大用戶有雅虎、騰訊和百度,使用Spark處理的數(shù)據(jù)在PB級別,集群節(jié)點(diǎn) 數(shù)目也超過8000。Apache Spark是GitHub上最大的數(shù)據(jù)處理項(xiàng)目之一,有超過750名開發(fā)人員都曾對項(xiàng)目做出過貢獻(xiàn)。
與Hadoop MapReduce相比Apache Spark在內(nèi)存中的運(yùn)行速度快100倍,在硬盤中運(yùn)行速度的差距也在10倍以上。Spark能夠達(dá)到這樣的速度靠的是DAG引擎和內(nèi)存內(nèi)計(jì)算性能的提 升。開發(fā)語言可以使用Java、Python、Scala和R,此外Spark還提供了差不多100種集合操作符以便開發(fā)人員構(gòu)建并行應(yīng)用。
圖:Spark生態(tài)系統(tǒng)
Apache Spark為機(jī)器學(xué)習(xí)、Spark Streaming和GraphX提供了眾多強(qiáng)大的庫,其中也包括為DataFrame和SQL所設(shè)計(jì)的庫。開發(fā)人員可以用這些標(biāo)準(zhǔn)庫來提升應(yīng)用的性能和 開發(fā)效率。Spark可以運(yùn)行于很多環(huán)境中,如獨(dú)立的集群、Hadoop YARN、EC2和Apache Mesos。Apache Spark也能從Hive、HBase、Tachyon、Cassandra和HDFS等數(shù)據(jù)源讀取數(shù)據(jù)。
Apache Spark GitHub地址:https://github.com/apache/spark
3.Apache Storm
Apache Storm的設(shè)計(jì)針對的是流式數(shù)據(jù),不過對于大數(shù)據(jù)的實(shí)時分析它也是很可靠的計(jì)算系統(tǒng)。它同樣是一個開源項(xiàng)目而且開發(fā)人員可以使用所有的主流高級語言。 Apache Storm主要用于以下應(yīng)用:在線機(jī)器學(xué)習(xí)、連續(xù)計(jì)算、實(shí)時分析、ETL、分布式RPC。Apache Storm有配置方便、可用性高、容錯性好及擴(kuò)展性好等諸多優(yōu)點(diǎn),處理速度也極快,每個節(jié)點(diǎn)每秒可以處理數(shù)百萬個tuple。
目前最新的Apache Storm是去年11月5日發(fā)布的0.9.6版。
Storm 集群中有三種節(jié)點(diǎn):Nimbus、Zookeeper和Supervisor。Nimbus與Hadoop的JobTracker類似,主要用于運(yùn)算的上 傳、代碼的分發(fā)和計(jì)算的監(jiān)測。Zookeeper節(jié)點(diǎn)的作用是Storm集群的協(xié)調(diào),Supervisor節(jié)點(diǎn)則是實(shí)現(xiàn)對worker的控制。
Apache Storm GitHub地址https://github.com/apache/storm/
4.NTLK(自然語言處理工具箱)
NTLK是用于開發(fā)Python自然語言相關(guān)應(yīng)用的一個工具包。它自帶用于斷句、分類、標(biāo)記、詞干提取、語義推理和語法分析的庫,此外還有一個較為活躍的社區(qū)。對于語言學(xué)的實(shí)證研究、人工智能、認(rèn)知科學(xué)、機(jī)器學(xué)習(xí)和信息提取來說都是強(qiáng)大的工具,當(dāng)然你得用Python。
自動補(bǔ)全是NTLK可能的用處之一。輸入部分文字,借助NTLK可以推測可能的完整句子,現(xiàn)在很多搜索引擎都有這個功能。其他可能的應(yīng)用還包括文本歸類、地址分析和智能語音命令等。
NTLK GitHub地址:https://github.com/nltk/nltk
5.mLoss
mLoss是機(jī)器學(xué)習(xí)開源軟件的英文縮寫,它將很多開源軟件集合到了同一個平臺。mLoss所收集的開源項(xiàng)目都經(jīng)過審閱并附有對項(xiàng)目的簡短介紹。mLoss本身并不是一個軟件而是一個支持機(jī)器學(xué)習(xí)應(yīng)用開源的網(wǎng)站。
mLoss網(wǎng)站上列出的開源軟件有各自項(xiàng)目不同的48種授權(quán)協(xié)議,作者數(shù)量高達(dá)1100人。mLoss是到目前為止最大的機(jī)器學(xué)習(xí)軟件庫,共支持107種數(shù)據(jù)類型,所涉及的操作系統(tǒng)有26個,使用的編程語言也有51種。
mLoss網(wǎng)站上列出的軟件中較為流行的有:
dlib ml:機(jī)器學(xué)習(xí)算法的C++庫R-Cran-Caret:分類和回歸訓(xùn)練庫Shogun:為SVM所設(shè)計(jì)的機(jī)器學(xué)習(xí)工具箱,適用于Python、Matlab、Octave和RArmadillo:一個線性代數(shù)C++庫MLPY:以NumPy和SciPY為基礎(chǔ)構(gòu)建的Python機(jī)器學(xué)習(xí)庫MyMediaLite:一個推薦器算法庫mLoss網(wǎng)站:http://mloss.org/6.Julia
Julia是為技術(shù)計(jì)算所設(shè)計(jì)的一門動態(tài)高級語言。雖然它的語法和其他技術(shù)計(jì)算環(huán)境的語法差不多,但Julia現(xiàn)在的使用范圍還比較窄。Julia支持分布式并行計(jì)算還有著完備的高精度數(shù)學(xué)函數(shù)庫。
JuliaStats是一個機(jī)器學(xué)習(xí)和統(tǒng)計(jì)工具的合集,目的是幫助Julia用戶創(chuàng)建可擴(kuò)展且高效的應(yīng)用。下面列出了JuliaStats中包括的一些程序:
StatsBase:從名字我們就能看出StatsBase提供的是統(tǒng)計(jì)學(xué)相關(guān)的基本功能,比如描述統(tǒng)計(jì)、統(tǒng)計(jì)動差、樣本函數(shù)、計(jì)數(shù)、排序、互相關(guān)、自相關(guān)以及加權(quán)統(tǒng)計(jì)等。DataArrays: 一個允許數(shù)據(jù)為空的數(shù)組類型,對重復(fù)數(shù)據(jù)的計(jì)算進(jìn)行了優(yōu)化。DataFrames: 表數(shù)據(jù)類型,提供包括索引、合并以及公式等操作。Distribution:用于計(jì)算分布的庫,功能包括一元分布、多元分布、概率密度函數(shù)、累積分布函數(shù)以及最大似然估計(jì)。Multivariate Stats:為多元統(tǒng)計(jì)分析所設(shè)計(jì),功能包括降維、線性回歸、線性判別分析以及多維標(biāo)度。MLBase:包括數(shù)據(jù)預(yù)處理、模型選擇以及交叉驗(yàn)證等機(jī)器學(xué)習(xí)算法。Clustering:包括聚類分析所用到的算法如k-means、k-medoids以及多種評估方法。這里我們只列出了一部分?jǐn)?shù)據(jù)分析和機(jī)器學(xué)習(xí)相關(guān)的庫,其他庫包括假設(shè)檢驗(yàn)、核密度估計(jì)、非負(fù)矩陣分解NMF、廣義線性模型GLM、馬爾科夫鏈蒙特卡洛方法MCMC以及時序分析等。所有庫的源碼都可以在GitHub上找到。
Julia GitHub地址:https://github.com/JuliaStats
7.Scikit-Learn
Scikit-Learn是為機(jī)器學(xué)習(xí)所設(shè)計(jì)的開源Python庫。它基于SciPy、NumPy和Matplotlib開發(fā),稱得上是一款數(shù)據(jù)分析和數(shù)據(jù)挖掘的利器。Scikit-Learn的授權(quán)協(xié)議允許個人和商業(yè)用戶使用。
Scikit-Learn主要用于:
聚類:識別數(shù)據(jù)中的不同類別。算法包括最鄰近搜索、支持向量機(jī)和隨機(jī)森林,可以用于圖像識別和垃圾郵件識別等應(yīng)用?;貧w:用于連續(xù)變量的預(yù)測。算法包括嶺回歸、支持向量回歸、套索回歸等。應(yīng)用包括股票價格、天氣以及電力負(fù)載的預(yù)測。降維:用于減少隨機(jī)變量的個數(shù)。算法包括主成分分析、特征選擇、喬里斯基分解和矩陣分解。數(shù)據(jù)處理:特征提取與數(shù)據(jù)預(yù)處理功能可以將原始數(shù)據(jù)轉(zhuǎn)換成有利于機(jī)器學(xué)習(xí)應(yīng)用處理的格式。Scikit-Learn GitHub地址:https://github.com/scikit-learn/scikit-learn
本文中我們列出的這些GitHub項(xiàng)目應(yīng)用頗為流行,而且這些工具和軟件已經(jīng)被用于解決實(shí)際中的大數(shù)據(jù)問題,希望本文能夠?qū)Υ蠹业拇髷?shù)據(jù)分析之路有所啟發(fā)。