原文請(qǐng)戳《What exactly can you do with Python? Here are Python’s 3 main applications.》
如果你想學(xué) Python — 或者你最近已在學(xué)習(xí)它 — 那么你或許應(yīng)該問下自己:— 我用 Python 都能做些什么呢?
好吧据沈,這還真是個(gè)蠻難回答的問題莺奔,因?yàn)?Python 能做的事兒真是太多了啦!
過去一段時(shí)間內(nèi)遗淳,我觀察到 Python 有這么三個(gè)最主要的用途:
- Web 開發(fā)
- 數(shù)據(jù)科學(xué) — 包括機(jī)器學(xué)習(xí)拍柒,數(shù)據(jù)分析和數(shù)據(jù)可視化
- 寫腳本
那我們就依次聊聊這三項(xiàng)。
Web 開發(fā)
在 Web 開發(fā)中屈暗,像 Django 和 Flask 這類基于 Python 的 Web 框架最近變得非常流行拆讯。
這些框架幫助你用 Python 創(chuàng)建服務(wù)端(后臺(tái))的代碼脂男。
等等,我們?yōu)槭裁葱枰?Web 框架种呐?
這是因?yàn)橛?Web 框架能很容易的構(gòu)建起后臺(tái)開發(fā)的通用邏輯宰翅,如:將 Python 的代碼塊與 URLs 匹配,與數(shù)據(jù)庫(kù)的交互爽室,創(chuàng)建 HTML 文件供瀏覽器讀取等等汁讼。
那我應(yīng)該用哪個(gè) Python 的 Web 框架
Django 和 Flask 是 Python 最流行的兩個(gè) Web 框架。如果你是新手阔墩,我推薦你任選其一嘿架。
Django 和 Flask 有什么區(qū)別?
這個(gè)問題在 Gareth Dwyer 的《Flask vs. Django: Why Flask Might Be Better》上已作了非常好的回答戈擒,我引用其中的部分:
主要對(duì)比:
- Flask 是簡(jiǎn)單眶明、靈活、漸進(jìn)性的一個(gè)框架筐高,這給了開發(fā)者很大的自由度搜囱。
- Django 則包羅萬(wàn)象了:它提供控制面板、數(shù)據(jù)庫(kù)接口柑土、ORM(object-realtional mapping) 和“開箱即用”目錄結(jié)構(gòu)蜀肘。
譯者注:Flask vs Django 很像前端中 React/Vue vs Angular 或 Koa vs Express。Flask 輕量化稽屏、模塊化且自由靈活扮宠,Django 一應(yīng)俱全且概念較多。你該怎么選擇:
- Flask狐榔,如果你關(guān)注經(jīng)驗(yàn)的積累和學(xué)習(xí)的機(jī)會(huì)坛增,或者你對(duì)各組件想有更大的控制權(quán)(如數(shù)據(jù)庫(kù)和與其交互方式的選擇)。
- Django薄腻,如果你想快速出活收捣,尤其是當(dāng)產(chǎn)品特性單一,如新聞網(wǎng)站庵楷、電子商城或者博客罢艾,并且你希望它們總是特性單一,邏輯簡(jiǎn)單尽纽。
如果你剛?cè)腴T咐蚯,F(xiàn)lask 或許是更好的選擇,因?yàn)樗旧碇挥袔讉€(gè)模塊就能跑起來(lái)弄贿。另外春锋,如果你對(duì)項(xiàng)目有更多的定制化需求,F(xiàn)lask 是更好的選擇差凹。
另一方面看疙,如果你的項(xiàng)目簡(jiǎn)單豆拨、直接,Django 能讓你快速開發(fā)能庆。
現(xiàn)在施禾,如果你準(zhǔn)備學(xué)習(xí) Django,我推薦你看 《Django for Beginners》搁胆,你也能從這兒看一些這本書的免費(fèi)章節(jié)弥搞。
Okay,讓我們進(jìn)行下一趴渠旁!
數(shù)據(jù)科學(xué) — 包括機(jī)器學(xué)習(xí)攀例,數(shù)據(jù)分析和數(shù)據(jù)可視化
首先,什么是機(jī)器學(xué)習(xí)顾腊?
我認(rèn)為解釋什么是機(jī)器學(xué)習(xí)的最好方式是給出一個(gè)簡(jiǎn)單的例子粤铭。
假設(shè)你想開發(fā)一個(gè)能自動(dòng)識(shí)別圖片內(nèi)容的程序。
比如杂靶,你想讓你的程序識(shí)別出下圖(Picture 1)是一張狗??梆惯。
再甩出另一張圖片(Picture 2),你想讓你的程序識(shí)別出這是一張桌子吗垮。
你也許會(huì)說(shuō)垛吗,歐耶,我能寫出代碼來(lái)實(shí)現(xiàn)這事兒烁登。比如怯屉,可以判斷若圖片中出現(xiàn)了一些亮棕色,就可以認(rèn)為圖片中有條狗??饵沧。
或者锨络,你發(fā)明了檢測(cè)出圖片中物體邊緣的算法。然后狼牺,你就可以判斷若圖中出現(xiàn)了很多直直的物體邊緣羡儿,就可以認(rèn)為圖中有張桌子。
然而锁右,這種方法很快會(huì)變得非常棘手。如果圖中的狗不是棕毛怎么辦讶泰?如果圖中是張圓桌怎么辦咏瑟?
這時(shí)就輪到機(jī)器學(xué)習(xí)出場(chǎng)啦~
機(jī)器學(xué)習(xí)的算法能自動(dòng)提取出輸入的一系列信息的共同特征。
我們可以向機(jī)器學(xué)習(xí)算法輸入1000張狗的圖片和1000張桌子的圖片痪署。然后码泞,它從中學(xué)習(xí)??和桌子的區(qū)別。當(dāng)你再給出一張??或桌子的圖片時(shí)狼犯,它便能做出識(shí)別余寥。
我覺得這點(diǎn)非常像嬰兒的學(xué)習(xí)方式领铐。嬰兒如何學(xué)習(xí)什么是狗什么是桌子呢?一般是從一系列的生活場(chǎng)景中學(xué)習(xí)宋舷。
你一般不會(huì)對(duì)嬰兒說(shuō):“如果某物是毛茸茸的或有亮棕毛绪撵,那么它可能是狗”。
你一般會(huì)說(shuō):“看這是狗祝蝠。那是狗音诈。或者你看绎狭,這是桌子细溅,那個(gè)也是桌子”...
機(jī)器學(xué)習(xí)算法和教育嬰兒很像。
這個(gè)思路你可應(yīng)用于:
- 推薦系統(tǒng)(像 YouTuBe, Amazon, 和 Netflix)
- 面部識(shí)別
- 聲音識(shí)別
和其他一系列類似的應(yīng)用儡嘶。
其中一些流行的機(jī)器學(xué)習(xí)算法包括:
- 神經(jīng)網(wǎng)絡(luò)
- 深度學(xué)習(xí)
- 支持向量機(jī)
- 隨即森林法則
你可以使用上面的任何算法來(lái)解決我前面提到過的圖片標(biāo)記問題喇聊。
Python 的機(jī)器學(xué)習(xí)
Python 有許多流行的機(jī)器學(xué)習(xí)的庫(kù)和框架。
其中最流程的兩個(gè)是 scikit-learn 和 TensorFlow蹦狂。
- scikit-learn 中內(nèi)置的很多流行的機(jī)器學(xué)習(xí)算法誓篱,包括我在上文提到的那些。
- TensorFlow 相對(duì)會(huì)更底層一些鸥咖,它允許你自定義機(jī)器學(xué)習(xí)的算法燕鸽。
如果你剛開始機(jī)器學(xué)習(xí)的項(xiàng)目,我推薦你從 scikit-learn 開始啼辣。如果你開始遇到了些性能上的問題啊研,那么你要試一試 TensorFlow 了。
應(yīng)該怎么學(xué)習(xí)機(jī)器學(xué)習(xí)呢鸥拧?
機(jī)器學(xué)習(xí)的入門党远,我推薦 Stanford’s 和 Caltech’s 這兩門課程。
溫馨提示富弦,你首先要掌握些微積分和線性代數(shù)的基礎(chǔ)知識(shí)才能很好地理解這些課程中的內(nèi)容沟娱。
然后可從 Kaggle 上學(xué)習(xí)。人們競(jìng)相為這個(gè)網(wǎng)站上放出的問題設(shè)計(jì)機(jī)器學(xué)習(xí)算法腕柜。該網(wǎng)站也有很多非常好的入門教程济似。
關(guān)于數(shù)據(jù)分析和數(shù)據(jù)可視化呢?
為了有助于理解盏缤,我們先看個(gè)簡(jiǎn)單的例子砰蠢。
假設(shè)你作為一名數(shù)據(jù)分析師在一家電商公司工作,你也許會(huì)畫出這樣一張柱狀圖:
從這張圖我們可以看出唉铜,在周日男人買了400多件商品台舱,女人買了大概350件商品。
關(guān)于男女購(gòu)買數(shù)量的不同潭流,作為數(shù)據(jù)分析師的你可能會(huì)提出一些可能的解釋竞惋。
一個(gè)很可能的解釋是這件商品在男人中間更受歡迎柜去。另一種可能的解釋是數(shù)據(jù)樣本太小,這種差異只是偶然造成的拆宛。還有的可能的解釋是嗓奢,男人往往只在星期天出于某種原因才購(gòu)買這種商品。
為了搞清楚這些解釋哪個(gè)是正確的胰挑,你也許要畫另外一張圖表:
與上張只看到周日數(shù)據(jù)的圖表相比蔓罚,這次我們看到了一整周的數(shù)據(jù)。如你所見瞻颂,從這張圖上看豺谈,每天的購(gòu)買關(guān)系相當(dāng)一致。
從這個(gè)小小的分析中贡这,你可能會(huì)得出結(jié)論茬末,對(duì)于這種差異最令人信服的解釋是,這種產(chǎn)品在男人中比女人更受歡迎盖矫。
反轉(zhuǎn)一下丽惭,如果你看到的是這樣一張圖表呢?
那么辈双,我們?cè)趺唇忉屩苋漳信?gòu)買量的不同责掏?
你可能會(huì)說(shuō),也許男人出于某種原因會(huì)在周日購(gòu)買更多的這種產(chǎn)品湃望』怀模或許,這僅僅是種巧合证芭。
所以瞳浦,這是一個(gè)簡(jiǎn)化的例子來(lái)說(shuō)明數(shù)據(jù)分析在現(xiàn)實(shí)世界中可能是什么樣子的。
我在谷歌和微軟時(shí)做的數(shù)據(jù)分析與該例非常相似 — 只是更復(fù)雜些罷了废士。我在谷歌使用 Python 叫潦,在微軟使用 JavaScript。
在這兩家公司我都用 SQL 從數(shù)據(jù)庫(kù)中取數(shù)官硝。然后我用 Python 和 Matplotlib(在谷歌)或者 JavaScript 和 D3(在微軟)對(duì)這些數(shù)據(jù)做分析和可視化矗蕊。
用 Python 進(jìn)行數(shù)據(jù)分析和數(shù)據(jù)可視化
Python 中最流行的數(shù)據(jù)可視化庫(kù)是 Matplotlib 。
它是一個(gè)非常好的選擇氢架,因?yàn)椋?/p>
- 它非常好上手傻咖。
- 很多其他的庫(kù)(如 seaborn)都依賴它進(jìn)行構(gòu)建,所以學(xué)會(huì) Matplotlib 將有助于之后其他庫(kù)的學(xué)習(xí)达箍。
如何開始學(xué)習(xí) Python 的數(shù)據(jù)分析和可視化没龙?
你應(yīng)該先學(xué)些基本的數(shù)據(jù)分析和可視化知識(shí)铺厨。而我在網(wǎng)上想找些這樣的學(xué)習(xí)資源時(shí)缎玫,我并沒找到硬纤。所以,我就自己錄制了些這樣的視頻:
作者自己錄的用 Python 和 Matplotlib 介紹數(shù)據(jù)分析和可視化的視頻:
https://youtu.be/a9UrKTVEeZA
在學(xué)完基本的數(shù)據(jù)分析和可視化之后赃磨,再在 Coursera 或 可汗學(xué)院 上學(xué)習(xí)些統(tǒng)計(jì)學(xué)的基本知識(shí)會(huì)同樣有幫助筝家。
寫腳本
什么是腳本?
腳本通常指一些小的程序邻辉,它們被用于做一些自動(dòng)化的事情溪王。
So, 讓我舉一個(gè)我個(gè)人的例子。
我曾經(jīng)在一家日本的初創(chuàng)工作工作值骇,公司有一個(gè)郵件響應(yīng)系統(tǒng)莹菱。我們用它回復(fù)顧客發(fā)給我們的郵件。
當(dāng)時(shí)我的一部分任務(wù)是計(jì)算包含某些關(guān)鍵字的郵件數(shù)量吱瘩,這樣我們就可以對(duì)收到的郵件進(jìn)行分析道伟。
當(dāng)時(shí)我們可以人工進(jìn)行這些處理,但我寫了一個(gè)簡(jiǎn)單的程序/腳本去自動(dòng)的完成它使碾。
關(guān)于嵌入式開發(fā)呢蜜徽?
對(duì)于嵌入式開發(fā)我沒太有經(jīng)驗(yàn),但是我知道 Python 可以和 Rasberry Pi 協(xié)同工作票摇,它似乎在硬件愛好者中是非常流行的應(yīng)用拘鞋。
關(guān)于游戲呢?
你能用一款叫 PyGame 的庫(kù)去開發(fā)游戲矢门,但它比較小眾盆色。但講真,你可以玩玩它颅和,要真去開發(fā)游戲還是別用它傅事。
我會(huì)推薦你基于 C# 的 Unity 引擎,它是非常流行的游戲引擎峡扩。它允許你基于多種平臺(tái)如 Mac,Windows, iOS 和 Android 來(lái)開發(fā)游戲蹭越。
關(guān)于桌面應(yīng)用呢?
Python 的 Tkinter 是可以開發(fā)教届,但它貌似同樣不是一個(gè)好但選擇响鹃。
與之相對(duì),Java, C#, C++ 都是做這方面都好手案训。
最近买置,一些公司開始用 JavaScript ???? 來(lái)開發(fā)桌面應(yīng)用。
例如强霎,Slack’s 的桌面應(yīng)用 就是基于 Electron (譯者注:其基于 JavaScript)忿项。
個(gè)人建議,如果你想開發(fā)一個(gè)桌面應(yīng)用,我推薦用 JavaScript 轩触。這讓你假如要開發(fā) Web 版時(shí)寞酿,很多代碼都可以重用。
最后脱柱,我其實(shí)也沒有桌面應(yīng)用的開發(fā)經(jīng)驗(yàn)伐弹,所以我哪兒說(shuō)的不對(duì),請(qǐng)留言加以指正榨为。
Python 3 還是 Python 2 惨好?
我推薦的是 Python 3,因?yàn)樵谶@個(gè)時(shí)間點(diǎn)随闺,它是更現(xiàn)代且更大眾的選擇日川。
最后,作者安利了很多自己的課程矩乐,就不做翻譯啦逗鸣。。绰精。
另外撒璧,Python 也非常適合做網(wǎng)絡(luò)爬蟲,而作者沒有提及笨使。