為什么說Python 是大數(shù)據(jù)全棧式開發(fā)語言
極客頭條 | 2017-07-11 15:54
【數(shù)據(jù)猿導(dǎo)讀】 云平臺分為私有云和公有云。私有云平臺如日中天的OpenStack,就是Python寫的。曾經(jīng)的追趕者CloudStack,在剛推出時大肆強(qiáng)調(diào)自己是Java寫的,比Python有優(yōu)勢。

前段時間,ThoughtWorks在深圳舉辦一次社區(qū)活動上,有一個演講主題叫做“Fullstack JavaScript”,是關(guān)于用JavaScript進(jìn)行前端、服務(wù)器端,甚至數(shù)據(jù)庫(MongoDB)開發(fā),一個Web應(yīng)用開發(fā)人員,只需要學(xué)會一門語言,就可以實現(xiàn)整個應(yīng)用。
受此啟發(fā),我發(fā)現(xiàn)Python可以稱為大數(shù)據(jù)全棧式開發(fā)語言。因為Python在云基礎(chǔ)設(shè)施,DevOps,大數(shù)據(jù)處理等領(lǐng)域都是炙手可熱的語言。
領(lǐng)域 流行語言
云基礎(chǔ)設(shè)施 Python, Java, Go
DevOps Python, Shell, Ruby, Go
網(wǎng)絡(luò)爬蟲 Python, PHP, C++
數(shù)據(jù)處理 Python, R, Scala
云基礎(chǔ)設(shè)施就像只要會JavaScript就可以寫出完整的Web應(yīng)用,只要會Python,就可以實現(xiàn)一個完整的大數(shù)據(jù)處理平臺。
這年頭,不支持云平臺,不支持海量數(shù)據(jù),不支持動態(tài)伸縮,根本不敢說自己是做大數(shù)據(jù)的,頂多也就敢跟人說是做商業(yè)智能(BI)。
云平臺分為私有云和公有云。私有云平臺如日中天的OpenStack,就是Python寫的。曾經(jīng)的追趕者CloudStack,在剛推出時大肆強(qiáng)調(diào)自己是Java寫的,比Python有優(yōu)勢。結(jié)果,搬石砸腳,2015年初,CloudStack的發(fā)起人Citrix宣布加入OpenStack基金會,CloudStack眼看著就要壽終正寢。
如果嫌麻煩不想自己搭建私有云,用公有云,不論是AWS,GCE,Azure,還是阿里云,青云,在都提供了Python SDK,其中GCE只提供Python和JavaScript的SDK,而青云只提供Python SDK??梢姼骷以破脚_對Python的重視。
提到基礎(chǔ)設(shè)施搭建,不得不提hadoop,在今天,Hadoop因為其MapReduce數(shù)據(jù)處理速度不夠快,已經(jīng)不再作為大數(shù)據(jù)處理的首選,但是HDFS和Yarn——Hadoop的兩個組件——倒是越來越受歡迎。Hadoop的開發(fā)語言是Java,沒有官方提供Python支持,不過有很多第三方庫封裝了Hadoop的API接口(pydoop,hadoopy等等)。
Hadoop MapReduce的替代者,是號稱快上100倍的Spark,其開發(fā)語言是Scala,但是提供了Scala,Java,Python的開發(fā)接口,想要討好那么多用Python開發(fā)的數(shù)據(jù)科學(xué)家,不支持Python,真是說不過去。HDFS的替代品,比如GlusterFS,Ceph等,都是直接提供Python支持。Yarn的替代者,Mesos是C++實現(xiàn),除C++外,提供了Java和Python的支持包。
DevOps
DevOps有個中文名字,叫做開發(fā)自運(yùn)維?;ヂ?lián)網(wǎng)時代,只有能夠快速試驗新想法,并在第一時間,安全、可靠的交付業(yè)務(wù)價值,才能保持競爭力。DevOps推崇的自動化構(gòu)建/測試/部署,以及系統(tǒng)度量等技術(shù)實踐,是互聯(lián)網(wǎng)時代必不可少的。
自動化構(gòu)建是因應(yīng)用而易的,如果是Python應(yīng)用,因為有setuptools, pip, virtualenv, tox, flake8等工具的存在,自動化構(gòu)建非常簡單。而且,因為幾乎所有Linux系統(tǒng)都內(nèi)置Python解釋器,所以用Python做自動化,不需要系統(tǒng)預(yù)安裝什么軟件。
自動化測試方面,基于Python的Robot Framework企業(yè)級應(yīng)用最喜歡的自動化測試框架,而且和語言無關(guān)。Cucumber也有很多支持者,Python對應(yīng)的Lettuce可以做到完全一樣的事情。Locust在自動化性能測試方面也開始受到越來越多的關(guān)注。
自動化配置管理工具,老牌的如Chef和Puppet,是Ruby開發(fā),目前仍保持著強(qiáng)勁的勢頭。不過,新生代Ansible和SaltStack——均為Python開發(fā)——因為較前兩者設(shè)計更為輕量化,受到越來越多開發(fā)這的歡迎,已經(jīng)開始給前輩們制造了不少的壓力。
在系統(tǒng)監(jiān)控與度量方面,傳統(tǒng)的Nagios逐漸沒落,新貴如Sensu大受好評,云服務(wù)形式的New Relic已經(jīng)成為創(chuàng)業(yè)公司的標(biāo)配,這些都不是直接通過Python實現(xiàn)的,不過Python要接入這些工具,并不困難。
除了上述這些工具,基于Python,提供完整DevOps功能的PaaS平臺,如Cloudify和Deis,雖未成氣候,但已經(jīng)得到大量關(guān)注。
網(wǎng)絡(luò)爬蟲
大數(shù)據(jù)的數(shù)據(jù)從哪里來 除了部分企業(yè)有能力自己產(chǎn)生大量的數(shù)據(jù),大部分時候,是需要靠爬蟲來抓取互聯(lián)網(wǎng)數(shù)據(jù)來做分析。
網(wǎng)絡(luò)爬蟲是Python的傳統(tǒng)強(qiáng)勢領(lǐng)域,最流行的爬蟲框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能夠獨當(dāng)一面的類庫。
不過,網(wǎng)絡(luò)爬蟲并不僅僅是打開網(wǎng)頁,解析HTML這么簡單。高效的爬蟲要能夠支持大量靈活的并發(fā)操作,常常要能夠同時幾千甚至上萬個網(wǎng)頁同時抓取,傳統(tǒng)的線程池方式資源浪費比較大,線程數(shù)上千之后系統(tǒng)資源基本上就全浪費在線程調(diào)度上了。Python由于能夠很好的支持協(xié)程(Coroutine)操作,基于此發(fā)展起來很多并發(fā)庫,如Gevent,Eventlet,還有Celery之類的分布式任務(wù)框架。被認(rèn)為是比AMQP更高效的ZeroMQ也是最早就提供了Python版本。有了對高并發(fā)的支持,網(wǎng)絡(luò)爬蟲才真正可以達(dá)到大數(shù)據(jù)規(guī)模。
抓取下來的數(shù)據(jù),需要做分詞處理,Python在這方面也不遜色,著名的自然語言處理程序包NLTK,還有專門做中文分詞的Jieba,都是做分詞的利器。
數(shù)據(jù)處理
萬事俱備,只欠東風(fēng)。這東風(fēng),就是數(shù)據(jù)處理算法。從統(tǒng)計理論,到數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí),再到最近幾年提出來的深度學(xué)習(xí)理論,數(shù)據(jù)科學(xué)正處于百花齊放的時代。數(shù)據(jù)科學(xué)家們都用什么編程
如果是在理論研究領(lǐng)域,R語言也許是最受數(shù)據(jù)科學(xué)家歡迎的,但是R語言的問題也很明顯,因為是統(tǒng)計學(xué)家們創(chuàng)建了R語言,所以其語法略顯怪異。而且R語言要想實現(xiàn)大規(guī)模分布式系統(tǒng),還需要很長一段時間的工程之路要走。所以很多公司使用R語言做原型試驗,算法確定之后,再翻譯成工程語言。
Python也是數(shù)據(jù)科學(xué)家最喜歡的語言之一。和R語言不同,Python本身就是一門工程性語言,數(shù)據(jù)科學(xué)家用Python實現(xiàn)的算法,可以直接用在產(chǎn)品中,這對于大數(shù)據(jù)初創(chuàng)公司節(jié)省成本是非常有幫助的。正式因為數(shù)據(jù)科學(xué)家對Python和R的熱愛,Spark為了討好數(shù)據(jù)科學(xué)家,對這兩種語言提供了非常好的支持。
Python的數(shù)據(jù)處理相關(guān)類庫非常多。高性能的科學(xué)計算類庫NumPy和SciPy,給其他高級算法打了非常好的基礎(chǔ),matploglib讓Python畫圖變得像Matlab一樣簡單。Scikit-learn和Milk實現(xiàn)了很多機(jī)器學(xué)習(xí)算法,基于這兩個庫實現(xiàn)的Pylearn2,是深度學(xué)習(xí)領(lǐng)域的重要成員。Theano利用GPU加速,實現(xiàn)了高性能數(shù)學(xué)符號計算和多維矩陣計算。當(dāng)然,還有Pandas,一個在工程領(lǐng)域已經(jīng)廣泛使用的大數(shù)據(jù)處理類庫,其DataFrame的設(shè)計借鑒自R語言,后來又啟發(fā)了Spark項目實現(xiàn)了類似機(jī)制。
對了,還有iPython,這個工具如此有用,以至于我差點把他當(dāng)成標(biāo)準(zhǔn)庫而忘了介紹。iPython是一個交互式Python運(yùn)行環(huán)境,能夠?qū)崟r看到每一段Python代碼的結(jié)果。默認(rèn)情況下,iPython運(yùn)行在命令行,可以執(zhí)行ipython notebook在網(wǎng)頁中運(yùn)行。用matplotlib繪制的圖可以直接嵌入式的顯示在iPython Notebook中。
iPython Notebook的筆記本文件可以共享給其他人,這樣其他人就可以在自己的環(huán)境中重現(xiàn)你的工作成果;如果對方?jīng)]有運(yùn)行環(huán)境,還可以直接轉(zhuǎn)換成HTML或者PDF。
為什么是Python
正是因為應(yīng)用開發(fā)工程師、運(yùn)維工程師、數(shù)據(jù)科學(xué)家都喜歡Python,才使得Python成為大數(shù)據(jù)系統(tǒng)的全棧式開發(fā)語言。
對于開發(fā)工程師而言,Python的優(yōu)雅和簡潔無疑是最大的吸引力,在Python交互式環(huán)境中,執(zhí)行import this,讀一讀Python之禪,你就明白Python為什么如此吸引人。Python社區(qū)一直非常有活力,和NodeJS社區(qū)軟件包爆炸式增長不同,Python的軟件包增長速度一直比較穩(wěn)定,同時軟件包的質(zhì)量也相對較高。有很多人詬病Python對于空格的要求過于苛刻,但正是因為這個要求,才使得Python在做大型項目時比其他語言有優(yōu)勢。OpenStack項目總共超過200萬行代碼,證明了這一點。
對于運(yùn)維工程師而言,Python的最大優(yōu)勢在于,幾乎所有Linux發(fā)行版都內(nèi)置了Python解釋器。Shell雖然功能強(qiáng)大,但畢竟語法不夠優(yōu)雅,寫比較復(fù)雜的任務(wù)會很痛苦。用Python替代Shell,做一些復(fù)雜的任務(wù),對運(yùn)維人員來說,是一次解放。
對于數(shù)據(jù)科學(xué)家而言,Python簡單又不失強(qiáng)大。和C/C++相比,不用做很多的底層工作,可以快速進(jìn)行模型驗證;和Java相比,Python語法簡潔,表達(dá)能力強(qiáng),同樣的工作只需要1/3代碼;和Matlab,Octave相比,Python的工程成熟度更高。不止一個編程大牛表達(dá)過,Python是最適合作為大學(xué)計算機(jī)科學(xué)編程課程使用的語言——MIT的計算機(jī)入門課程就是使用的Python——因為Python能夠讓人學(xué)到編程最重要的東西——如何解決問題。
來源:極客頭條
刷新相關(guān)文章
我要評論
活動推薦more >
- 2018 上海國際大數(shù)據(jù)產(chǎn)業(yè)高2018-12-03
- 2018上海國際計算機(jī)網(wǎng)絡(luò)及信2018-12-03
- 中國國際信息通信展覽會將于2018-09-26
- 第五屆FEA消費金融國際峰會62018-06-21
- 第五屆FEA消費金融國際峰會2018-06-21
- “無界區(qū)塊鏈技術(shù)峰會2018”2018-06-14
不容錯過的資訊
-
1#后疫情時代的新思考#疫情之下,關(guān)于醫(yī)
-
2數(shù)據(jù)軟件產(chǎn)品和服務(wù)商DataHunter完成B輪
-
3眾盟科技獲ADMIC 2020金粲獎“年度汽車
-
4數(shù)據(jù)智能 無限未來—2020世界人工智能大
-
5#2020非凡大賞:數(shù)字化風(fēng)起云涌時,共尋
-
6#榜樣的力量#天璣數(shù)據(jù)大腦疫情風(fēng)險感知
-
7#榜樣的力量#內(nèi)蒙古自治區(qū)互聯(lián)網(wǎng)醫(yī)療服
-
8#榜樣的力量#實時新型肺炎疫情數(shù)據(jù)小程
-
9#榜樣的力量#華佗疫情防控平臺丨數(shù)據(jù)猿
-
10#后疫情時代的新思考#構(gòu)建工業(yè)互聯(lián)網(wǎng)新