[譯] 你究竟能用 Python 作什麼? 咱們一塊兒來看下 Python 的 3 個主要應用方向

你究竟能用Python作什麼? 咱們來看用Python開發的3個應用方向

譯者注:
原文做者曾在谷歌、微軟工做,並從事數據可視化相關工做,文章內容來自於真實工做經驗分享。文章較長,適合和筆者同樣有意向學習Python的同窗閱讀。html


若是你準備開始學習Python或者你已經開始了學習Python,那麼,你肯能會問本身: 「我用Python究竟能作些什麼?」前端

嗯,這是一個棘手的問題,由於Python有不少應用方向。但隨着時間的推移,我發現Python有3個主要應用方向:python

  • Web 開發
  • 數據科學 - 包括機器學習,數據分析和數據可視化
  • 腳本

讓咱們依次來談談每個。git

Web 開發

最近基於Python的Web框架(如DjangoFlask)在Web開發中變得很是流行。算法

這些Web框架可幫助你在Python中建立服務器端代碼(後端代碼)。 這是在你的服務器上運行的代碼,而不是用戶的設備和瀏覽器(前端代碼)。 若是你不熟悉後端代碼和前端代碼之間的區別,請參閱下面的腳註。數據庫

可是等等,爲何我須要一個Web框架?

這是由於Web框架使構建通用後端邏輯變得更容易。 這包括將不一樣的URL映射到Python代碼塊,處理數據庫以及生成用戶在其瀏覽器上看到的HTML文件。django

我應該使用哪一個Python Web框架?

DjangoFlask是兩個最流行的Python Web框架。 若是你剛入門,我建議你使用其中一個。 DjangoFlask有什麼區別? Gareth Dwyer有一篇關於這個主題的優秀文章,因此我在這裏引用它:flask

<引用 開始>小程序

主要對比:後端

Flask提供簡單,靈活和細粒度控制。 它是不受歡迎的(它可讓你決定如何實現它)。 Django提供了一個一應俱全的體驗:你能夠得到管理面板,數據庫接口,ORM [對象關係映射]以及開箱即用的應用程序和項目的目錄結構。

你應該選擇:

Flask,若是你專一於體驗和學習機會,或者你想要更多地控制使用哪些組件(例如你想要使用哪些數據庫以及如何與它們進行交互)。

Django,若是你專一於最終產品。特別是若是你正在開發一個直接的應用程序,如新聞網站,電子商店或博客,你但願老是有一種明顯的作事方式。

</引用 結束>

換句話說,若是你是初學者,Flask多是一個更好的選擇,由於它有更少的組件須要處理。 此外,若是你想要更多自定義,Flask是更好的選擇。

另外一方面,若是你想要直接構建一些東西,Django可能會讓你更快地到達那裏。

如今,若是你想學習Django,我推薦名爲《Django for Beginners》的書。 你能夠在這裏找到它。

你還能夠在此處找到該書的免費樣本章節。

好的,咱們來看下一個主題吧!

數據科學 - 包括機器學習,數據分析和數據可視化

1. 機器學習

首先,讓咱們回顧一下機器學習是什麼

我認爲解釋機器學習的最佳方法是給你一個簡單的例子。 假設你想要開發一個程序來自動檢測圖片中的內容。

所以,以下圖(圖1),你但願程序識別出它是一隻狗。

dog

鑑於下面的另外一個(圖2),你但願程序識別它是一個桌子。

table

你可能會說,好吧,我能夠寫一些代碼來作到這一點。 例如,若是圖片中有不少淺棕色像素,那麼咱們能夠說它是一隻狗。

或者,你能夠弄清楚如何檢測圖片中的邊緣。 而後,你可能會說,若是有不少直邊,那麼它就是一張桌子。

可是,這種方法很快變得棘手。 若是照片中有一隻沒有棕色頭髮的白狗怎麼辦? 若是圖片只顯示桌子的圓形部分怎麼辦?

這就是機器學習的用武之地。

機器學習一般實現一種, 自動檢測給定輸入模式的算法。

你能夠給機器學習算法,給1000張狗的照片和1000張桌子的照片。 而後,它將學習狗和桌子之間的區別。 當你給它一張狗或桌子的新圖片時,它將可以識別它是哪個。

我認爲這有點相似於嬰兒學習新事物的方式。 寶寶怎麼知道一件事看起來像狗,另外一件看起來像一張桌子? 可能來自一堆例子。

你可能沒有明確地告訴嬰兒,「若是有毛茸茸的東西,有淺棕色的頭髮,那麼它多是一隻狗。」

你可能會說,「那是一隻狗。 這也是一隻狗。 這是一張桌子。 那個也是一張桌子。「

機器學習算法的工做方式大體相同。

