如果您正在考慮學(xué)習Python,或者您最近剛開(kāi)始學(xué)習,
您可能會(huì )問(wèn)自己:“我到底可以用Python做什么?”
這是個(gè)棘手的問(wèn)題,因為Python有很多用途。
但是隨著(zhù)時(shí)間的推移,
我發(fā)現Python主要可用于一下三個(gè)方面:
Web開(kāi)發(fā)
數據科學(xué)——包括機器學(xué)習、數據分析和數據可視化
腳本編寫(xiě)
我們就依次來(lái)看看吧。
像Django和Flask這樣基于Python的Web框架最近在web開(kāi)發(fā)中變得非常流行。
這些web框架幫助您用Python創(chuàng )建服務(wù)器端代碼(后端代碼)。
這些代碼在您的服務(wù)器上而不是在用戶(hù)設備以及瀏覽器上(前端代碼)運行。
如果您不熟悉后端代碼和前端代碼之間的區別,請參閱下面腳注。
但是,等等,我為什么需要web框架呢?
那是因為web框架讓構建通用后端邏輯變得更簡(jiǎn)單了。
這包括把不同的URL映射到Python代碼塊、處理數據庫和生成用戶(hù)在瀏覽器中看到的HTML文件。
我應該用哪個(gè)Python web框架?
Django和Flask是兩種最流行的Python web框架。
如果您剛剛開(kāi)始學(xué)習,那么可以用它們中的任何一個(gè)。
Django和Flask有什么區別?
主要的對比:
Flask提供簡(jiǎn)潔、靈活和細粒度控制。它很是客觀(guān)(讓您決定如何實(shí)現想要的東西)。
Django提供一種包羅萬(wàn)象的體驗:您可以獲得管理面板、數據庫接口、ORM(object-relational mappling,對象關(guān)系映射),還有開(kāi)箱即用的應用程序和項目的目錄結構。
您應該選擇:
Flask,如果您專(zhuān)注于體驗和學(xué)習機會(huì ),或者您想對選用哪個(gè)組件有更大的控制權(例如您想使用哪個(gè)數據庫和如何與它們交互)。
Django,如果你專(zhuān)注于最終的產(chǎn)品。特別是如果您正在做一個(gè)簡(jiǎn)單的應用程序(如一個(gè)新聞網(wǎng)站、電子商店,或者博客)并且希望有一個(gè)直接明了的做法。
換句話(huà)說(shuō),如果您是位初學(xué)者,Flask可能是個(gè)更好的選擇,因為用到的組件比較少。
如果您想要更多的定制,那么Flask也是個(gè)更好的選擇。
而且,根據我的數據工程師朋友的看法,
Flask更適合創(chuàng )建那些所謂的REST API的東西,因為它比Django更靈活。
另一方面,
如果您想構建一些簡(jiǎn)單的東西,
Django會(huì )讓您更快地達到目標。
好,我們接著(zhù)談?wù)勏乱粋€(gè)!
首先,我們來(lái)回顧一下什么是機器學(xué)習。
我認為,解釋什么是機器學(xué)習的最好方法莫過(guò)于舉個(gè)例子。
假設您想開(kāi)發(fā)一個(gè)程序用于自動(dòng)檢測圖片中的內容。
因此,對于下面的這張圖片(圖片1),您希望您的程序能識別出這是條狗。
圖1
而對于下面的這張圖片(圖片2),您希望您的程序能識別出它是張桌子。
圖2
您也許會(huì )說(shuō),我可以用幾行代碼搞定。例如,如果在圖片上有很多淡棕色的像素,那么我們可以說(shuō)那是狗。
或者,您可以找到在照片中檢測邊緣的方法。然后,您也許會(huì )說(shuō),如果有很多直邊,那么那就是一張桌子。
但是,這種方法很快就遇到麻煩了。如果圖片上是條沒(méi)有棕色毛發(fā)的白狗怎么辦?如果圖片上顯示的只是桌子的圓形部分呢?
輪到機器學(xué)習大顯身手了。
比如,您給機器學(xué)習的算法提供1000張狗的照片和1000張桌子的照片。那么,它將會(huì )學(xué)習區別狗和桌子。當您給出一張狗或桌子的新圖片時(shí),它將能夠識別出是狗還是桌子。
我認為,這和嬰兒學(xué)習新事物有點(diǎn)類(lèi)似。嬰兒是如何知道一樣東西看起來(lái)像狗,而另一樣東西看起來(lái)像桌子呢?可能就是從大量的例子中學(xué)到的。
您也許不會(huì )明確地告訴一個(gè)嬰兒:“如果一樣東西是毛茸茸的,并且有著(zhù)淡棕色的毛發(fā),那么它可能是條狗?!?/p>
您可能只是說(shuō):“那是條狗。這也是條狗。這是桌子。那也是桌子?!?/p>
機器學(xué)習算法的工作方式大致相同。
您可以把同樣的想法應用于:
推薦系統(像YouTube、Amazon和Netflix在用的)
面部識別
聲音識別
您可能聽(tīng)說(shuō)過(guò)的流行的機器學(xué)習算法包括:
神經(jīng)網(wǎng)絡(luò )
深度學(xué)習
支持向量機
隨機森林
您可以使用任何一個(gè)上述算法來(lái)解決我剛才解釋過(guò)的圖片標注問(wèn)題。
有一些流行的Python機器學(xué)習庫和框架,其中最流行的兩個(gè)是scikit-learn和TensorFlow。
scikit-learn附帶了一些更流行的內置機器學(xué)習算法。我剛才提到了其中的幾個(gè)。
TensorFlow更像是個(gè)低級庫,它允許您構建自定義機器學(xué)習算法。
如果您剛開(kāi)始一個(gè)機器學(xué)習項目,那么我建議您先用scikit-learn。如果您開(kāi)始遇到效率問(wèn)題,那么我建議用TensorFlow。
請注意,您需要微積分和線(xiàn)性代數的基本知識以理解這些課程中的某些內容。
為了幫助您理解,我在這里給您舉個(gè)簡(jiǎn)單的例子。假設,您為一家在線(xiàn)銷(xiāo)售產(chǎn)品的公司工作。
那么,作為數據分析師,您也許會(huì )畫(huà)一個(gè)類(lèi)似的條形圖。
條形圖1-由Python生成
從這張圖上,我們可以看到,在某個(gè)特定的周日,對于某件產(chǎn)品來(lái)說(shuō),男性購買(mǎi)了400多件,而女性購買(mǎi)了大約350件。
作為一個(gè)數據分析師,您也許會(huì )對其中的差異做出幾個(gè)可能的解釋。
一個(gè)很顯然的可能解釋是,該產(chǎn)品在男性中比在女性中更流行。另一個(gè)可能的解釋是,樣本量太小,這個(gè)差異是偶爾產(chǎn)生的。還有一個(gè)可能的解釋是,在周日,由于某種原因,男性比女性更傾向于購買(mǎi)該產(chǎn)品。
為了搞明白哪個(gè)解釋是正確的,您可能繪制另一張圖,如下圖所示:
折線(xiàn)圖1-由Python生成
我們不再只顯示周日的數據,而是整整一周的數據。正如您所見(jiàn),從這張圖中,我們可以看到,這種差異在不同的日子里很一致。
從這個(gè)簡(jiǎn)單的分析中,您可能得出了結論,對這種差異,一個(gè)最有說(shuō)服力的解釋就是,這個(gè)產(chǎn)品更受男性而不是女性歡迎。
另一方面,如果您看到是如下所示的圖呢?
折線(xiàn)圖2-同樣由Python生成
那么,如何解釋出現在周日的差異呢?
您也許會(huì )說(shuō),也許出于某種原因,男性在周日更傾向于購買(mǎi)該產(chǎn)品?;蛘?,也許只是巧合,男性在周日購買(mǎi)了更多的該產(chǎn)品。
好了,這是個(gè)簡(jiǎn)化的例子,展示了數據分析在真實(shí)世界中看起來(lái)的樣子。
我在谷歌和微軟工作的時(shí)候做過(guò)數據分析,跟這個(gè)例子非常相似,只是更復雜一些罷了。事實(shí)上,我在谷歌工作時(shí),是用Python來(lái)做這種分析,而我在微軟的時(shí)候,用的是JavaScript。
在這兩家公司工作的時(shí)候,我用SQL從數據庫中提取數據。然后,我會(huì )用Python和Matplotlib(在谷歌工作時(shí))或JavaScrip和D3.js(在微軟工作時(shí))進(jìn)行數據可視化和分析。
最流行的數據可視化庫之一是Matplotlib。
剛開(kāi)始學(xué)習的話(huà),它是個(gè)不錯的庫,因為:
它容易上手
其他一些庫,如seaborn是以它為基礎的。因此,學(xué)習Matplotlib可以幫助您隨后學(xué)習其他庫。
我會(huì )推薦Python 3,因為它更現代化,并且目前它更受歡迎。
腳注:對于后端代碼和前端代碼的的說(shuō)明(萬(wàn)一您對這些術(shù)語(yǔ)不熟悉)。
假設,您想做個(gè)類(lèi)似于Instagram的東西。
那么,您需要為每種想支持的設備創(chuàng )建前端代碼:
Swift用于iOS設備
Java用于安卓設備
JavaScript用于web瀏覽器
每組代碼都將在對應類(lèi)型的設備/瀏覽器上運行。這組代碼將決定應用的布局看上去的樣子,單擊時(shí)按鈕的外觀(guān)等等。
但是,您仍然需要存儲用戶(hù)信息和照片的能力。除了在用戶(hù)的設備商儲存這些信息,您還會(huì )希望將這些信息儲存在服務(wù)器上,這樣,每個(gè)用戶(hù)的關(guān)注者就能看到用戶(hù)的照片。
這里就是后端代碼/服務(wù)器端代碼的用武之地了。您需要編寫(xiě)后端代碼以執行以下操作:
持續跟蹤誰(shuí)在關(guān)注誰(shuí)
壓縮照片,以免占據太多存儲空間
在發(fā)現功能中給每個(gè)用戶(hù)推薦照片和新賬號
好了,這就是后端代碼和前段代碼之間的區別。
順便說(shuō)一下,Python不是編寫(xiě)后端/服務(wù)器端代碼的唯一好選擇。還有很多其他流行的選擇,包括Node.js,它是基于JavaScript的。
聯(lián)系客服