你究竟能用Python做什麼? 我們來看用Python開發的3個應用方向
譯者注:
原文作者曾在谷歌、微軟工作,並從事資料視覺化相關工作,文章內容來自於真實工作經驗分享。文章較長,適合和筆者一樣有意向學習Python
的同學閱讀。
如果你準備開始學習Python
或者你已經開始了學習Python
,那麼,你肯能會問自己:
“我用Python
究竟能做些什麼?”
嗯,這是一個棘手的問題,因為Python有很多應用方向。但隨著時間的推移,我發現Python有3個主要應用方向:
- Web 開發
- 資料科學 - 包括機器學習,資料分析和資料視覺化
- 指令碼
讓我們依次來談談每一個。
Web 開發
最近基於Python
的Web框架(如Django
和Flask
)在Web開發中變得非常流行。
這些Web框架可幫助你在Python
中建立伺服器端程式碼(後端程式碼)。 這是在你的伺服器上執行的程式碼,而不是使用者的裝置和瀏覽器(前端程式碼)。 如果你不熟悉後端程式碼和前端程式碼之間的區別,請參閱下面的腳註。
但是等等,為什麼我需要一個Web框架?
這是因為Web框架使構建通用後端邏輯變得更容易。 這包括將不同的URL對映到Python程式碼塊,處理資料庫以及生成使用者在其瀏覽器上看到的HTML檔案。
我應該使用哪個Python Web框架?
Django
和Flask
是兩個最流行的Python Web框架。 如果你剛入門,我建議你使用其中一個。
Django
和Flask
有什麼區別?
Gareth Dwyer有一篇關於這個主題的優秀文章,所以我在這裡引用它:
<引用 開始>
主要對比:
Flask
提供簡單,靈活和細粒度控制。 它是不受歡迎的(它可以讓你決定如何實現它)。
Django
提供了一個包羅永珍的體驗:你可以獲得管理皮膚,資料庫介面,ORM
[物件關係對映]以及開箱即用的應用程式和專案的目錄結構。
你應該選擇:
Flask
,如果你專注於體驗和學習機會,或者你想要更多地控制使用哪些元件(例如你想要使用哪些資料庫以及如何與它們進行互動)。
Django
,如果你專注於最終產品。特別是如果你正在開發一個直接的應用程式,如新聞網站,電子商店或部落格,你希望總是有一種明顯的做事方式。
</引用 結束>
換句話說,如果你是初學者,Flask
可能是一個更好的選擇,因為它有更少的元件需要處理。 此外,如果你想要更多自定義,Flask
是更好的選擇。
另一方面,如果你想要直接構建一些東西,Django
可能會讓你更快地到達那裡。
現在,如果你想學習Django
,我推薦名為《Django for Beginners》的書。 你可以在這裡找到它。
你還可以在此處找到該書的免費樣本章節。
好的,我們來看下一個主題吧!
資料科學 - 包括機器學習,資料分析和資料視覺化
1. 機器學習
首先,讓我們回顧一下機器學習是什麼
我認為解釋機器學習的最佳方法是給你一個簡單的例子。 假設你想要開發一個程式來自動檢測圖片中的內容。
因此,如下圖(圖1),你希望程式識別出它是一隻狗。
鑑於下面的另一個(圖2),你希望程式識別它是一個桌子。
你可能會說,好吧,我可以寫一些程式碼來做到這一點。 例如,如果圖片中有很多淺棕色畫素,那麼我們可以說它是一隻狗。
或者,你可以弄清楚如何檢測圖片中的邊緣。 然後,你可能會說,如果有很多直邊,那麼它就是一張桌子。
但是,這種方法很快變得棘手。 如果照片中有一隻沒有棕色頭髮的白狗怎麼辦? 如果圖片只顯示桌子的圓形部分怎麼辦?
這就是機器學習的用武之地。
機器學習通常實現一種, 自動檢測給定輸入模式的演算法。
你可以給機器學習演算法,給1000張狗的照片和1000張桌子的照片。 然後,它將學習狗和桌子之間的區別。 當你給它一張狗或桌子的新圖片時,它將能夠識別它是哪一個。
我認為這有點類似於嬰兒學習新事物的方式。 寶寶怎麼知道一件事看起來像狗,另一件看起來像一張桌子? 可能來自一堆例子。
你可能沒有明確地告訴嬰兒,“如果有毛茸茸的東西,有淺棕色的頭髮,那麼它可能是一隻狗。”
你可能會說,“那是一隻狗。 這也是一隻狗。 這是一張桌子。 那個也是一張桌子。“
機器學習演算法的工作方式大致相同。
你可以將相同的想法應用於:
- 推薦系統(如
YouTube
,亞馬遜和Netflix
) - 人臉識別
- 語音識別
等其他場景。
你可能聽說過的流行的機器學習演算法包括:
- 神經網路
- 深度學習
- 支援向量機
- 隨機森林
你可以使用上述任何演算法來解決我之前解釋過的圖片標註問題。
用於機器學習的 Python
針對機器學習有流行的機器學習庫和Python框架。
其中兩個最受歡迎的是scikit-learn和TensorFlow。
scikit-learn附帶了一些內建的更流行的機器學習演算法。 我在上面提到了其中一些。 TensorFlow更像是一個低階庫,允許你構建自定義機器學習演算法。
如果你剛剛開始使用機器學習專案,我建議你先從scikit-learn開始。
如果你開始遇到效率問題,那麼我會開始研究TensorFlow。
我該如何學習機器學習?
要學習機器學習基礎知識,我會推薦史丹佛大學或加州理工學院的機器學習課程。
請注意,你需要微積分和線性代數的基本知識才能理解這些課程中的一些材料。
然後,我會用Kaggle練習你從其中一門課程中學到的東西。 這是一個人們競爭為特定問題構建最佳機器學習演算法的網站。 他們也為初學者提供了很好的教程。
2. 資料分析和資料視覺化又是怎樣呢?
為了幫助你瞭解這些可能是什麼樣子,讓我在這裡給你一個簡單的例子。
假設你正在為一家線上銷售某些產品的公司工作。
然後,作為資料分析師,你可以繪製這樣的條形圖。
用Python生成的條形圖從這張圖中,我們可以看出,男性購買了超過400個單位的產品,女性在這個特定的星期天購買了約350個單位的產品。
作為資料分析師,你可能會對這種差異提出一些可能的解釋。
一個明顯可能的解釋是,這種產品比男性更受男性歡迎。 另一種可能的解釋可能是樣本量太小而且這種差異只是偶然造成的。 而另一種可能的解釋可能是,男性傾向於僅在週日因某種原因購買該產品。
要了解哪些解釋是正確的,你可能會繪製另一個這樣的圖表。
我們不是僅顯示星期日的資料,而是檢視整整一週的資料。 如你所見,從這張圖中,我們可以看到這種差異在不同的日子裡非常一致。
從這個小小的分析中,你可以得出結論,對這種差異最有說服力的解釋是,這種產品更容易受到男性的歡迎,而不是女性。
另一方面,如果你看到像這樣的圖表怎麼辦?
那麼,是什麼解釋了週日的差異?
你可能會說,也許男人往往只是因為某種原因在週日購買更多的這種產品。 或者,也許只是巧合,週日男人買了更多。
因此,這是資料分析在現實世界中可能看起來像的簡化示例。
我在谷歌和微軟工作時所做的資料分析工作與這個例子非常相似 - 只是更復雜。 我實際上在谷歌使用Python
進行這種分析,而我在微軟使用JavaScript
。
我在這兩家公司使用SQL
來從我們的資料庫中提取資料。 然後,我會使用Python
和Matplotlib
(在谷歌)或JavaScript
和D3.js
(在微軟)來視覺化和分析這些資料。
用Python
進行資料分析和資料視覺化
Matplotlib是最受歡迎的資料視覺化庫之一。 這是一個非常適合開始學習的庫,原因如下:
- 容易上手
- 其他一些庫如
seaborn
就是基於它的。 因此,學習Matplotlib
將幫助你稍後學習這些其他庫。
我該如何學習資料分析和資料視覺化呢?
你應該首先了解資料分析和視覺化的基礎知識。 當我在網上尋找好的資源時,我找不到任何東西。 所以,我最終制作了關於這個主題的YouTube視訊:
我還最終在Pluralsight上完成了關於這個主題的完整課程,你可以通過註冊他們的10天免費試用版免費參加。
我推薦他們兩個。
在學習了資料分析和視覺化的基礎知識之後,從Coursera和Khan Academy這樣的網站學習統計學的基礎知識也會有所幫助。
指令碼
什麼是指令碼?
指令碼通常是指編寫旨在自動執行簡單任務的小程式。
那麼,讓我舉一個我個人經歷的例子。
我曾經在日本的一家小型創業公司工作,我們有一個電子郵件支援系統。 這是一個系統,讓我們回覆客戶通過電子郵件傳送給我們的問題。
當我在那裡工作時,我的任務是計算包含某些關鍵字的電子郵件的數量,以便我們分析收到的電子郵件。
我們可以手動完成它,但是,我編寫了一個簡單的程式/簡單指令碼來自動執行此任務。
實際上,我們當時使用Ruby,但Python也是這類任務的好語言。 Python適合這種型別的任務,主要是因為它具有相對簡單的語法並且易於編寫。 用它寫一些小東西並測試它也很快。
嵌入式應用程式呢?
我不是嵌入式應用程式方面的專家,但我知道Python可以與Rasberry Pi一起使用。 它似乎是硬體愛好者中的一種流行應用。
遊戲又如何呢?
你可以使用名為PyGame的庫來開發遊戲,但它並不是最流行的遊戲引擎。 你可以用它來建立一個愛好專案,但如果你認真對待遊戲開發,我個人不會選擇它。
相反,我建議開始使用Unity
與C#
,這是最受歡迎的遊戲引擎之一。 它允許你為許多平臺構建遊戲,包括Mac,Windows,iOS和Android。
桌面應用又怎樣?
你可以使用Tkinter製作一個Python,但它似乎也不是最受歡迎的選擇。
相反,似乎Java,C#和C ++等語言更受歡迎。
最近,一些公司也開始使用JavaScript來建立桌面應用程式。
例如,Slack的桌面應用程式是用Electron
構建的。 它允許你使用JavaScript
構建桌面應用程式。
就個人而言,如果我正在構建一個桌面應用程式,我會使用JavaScript
選項。 它允許你重用Web版本中的一些程式碼(如果有的話)。
但是,我也不是桌面應用程式方面的專家,所以如果你不同意或同意我的意見,請在評論中告訴我。
Python 3 or Python 2?
我會推薦Python 3,因為它更現代,而且在這一點上它是一個更受歡迎的選項。
腳註:關於後端程式碼與前端程式碼的說明(以防你不熟悉這些條款):
假設你想製作像Instagram
這樣的東西。
然後,你需要為要支援的每種型別的裝置建立前端程式碼。
你可以使用,例如:
適用於iOS的Swift 適用於Android的Java 用於Web瀏覽器的JavaScript 每組程式碼都將在每種型別的裝置/瀏覽器上執行。這將是一組程式碼,用於確定應用程式的佈局如何,單擊按鈕時的外觀等等。
但是,你仍然需要能夠儲存使用者的資訊和照片。你需要將它們儲存在伺服器上,而不僅僅儲存在使用者的裝置上,以便每個使用者的關注者都可以檢視他/她的照片。
這是後端程式碼/伺服器端程式碼的用武之地。你需要編寫一些後端程式碼來執行以下操作:
跟蹤誰在關注誰 壓縮照片,以免佔用太多儲存空間 在發現功能中向每個使用者推薦照片和新帳戶 因此,這是後端程式碼和前端程式碼之間的區別。
順便說一下,Python並不是編寫後端/伺服器端程式碼的唯一好選擇。還有許多其他流行的選擇,包括Node.js
,它基於JavaScript。