有Python主要有以下三大主要應(yīng)用:
一、 Web開(kāi)發(fā)
Django和Flask等基于Python的Web框架最近在Web開(kāi)發(fā)中非常流行。
這些Web框架可以幫助你用Python編寫(xiě)服務(wù)器端代碼(后端代碼)。這是在你的額服務(wù)器上運(yùn)行的代碼,而不是運(yùn)行在用戶(hù)設(shè)備和瀏覽器的代碼(前端代碼)。
1. 為什么需要Web框架
因?yàn)橛肳eb框架可以更容易地構(gòu)建通用后端邏輯。這包括將不同的URL映射到Python代碼塊,處理數(shù)據(jù)庫(kù)以及生成用戶(hù)在瀏覽器中看到的HTML文件。
2. 應(yīng)該使用哪種Python Web框架
Django和Flask是最流行的兩種Python Web框架。如果你剛剛?cè)腴T(mén),我建議使用其中一種。
3. Django和Flask有什么區(qū)別
Gareth Dwyer 關(guān)于這個(gè)問(wèn)題有一篇出色的文章,在這里我引用幾段:
主要區(qū)別
Flask:能夠?qū)崿F(xiàn)簡(jiǎn)單、靈活和細(xì)致的控制。并能讓你自己決定實(shí)現(xiàn)方式。
Django:提供了全面的體驗(yàn):你可以獲得管理面板、數(shù)據(jù)庫(kù)接口、ORM(對(duì)象關(guān)系映射)以及開(kāi)箱即用的應(yīng)用程序和項(xiàng)目的目錄結(jié)構(gòu)。
如何選擇
Flask:如果你關(guān)注的是經(jīng)驗(yàn)和學(xué)習(xí)的機(jī)會(huì),或者你想更多地控制使用哪些組件,比如你想使用哪些數(shù)據(jù)庫(kù)以及如何與其進(jìn)行交互。
Django:如果你關(guān)注最終產(chǎn)品,或者你正在研究一個(gè)簡(jiǎn)單的應(yīng)用,比如新聞網(wǎng)站、網(wǎng)店或博客,并且你希望有單一實(shí)現(xiàn)的方式。
換句話(huà)說(shuō),如果你是初學(xué)者,F(xiàn)lask可能是更好的選擇,因?yàn)樗莆盏慕M件更少。此外,如果你想要更多的定制,那就選Flask。
根據(jù)我的數(shù)據(jù)工程師朋友Jonathan T Ho的說(shuō)法,由于Flask 的靈活性,在創(chuàng)建REST API時(shí),F(xiàn)lask 比Django 更適合。
另一方面,如果你想直接構(gòu)建一些東西,Django可能會(huì)讓你更快實(shí)現(xiàn)。
二、 數(shù)據(jù)科學(xué)
數(shù)據(jù)科學(xué),這里包括機(jī)器學(xué)習(xí),數(shù)據(jù)分析和數(shù)據(jù)可視化。
1. 機(jī)器學(xué)習(xí)是什么?
假設(shè)你想開(kāi)發(fā)一個(gè)能夠自動(dòng)檢測(cè)圖片內(nèi)容的程序。給出圖1,你希望程序識(shí)別這是一只狗。
你可能會(huì)說(shuō),我可以寫(xiě)一些代碼來(lái)做到這點(diǎn)。例如,如果圖片中有很多淺棕色像素,那么可以識(shí)別是狗。
或者可以檢測(cè)圖片中的邊緣,如果有很多直的邊緣,那么就是桌子。
但這種方法很快就不好用了。如果圖片中的狗不是棕色毛的怎么辦?如果圖片只顯示桌子的圓形部分怎么辦?
這里就需要用到機(jī)器學(xué)習(xí)了。
機(jī)器學(xué)習(xí)通過(guò)實(shí)現(xiàn)算法,該算法能夠自動(dòng)檢測(cè)輸入中的模式。
例如,你將1000張狗的圖片和1000張桌子的圖片輸入給機(jī)器學(xué)習(xí)算法,讓它掌握狗和桌子間的區(qū)別。那么當(dāng)你給出新的圖片讓它識(shí)別是狗還是桌子時(shí),它就能夠進(jìn)行判斷。
這有點(diǎn)類(lèi)似孩子學(xué)習(xí)新事物的方式。孩子是如何學(xué)習(xí)認(rèn)知狗或桌子的呢?就是通過(guò)大量的例子。
你不會(huì)明確告訴孩子:“如果某個(gè)毛茸茸的東西有淺棕色的毛發(fā),那么就可能是狗?!?/p>
你會(huì)說(shuō),“這是狗,這也是狗。而這是桌子,那個(gè)也是桌子?!?/p>
機(jī)器學(xué)習(xí)算法的方式大致相同。
我們可以將相同的想法應(yīng)用于:
推薦系統(tǒng):比如YouTube,亞馬遜和Netflix
人臉識(shí)別
語(yǔ)音識(shí)別
以及其他應(yīng)用。
你聽(tīng)過(guò)的熱門(mén)機(jī)器學(xué)習(xí)算法包括:
神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)
支持向量機(jī)
隨機(jī)森林
你可以使用上述任何算法來(lái)解決前面提到的圖片標(biāo)簽問(wèn)題。
2. 將Python用于機(jī)器學(xué)習(xí)
有一些熱門(mén)的機(jī)器學(xué)習(xí)庫(kù)和Python框架。其中兩個(gè)最熱門(mén)的是scikit-learn和TensorFlow。
scikit-learn帶有一些內(nèi)置的熱門(mén)機(jī)器學(xué)習(xí)算法。
TensorFlow是一個(gè)低級(jí)庫(kù),能讓你創(chuàng)建自定義機(jī)器學(xué)習(xí)算法。
如果你剛開(kāi)始進(jìn)行機(jī)器學(xué)習(xí)項(xiàng)目,我會(huì)建議你先從scikit-learn開(kāi)始。如果你開(kāi)始遇到效率問(wèn)題,那么可以使用TensorFlow。
3. 數(shù)據(jù)分析和數(shù)據(jù)可視化
假設(shè)你在一家在線(xiàn)銷(xiāo)售產(chǎn)品的公司工作。作為數(shù)據(jù)分析師,你會(huì)繪制這樣的條形圖。
a、條形圖1 - 用Python生成
從這張圖中可以看到在某個(gè)周日,男性用戶(hù)購(gòu)買(mǎi)了400多件產(chǎn)品,女性用戶(hù)購(gòu)買(mǎi)了350件產(chǎn)品。
作為數(shù)據(jù)分析師,對(duì)此你會(huì)提出一些可能的解釋。明顯的解釋是,該產(chǎn)品在男性用戶(hù)中更受歡迎。另一種是樣本量太小,而這種差異是偶然的。還可能呢是由于某種原因,男性往往在周日才購(gòu)買(mǎi)該產(chǎn)品。
為了理解哪種解釋是正確的,你可以繪制另一個(gè)圖。
b、折線(xiàn)圖1 - 用Python生成
不止看周日的數(shù)據(jù),還要看到一周的數(shù)據(jù)。從這張圖表中可以看出,在不同的日子里這種差異比較一致。
從這個(gè)分析中你會(huì)得出結(jié)論:這種產(chǎn)品在男性中比在女性中更受歡迎。
但如果你看到像這樣的圖表呢?
c、折線(xiàn)圖2 - 用Python生成
那么,怎么解釋周日的差異呢?
你可能會(huì)說(shuō),也許出于某種原因男性只在周日才會(huì)更多地購(gòu)買(mǎi)這款產(chǎn)品?;蛟S這只是巧合。
我在谷歌和微軟工作時(shí)所做的數(shù)據(jù)分析工作與這個(gè)例子非常相似,只是更復(fù)雜一些。在谷歌時(shí)我使用Python進(jìn)行分析,而我在微軟使用JavaScript。
在這兩家公司我都使用SQL從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)。然后,我用Python和Matplotlib(在谷歌)或JavaScript和D3.js(在微軟)來(lái)可視化和分析這些數(shù)據(jù)。
4. 使用Python進(jìn)行數(shù)據(jù)分析/可視化
進(jìn)行數(shù)據(jù)可視化時(shí),Matplotlib是非常熱門(mén)的庫(kù)。
Matplotlib很棒,因?yàn)椋?/p>
容易上手
seaborn等庫(kù)是基于它的,學(xué)習(xí)Matplotlib可以幫助你以后學(xué)習(xí)其他庫(kù)。
5. 如何用Python學(xué)習(xí)數(shù)據(jù)分析/可視化
你首先應(yīng)該了解數(shù)據(jù)分析和可視化的基礎(chǔ)知識(shí)。在學(xué)習(xí)了數(shù)據(jù)分析和可視化的基礎(chǔ)知識(shí)之后,學(xué)習(xí)統(tǒng)計(jì)學(xué)基礎(chǔ)知識(shí)也將會(huì)很有幫助。
三、腳本
什么是腳本?
腳本通常是指編寫(xiě)能夠自動(dòng)執(zhí)行簡(jiǎn)單任務(wù)的小程序。
我曾經(jīng)在日本的一家小型創(chuàng)業(yè)公司工作,公司有郵件支持系統(tǒng),這用來(lái)回復(fù)客戶(hù)通過(guò)郵件發(fā)送給我們的問(wèn)題。
在那兒工作時(shí),我的任務(wù)是計(jì)算包含關(guān)鍵字的郵件數(shù)量,以便分析我們收到的電子郵件。這可以手動(dòng)完成,但我寫(xiě)了一個(gè)簡(jiǎn)單的腳本來(lái)自動(dòng)執(zhí)行此任務(wù)。
當(dāng)時(shí)我們使用了Ruby,但對(duì)于這類(lèi)任務(wù)Python也是不錯(cuò)的選擇。Python適合這類(lèi)任務(wù),因?yàn)樗Z(yǔ)法簡(jiǎn)單,易于編寫(xiě),而且進(jìn)行測(cè)試也很快。
四、其他用途
1. 嵌入式應(yīng)用
我不是這方面的專(zhuān)家,但我知道Python可以與Rasberry Pi一起用,在硬件愛(ài)好者中很流行。
2. 游戲開(kāi)發(fā)
你可以用PyGame來(lái)開(kāi)發(fā)游戲,但這并不是最受歡迎的游戲引擎。你可以用它來(lái)開(kāi)發(fā)業(yè)余愛(ài)好項(xiàng)目,但如果你對(duì)游戲開(kāi)發(fā)很認(rèn)真,建議不要選它。
我建議使用Unity的C#,這是最受歡迎的游戲引擎之一。它能讓你為許多平臺(tái)開(kāi)發(fā)游戲,包括Mac、Windows、iOS和Android。
3. 桌面應(yīng)用
你可以用Python的Tkinter,但這并不是最熱門(mén)的選擇。Java,C#和C ++等語(yǔ)言似乎更受歡迎。
最近,一些公司也開(kāi)始使用JavaScript來(lái)開(kāi)發(fā)桌面應(yīng)用程序。例如,Slack的桌面應(yīng)用是Electron構(gòu)建的。它能讓你用JavaScript構(gòu)建桌面應(yīng)用程序。
就個(gè)人而言,如果我要開(kāi)發(fā)桌面應(yīng)用,我會(huì)選擇使用JavaScript。它能讓你重新使用網(wǎng)絡(luò)版本的一些代碼。
當(dāng)然,我并不是桌面應(yīng)用的專(zhuān)家,所以如果你有不同的看法,評(píng)論中告訴我。
4. Python 3還是Python 2
我會(huì)推薦Python 3,因?yàn)樗露腋軞g迎。
5. 后端代碼與前端代碼的區(qū)別
假設(shè)你想開(kāi)發(fā)類(lèi)似Instagram的產(chǎn)品,那么你需要為想要支持類(lèi)型的設(shè)備創(chuàng)建前端代碼。
你可能會(huì)用到:
面向iOS端的Swift?
面向Android的Java
面向Web瀏覽器的JavaScript
每組代碼將在每種類(lèi)型的設(shè)備上運(yùn)行。這類(lèi)代碼將決定應(yīng)用的布局樣式,點(diǎn)擊按鍵的樣式等。
但是,您還需要存儲(chǔ)用戶(hù)信息和照片的功能。你要將它們存儲(chǔ)在服務(wù)器上,而不僅僅存儲(chǔ)在用戶(hù)的設(shè)備上,以便每個(gè)用戶(hù)的關(guān)注者都可以查看其照片。
這時(shí)需要用到后端代碼/服務(wù)器端代碼。你需要編寫(xiě)后端代碼來(lái)執(zhí)行以下操作:
記錄關(guān)注情況
壓縮照片,從而不占用太多存儲(chǔ)空間
在發(fā)現(xiàn)功能中向每個(gè)用戶(hù)推薦照片和新帳戶(hù)
這是后端代碼和前端代碼之間的區(qū)別。
順便說(shuō)一下,Python不是編寫(xiě)后端代碼的唯一選擇,還有基于JavaScript的Node.js等選擇。