如果您正在考慮學習Python,或者您最近剛開始學習,
您可能會問自己:“我到底可以用Python做什麼?”
這是個棘手的問題,因為Python有很多用途。
但是隨著時間的推移,
我發現Python主要可用於一下三個方面:
Web開發
資料科學——包括機器學習、資料分析和資料視覺化
指令碼編寫
我們就依次來看看吧。
一、Web開發
像Django和Flask這樣基於Python的Web框架最近在web開發中變得非常流行。
這些web框架幫助您用Python建立伺服器端程式碼(後端程式碼)。
這些程式碼在您的伺服器上而不是在使用者裝置以及瀏覽器上(前端程式碼)執行。
如果您不熟悉後端程式碼和前端程式碼之間的區別,請參閱下面腳註。
但是,等等,我為什麼需要web框架呢?
那是因為web框架讓構建通用後端邏輯變得更簡單了。
這包括把不同的URL對映到Python程式碼塊、處理資料庫和生成使用者在瀏覽器中看到的HTML檔案。
我應該用哪個Python web框架?
Django和Flask是兩種最流行的Python web框架。
如果您剛剛開始學習,那麼可以用它們中的任何一個。
Django和Flask有什麼區別?
主要的對比:
Flask提供簡潔、靈活和細粒度控制。它很是客觀(讓您決定如何實現想要的東西)。
Django提供一種包羅永珍的體驗:您可以獲得管理皮膚、資料庫介面、ORM(object-relational mappling,物件關係對映),還有開箱即用的應用程式和專案的目錄結構。
您應該選擇:
Flask,如果您專注於體驗和學習機會,或者您想對選用哪個元件有更大的控制權(例如您想使用哪個資料庫和如何與它們互動)。
Django,如果你專注於最終的產品。特別是如果您正在做一個簡單的應用程式(如一個新聞網站、電子商店,或者部落格)並且希望有一個直接明瞭的做法。
換句話說,如果您是位初學者,Flask可能是個更好的選擇,因為用到的元件比較少。
如果您想要更多的定製,那麼Flask也是個更好的選擇。
而且,根據我的資料工程師朋友的看法,
Flask更適合建立那些所謂的REST API的東西,因為它比Django更靈活。
另一方面,
如果您想構建一些簡單的東西,
Django會讓您更快地達到目標。
好,我們接著談談下一個!
二、資料科學 —— 包括機器學習、資料分析和資料視覺化
首先,我們來回顧一下什麼是機器學習。
我認為,解釋什麼是機器學習的最好方法莫過於舉個例子。
假設您想開發一個程式用於自動檢測圖片中的內容。
因此,對於下面的這張圖片(圖片1),您希望您的程式能識別出這是條狗。
而對於下面的這張圖片(圖片2),您希望您的程式能識別出它是張桌子。
您也許會說,我可以用幾行程式碼搞定。例如,如果在圖片上有很多淡棕色的畫素,那麼我們可以說那是狗。
或者,您可以找到在照片中檢測邊緣的方法。然後,您也許會說,如果有很多直邊,那麼那就是一張桌子。
但是,這種方法很快就遇到麻煩了。如果圖片上是條沒有棕色毛髮的白狗怎麼辦?如果圖片上顯示的只是桌子的圓形部分呢?
輪到機器學習大顯身手了。
比如,您給機器學習的演算法提供1000張狗的照片和1000張桌子的照片。那麼,它將會學習區別狗和桌子。當您給出一張狗或桌子的新圖片時,它將能夠識別出是狗還是桌子。
我認為,這和嬰兒學習新事物有點類似。嬰兒是如何知道一樣東西看起來像狗,而另一樣東西看起來像桌子呢?可能就是從大量的例子中學到的。
您也許不會明確地告訴一個嬰兒:“如果一樣東西是毛茸茸的,並且有著淡棕色的毛髮,那麼它可能是條狗。”
您可能只是說:“那是條狗。這也是條狗。這是桌子。那也是桌子。”
機器學習演算法的工作方式大致相同。
您可以把同樣的想法應用於:
推薦系統(像YouTube、Amazon和Netflix在用的)
面部識別
聲音識別
您可能聽說過的流行的機器學習演算法包括:
神經網路
深度學習
支援向量機
隨機森林
您可以使用任何一個上述演算法來解決我剛才解釋過的圖片標註問題。
三、將Python用於機器學習
有一些流行的Python機器學習庫和框架,其中最流行的兩個是scikit-learn和TensorFlow。
scikit-learn附帶了一些更流行的內建機器學習演算法。我剛才提到了其中的幾個。
TensorFlow更像是個低階庫,它允許您構建自定義機器學習演算法。
如果您剛開始一個機器學習專案,那麼我建議您先用scikit-learn。如果您開始遇到效率問題,那麼我建議用TensorFlow。
請注意,您需要微積分和線性代數的基本知識以理解這些課程中的某些內容。
四、那麼資料分析和資料視覺化呢?
為了幫助您理解,我在這裡給您舉個簡單的例子。假設,您為一家線上銷售產品的公司工作。
那麼,作為資料分析師,您也許會畫一個類似的條形圖。
從這張圖上,我們可以看到,在某個特定的週日,對於某件產品來說,男性購買了400多件,而女性購買了大約350件。
作為一個資料分析師,您也許會對其中的差異做出幾個可能的解釋。
一個很顯然的可能解釋是,該產品在男性中比在女性中更流行。另一個可能的解釋是,樣本量太小,這個差異是偶爾產生的。還有一個可能的解釋是,在週日,由於某種原因,男性比女性更傾向於購買該產品。
為了搞明白哪個解釋是正確的,您可能繪製另一張圖,如下圖所示:
我們不再只顯示週日的資料,而是整整一週的資料。正如您所見,從這張圖中,我們可以看到,這種差異在不同的日子裡很一致。
從這個簡單的分析中,您可能得出了結論,對這種差異,一個最有說服力的解釋就是,這個產品更受男性而不是女性歡迎。
另一方面,如果您看到是如下所示的圖呢?
折線圖2-同樣由Python生成
那麼,如何解釋出現在週日的差異呢?
您也許會說,也許出於某種原因,男性在週日更傾向於購買該產品。或者,也許只是巧合,男性在週日購買了更多的該產品。
好了,這是個簡化的例子,展示了資料分析在真實世界中看起來的樣子。
我在谷歌和微軟工作的時候做過資料分析,跟這個例子非常相似,只是更復雜一些罷了。事實上,我在谷歌工作時,是用Python來做這種分析,而我在微軟的時候,用的是JavaScript。
在這兩家公司工作的時候,我用SQL從資料庫中提取資料。然後,我會用Python和Matplotlib(在谷歌工作時)或JavaScrip和D3.js(在微軟工作時)進行資料視覺化和分析。
五、用Python進行資料分析/視覺化
最流行的資料視覺化庫之一是Matplotlib。
剛開始學習的話,它是個不錯的庫,因為:
它容易上手
其他一些庫,如seaborn是以它為基礎的。因此,學習Matplotlib可以幫助您隨後學習其他庫。
六、選Python 3還是Python 2?
我會推薦Python 3,因為它更現代化,並且目前它更受歡迎。
腳註:對於後端程式碼和前端程式碼的的說明(萬一您對這些術語不熟悉)。
假設,您想做個類似於Instagram的東西。
那麼,您需要為每種想支援的裝置建立前端程式碼:
Swift用於iOS裝置
Java用於安卓裝置
JavaScript用於web瀏覽器
每組程式碼都將在對應型別的裝置/瀏覽器上執行。這組程式碼將決定應用的佈局看上去的樣子,單擊時按鈕的外觀等等。
但是,您仍然需要儲存使用者資訊和照片的能力。除了在使用者的裝置商儲存這些資訊,您還會希望將這些資訊儲存在伺服器上,這樣,每個使用者的關注者就能看到使用者的照片。
這裡就是後端程式碼/伺服器端程式碼的用武之地了。您需要編寫後端程式碼以執行以下操作:
持續跟蹤誰在關注誰
壓縮照片,以免佔據太多儲存空間
在發現功能中給每個使用者推薦照片和新賬號
好了,這就是後端程式碼和前段程式碼之間的區別。
順便說一下,Python不是編寫後端/伺服器端程式碼的唯一好選擇。還有很多其他流行的選擇,包括Node.js,它是基於JavaScript的。
如果有什麼想法或者意見的話歡迎來加扣扣群:862672474 大家一起來交流學習呀~ 群裡面更有小夥伴整理好了python的學習資料哦~