你能夠將相同的想法應用於:

  • 推薦系統(如YouTube,亞馬遜和Netflix
  • 人臉識別
  • 語音識別

等其餘場景。

你可能據說過的流行的機器學習算法包括:

  • 神經網絡
  • 深度學習
  • 支持向量機
  • 隨機森林

你可使用上述任何算法來解決我以前解釋過的圖片標註問題。

用於機器學習的 Python

針對機器學習有流行的機器學習庫和Python框架。

其中兩個最受歡迎的是scikit-learnTensorFlow

scikit-learn附帶了一些內置的更流行的機器學習算法。 我在上面提到了其中一些。 TensorFlow更像是一個低級庫,容許你構建自定義機器學習算法。

若是你剛剛開始使用機器學習項目,我建議你先從scikit-learn開始。

若是你開始遇到效率問題,那麼我會開始研究TensorFlow

我該如何學習機器學習?

要學習機器學習基礎知識,我會推薦斯坦福大學加州理工學院的機器學習課程。

請注意,你須要微積分和線性代數的基本知識才能理解這些課程中的一些材料。

而後,我會用Kaggle練習你從其中一門課程中學到的東西。 這是一我的們競爭爲特定問題構建最佳機器學習算法的網站。 他們也爲初學者提供了很好的教程。

2. 數據分析和數據可視化又是怎樣呢?

爲了幫助你瞭解這些多是什麼樣子,讓我在這裏給你一個簡單的例子。

假設你正在爲一家在線銷售某些產品的公司工做。

而後,做爲數據分析師,你能夠繪製這樣的條形圖。

Bar Chart 1 — generated with Python
用Python生成的條形圖

從這張圖中,咱們能夠看出,男性購買了超過400個單位的產品,女性在這個特定的星期天購買了約350個單位的產品。

做爲數據分析師,你可能會對這種差別提出一些可能的解釋。

一個明顯可能的解釋是,這種產品比男性更受男性歡迎。 另外一種可能的解釋多是樣本量過小並且這種差別只是偶然形成的。 而另外一種可能的解釋多是,男性傾向於僅在週日因某種緣由購買該產品。

要了解哪些解釋是正確的,你可能會繪製另外一個這樣的圖表。

趨勢圖

咱們不是僅顯示星期日的數據,而是查看整整一週的數據。 如你所見,從這張圖中,咱們能夠看到這種差別在不一樣的日子裏很是一致。

從這個小小的分析中,你能夠得出結論,對這種差別最有說服力的解釋是,這種產品更容易受到男性的歡迎,而不是女性。

另外一方面,若是你看到像這樣的圖表怎麼辦?

趨勢圖2

那麼,是什麼解釋了週日的差別?

你可能會說,也許男人每每只是由於某種緣由在週日購買更多的這種產品。 或者,也許只是巧合,週日男人買了更多。

所以,這是數據分析在現實世界中可能看起來像的簡化示例。

我在谷歌和微軟工做時所作的數據分析工做與這個例子很是類似 - 只是更復雜。 我實際上在谷歌使用Python進行這種分析,而我在微軟使用JavaScript

我在這兩家公司使用SQL來從咱們的數據庫中提取數據。 而後,我會使用PythonMatplotlib(在谷歌)或JavaScriptD3.js(在微軟)來可視化和分析這些數據。

Python進行數據分析和數據可視化

Matplotlib是最受歡迎的數據可視化庫之一。 這是一個很是適合開始學習的庫,緣由以下:

  • 容易上手
  • 其餘一些庫如seaborn就是基於它的。 所以,學習Matplotlib將幫助你稍後學習這些其餘庫。

我該如何學習數據分析和數據可視化呢?

你應該首先了解數據分析和可視化的基礎知識。 當我在網上尋找好的資源時,我找不到任何東西。 因此,我最終制做了關於這個主題的YouTube視頻

我還最終在Pluralsight上完成了關於這個主題的完整課程,你能夠經過註冊他們的10天免費試用版免費參加。

我推薦他們兩個。

在學習了數據分析和可視化的基礎知識以後,從Coursera和Khan Academy這樣的網站學習統計學的基礎知識也會有所幫助。

腳本

什麼是腳本?

腳本一般是指編寫旨在自動執行簡單任務的小程序。

那麼,讓我舉一個我我的經歷的例子。

我曾經在日本的一家小型創業公司工做,咱們有一個電子郵件支持系統。 這是一個系統,讓咱們回覆客戶經過電子郵件發送給咱們的問題。

當我在那裏工做時,個人任務是計算包含某些關鍵字的電子郵件的數量,以便咱們分析收到的電子郵件。

咱們能夠手動完成它,可是,我編寫了一個簡單的程序/簡單腳原本自動執行此任務。

實際上,咱們當時使用Ruby,但Python也是這類任務的好語言。 Python適合這種類型的任務,主要是由於它具備相對簡單的語法而且易於編寫。 用它寫一些小東西並測試它也很快。

嵌入式應用程序呢?

我不是嵌入式應用程序方面的專家,但我知道Python能夠與Rasberry Pi一塊兒使用。 它彷佛是硬件愛好者中的一種流行應用。

遊戲又如何呢?

你可使用名爲PyGame的庫來開發遊戲,但它並非最流行的遊戲引擎。 你能夠用它來創建一個愛好項目,但若是你認真對待遊戲開發,我我的不會選擇它。

相反,我建議開始使用UnityC#,這是最受歡迎的遊戲引擎之一。 它容許你爲許多平臺構建遊戲,包括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。

相關文章
相關標籤/搜索