為何Python攀上數(shù)據(jù)科學(xué)巔峰?調(diào)查顯示Python超越R
根據(jù)KDnuggets 2017年最新調(diào)查,Python生態(tài)系統(tǒng)已經(jīng)超過了R,成為了數(shù)據(jù)分析、數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)的第一大語言。本文對KDnuggets的此項(xiàng)調(diào)查結(jié)果做了介紹,并補(bǔ)充了一篇文章講解為何Python能成為數(shù)據(jù)科學(xué)領(lǐng)域最受歡迎的語言。
Python vs R:2017 年調(diào)查結(jié)果
近日,KDnuggets 發(fā)起了一項(xiàng)調(diào)查,問題是:
你在 2016 年到現(xiàn)在是否使用過 R 語言、Python(以及它們的封裝包),或是其他用于數(shù)據(jù)分析、數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)的工具?
預(yù)料之內(nèi)的是,Python 并沒有完全「吞噬」R 語言的空間,但這項(xiàng)基于 954 個參與者的投票顯示,Python 生態(tài)系統(tǒng)在今年已經(jīng)超越了 R 語言,成為了數(shù)據(jù)分析、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的第一大語言。
值得一提的是,在 2016 年的調(diào)查中,Python 還處于落后地位(34% 比 42%),在 2017 年,兩者的對比是 41% 比 36%。
此外,參與這項(xiàng)調(diào)查的 KDnuggets 讀者也有傾向于共同使用 Python 和 R 兩種語言的趨勢(12%),而使用其他工具的人則有所減少(從 16% 降至 11%)。
圖 1. 2016 年與 2017 年在數(shù)據(jù)分析、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)上,Python、R、兩者共同使用,以及其他平臺的人數(shù)對比。
下面,讓我們看看不同平臺之間的轉(zhuǎn)換。
圖 2. 2016 年與 2017 年間,數(shù)據(jù)分析、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)上,Python、R、兩者共同使用,以及其他平臺的人數(shù)轉(zhuǎn)換示意。
這張圖看起來有點(diǎn)復(fù)雜,其中有兩個主要方面都是 Python 獲得勝利。
忠誠度:Python 的用戶顯得更加忠誠,有 91% 的 2016 年 Python 用戶仍然在使用這個語言,而 R 語言的忠誠度為 74%,其他平臺為 60%。
轉(zhuǎn)換趨勢:只有 5% 的 Python 用戶轉(zhuǎn)投 R 語言,反向轉(zhuǎn)換的比例則是 10%。而對于在 2016 年使用兩種語言的用戶而言,只有 49% 的人仍在使用雙平臺,38% 現(xiàn)在只用 Python,而 11% 轉(zhuǎn)移到了 R 語言上。
在 KDnuggets 2015 年的調(diào)查中,并沒有提出「同時使用 Python 和 R 語言」的選項(xiàng),所以下圖的趨勢線中,2016 年和 2017 年的數(shù)據(jù)按照如下公式進(jìn)行了轉(zhuǎn)換
- Python=(Python 比例)+50%(同時使用 Python 和 R)
- R=(R 比例)+50%(同時使用 Python 和 R)
我們可以看到,R 的使用份額正在逐漸下降(從 2015 年的 50% 降低到了 2017 年的 36%),而 Python 的比例則呈逐年上升趨勢——從 2014 年的 23% 增加到了 2017 年的 47%。同時,其他平臺的使用量在逐漸減少。
最后,讓我們看看這次調(diào)查的參與者地區(qū)分布:
- 美國/加拿大:40%
- 歐洲:35%
- 亞洲:12.5%
- 拉丁美洲:6.2%
- 非洲/中東:3.6%
- 澳大利亞/新西蘭:3.1%
為了簡化圖表,在下圖中,同時使用兩種語言與使用其他語言的比例被合并。
圖 4:分區(qū)域?qū)Ρ?Python、R 、其他,2016 對比 2017
我們在所有地區(qū)都發(fā)現(xiàn)了同樣的模式:
- Python 的比重增加了 8%-10%;
- R 的比重下降了 2%-4%;
- 其他平臺的比重下降了 5%-7%。
Python 用戶的未來看起來一片光明,但我們預(yù)期 R 和其他平臺在未來會保持住一定比重,因?yàn)樗鼈兙薮蟮那度胧交A(chǔ)。
Python 是如何上升到數(shù)據(jù)科學(xué)頂峰的
可以肯定地說,Python 是一個十分受歡迎的工具,它涵蓋了各個行業(yè)的各種職業(yè)。由于它親近性的語言、豐富的資源和框架以及它龐大硬件開發(fā)族群,Python 自然是開發(fā)人員們的首選工具。Packt 在 2017 年的技能調(diào)查顯示,在不同職位的技術(shù)專業(yè)人員中,Python 從 2016 年的第二名上升成為用戶最多的工具。我們向 Sebastian Raschka 提問:為什么不論是應(yīng)用機(jī)器學(xué)習(xí)還是深度學(xué)習(xí)的研究者,亦或是 Packt 的暢銷書 Python 機(jī)器學(xué)習(xí)的作者都轉(zhuǎn)向了 Python 學(xué)習(xí)?這個語言的下一步將會是什么?他不得不承認(rèn):Python 已成為近二十年來最流行的語言。
艱難登頂:PYTHON 是如何成為數(shù)據(jù)科學(xué)通用語言的?
Python 是有史以來最流行的編程語言之一,這一點(diǎn)是毫無疑問的。但是最初發(fā)生的事情確實(shí)很難描述的,是語言本身還是對編程語言的愛。是否是我們首先為科學(xué)計算、數(shù)據(jù)科學(xué)以及機(jī)器學(xué)習(xí)開發(fā)出優(yōu)秀的開源的數(shù)據(jù)庫才推動了大家選擇 Python 作為他們的工具,或是因?yàn)樵絹碓蕉嗟娜嗽谑褂?Python 我們才把這些開發(fā)出來。
無論哪一種是對的,有一件事是足夠顯而易見的:Python 是一種非常通用的語言,易于學(xué)習(xí)和使用。在我看來,這是今天它被如此普遍使用的原因。雖然科學(xué)計算的大多數(shù)算法都沒有在純 Python 中實(shí)現(xiàn),Python 仍然是用于與 Fortran,C / C ++和其他語言中的非常有效的實(shí)現(xiàn)交互的優(yōu)秀語言。
所謂的從計算高效的低級語言調(diào)用代碼,以及 Python 為用戶提供一個非常自然和直觀的編程接口的這一事實(shí)可能是 Python 作為通用語言普及的重要原因之一,特別是在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)社區(qū)中體現(xiàn)的更為明顯。
未來的框架:我們應(yīng)該關(guān)注什么工具、框架和數(shù)據(jù)庫
Python 開發(fā)了許多有趣的庫。作為一名數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)從業(yè)者,我時常從 Python 核心科學(xué)堆棧中重點(diǎn)關(guān)注維護(hù)良好的工具。例如,NumPy 和 SciPy 是就是用于處理數(shù)據(jù)數(shù)組和科學(xué)計算的高效庫。
當(dāng)涉及嚴(yán)重的數(shù)據(jù)清洗時,我們可以使用多功能的 Pandas 包。Pandas 是一個開源庫,可以為 Python 編程語言提供快速簡化的數(shù)據(jù)處理和數(shù)據(jù)分析工具,它主要是為 Python 提供現(xiàn)實(shí)和高端的數(shù)據(jù)分析。我還建議使用 Matplotlib 進(jìn)行數(shù)據(jù)可視化,Seaborn 還可以提供更多的繪圖功能和更專門的繪圖。此外 Scikit 學(xué)習(xí)是一個很好的通用機(jī)器學(xué)習(xí)工具,它為數(shù)據(jù)挖掘和分析提供了有效的工具。這可能是我最喜歡的一款了,因?yàn)樗鼛缀蹩梢詾樗械幕緳C(jī)器學(xué)習(xí)算法和許多有用的數(shù)據(jù)處理工具提供一個非常好用的 API。
當(dāng)然,我在自己的項(xiàng)目中發(fā)現(xiàn)了很多有用的庫。當(dāng)我需要額外的性能時,我首選的數(shù)據(jù)框架庫是 Dask。Dask 是一個非常適合處理大型、難以裝入內(nèi)存的數(shù)據(jù)框架的庫,它還能在多個處理器中進(jìn)行并行計算。或者使用 TensorFlow、Keras 和 PyTorch,所有這些都非常適合實(shí)現(xiàn)深度學(xué)習(xí)模型。使用什么庫取決于你的個人偏好和項(xiàng)目需求,但是一直以來都有很多方便有趣、使用 Python 開發(fā)的框架,關(guān)鍵是找到適合你自己的。
Python 的未來是什么樣的?
在大多數(shù)人的眼里,Python 的未來非常光明。這個語言剛剛被 IEEE Spectrum 列為第一大編程語言。而 Packt 最近的調(diào)查也顯示它是最近一段時期內(nèi)科技界最為流行的工具。盡管在這里,我們主要從數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的角度談?wù)?Python,但我們也會經(jīng)常聽說其他領(lǐng)域的人們也認(rèn)為 Python 是一種功能豐富的語言,擁有大量的庫和完整的生態(tài)系統(tǒng)。Python 或許不是所有問題的最佳工具,但對于想要「完成任務(wù)」的程序員來說,它被認(rèn)為是一種「有效」的語言。
此外,雖然擁有大量庫是 Python 的優(yōu)勢之一,但它的大多數(shù)開發(fā)包目前都得到了很好的維護(hù)——那些數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)庫每天都有新特性與提升。例如 2006 年發(fā)起的 NumPy 項(xiàng)目,作為 Python 數(shù)據(jù)科學(xué)的核心庫,最近它剛剛接受了價值 64.5 萬美元的資助。
Python 及其相關(guān)庫在我們的工作中扮演了重要角色,我非常感謝所有這些工具背后的開發(fā)者,沒有這些開源庫,Python 就沒有今天。對于我們來說,Python 可以成為非常重要的工具,我希望它的用戶們能夠多考慮幫助開源社區(qū)的發(fā)展,不論文檔修改、bug 修復(fù)還是新代碼、新特性或新庫,所有貢獻(xiàn)都將幫助整個社區(qū)向前發(fā)展。因?yàn)檫@個富有活力的社區(qū),Python 的未來有著光明的前景。