[译] Python 都能干些啥?来聊聊它的 3 个主要用途

原文请戳《What exactly can you do with Python? Here are Python’s 3 main applications.》

Python 大法好

如果你想学 Python — 或者你最近已在学习它 — 那么你或许应该问下自己:— 我用 Python 都能做些什么呢?
好吧,这还真是个蛮难回答的问题,因为 Python 能做的事儿真是太多了啦!
过去一段时间内,我观察到 Python 有这么三个最主要的用途:

  • Web 开发
  • 数据科学 — 包括机器学习,数据分析和数据可视化
  • 写脚本

那我们就依次聊聊这三项。

Web 开发

在 Web 开发中,像 DjangoFlask 这类基于 Python 的 Web 框架最近变得非常流行。
这些框架帮助你用 Python 创建服务端(后台)的代码。

等等,我们为什么需要 Web 框架?

这是因为用 Web 框架能很容易的构建起后台开发的通用逻辑,如:将 Python 的代码块与 URLs 匹配,与数据库的交互,创建 HTML 文件供浏览器读取等等。

那我应该用哪个 Python 的 Web 框架

Django 和 Flask 是 Python 最流行的两个 Web 框架。如果你是新手,我推荐你任选其一。

Django 和 Flask 有什么区别?

这个问题在 Gareth Dwyer 的《Flask vs. Django: Why Flask Might Be Better》上已作了非常好的回答,我引用其中的部分:

主要对比

  • Flask 是简单、灵活、渐进性的一个框架,这给了开发者很大的自由度。
  • Django 则包罗万象了:它提供控制面板、数据库接口、ORM(object-realtional mapping) 和“开箱即用”目录结构。
    译者注:Flask vs Django 很像前端中 React/Vue vs Angular 或 Koa vs Express。Flask 轻量化、模块化且自由灵活,Django 一应俱全且概念较多。

你该怎么选择:

  • Flask,如果你关注经验的积累和学习的机会,或者你对各组件想有更大的控制权(如数据库和与其交互方式的选择)。
  • Django,如果你想快速出活,尤其是当产品特性单一,如新闻网站、电子商城或者博客,并且你希望它们总是特性单一,逻辑简单。

如果你刚入门,Flask 或许是更好的选择,因为它本身只有几个模块就能跑起来。另外,如果你对项目有更多的定制化需求,Flask 是更好的选择。
另一方面,如果你的项目简单、直接,Django 能让你快速开发。
现在,如果你准备学习 Django,我推荐你看 《Django for Beginners》,你也能从这儿看一些这本书的免费章节。
Okay,让我们进行下一趴!

数据科学 — 包括机器学习,数据分析和数据可视化

首先,什么是机器学习?

我认为解释什么是机器学习的最好方式是给出一个简单的例子。
假设你想开发一个能自动识别图片内容的程序。
比如,你想让你的程序识别出下图(Picture 1)是一张狗🐶。


Picture 1

再甩出另一张图片(Picture 2),你想让你的程序识别出这是一张桌子。


Picture 2

你也许会说,欧耶,我能写出代码来实现这事儿。比如,可以判断若图片中出现了一些亮棕色,就可以认为图片中有条狗🐶。
或者,你发明了检测出图片中物体边缘的算法。然后,你就可以判断若图中出现了很多直直的物体边缘,就可以认为图中有张桌子。
然而,这种方法很快会变得非常棘手。如果图中的狗不是棕毛怎么办?如果图中是张圆桌怎么办?

这时就轮到机器学习出场啦~
机器学习的算法能自动提取出输入的一系列信息的共同特征。

我们可以向机器学习算法输入1000张狗的图片和1000张桌子的图片。然后,它从中学习🐶和桌子的区别。当你再给出一张🐶或桌子的图片时,它便能做出识别。

我觉得这点非常像婴儿的学习方式。婴儿如何学习什么是狗什么是桌子呢?一般是从一系列的生活场景中学习。

你一般不会对婴儿说:“如果某物是毛茸茸的或有亮棕毛,那么它可能是狗”。
你一般会说:“看这是狗。那是狗。或者你看,这是桌子,那个也是桌子”...

机器学习算法和教育婴儿很像。

这个思路你可应用于:

  • 推荐系统(像 YouTuBe, Amazon, 和 Netflix)
  • 面部识别
  • 声音识别

和其他一系列类似的应用。

其中一些流行的机器学习算法包括:

  • 神经网络
  • 深度学习
  • 支持向量机
  • 随即森林法则

你可以使用上面的任何算法来解决我前面提到过的图片标记问题。

Python 的机器学习

Python 有许多流行的机器学习的库和框架。
其中最流程的两个是 scikit-learnTensorFlow

  • scikit-learn 中内置的很多流行的机器学习算法,包括我在上文提到的那些。
  • TensorFlow 相对会更底层一些,它允许你自定义机器学习的算法。

如果你刚开始机器学习的项目,我推荐你从 scikit-learn 开始。如果你开始遇到了些性能上的问题,那么你要试一试 TensorFlow 了。

应该怎么学习机器学习呢?

机器学习的入门,我推荐 Stanford’sCaltech’s 这两门课程。
温馨提示,你首先要掌握些微积分和线性代数的基础知识才能很好地理解这些课程中的内容。

然后可从 Kaggle 上学习。人们竞相为这个网站上放出的问题设计机器学习算法。该网站也有很多非常好的入门教程。

关于数据分析和数据可视化呢?

为了有助于理解,我们先看个简单的例子。
假设你作为一名数据分析师在一家电商公司工作,你也许会画出这样一张柱状图:


Bar Chart 1 — generated with Python

从这张图我们可以看出,在周日男人买了400多件商品,女人买了大概350件商品。

关于男女购买数量的不同,作为数据分析师的你可能会提出一些可能的解释。

一个很可能的解释是这件商品在男人中间更受欢迎。另一种可能的解释是数据样本太小,这种差异只是偶然造成的。还有的可能的解释是,男人往往只在星期天出于某种原因才购买这种商品。

为了搞清楚这些解释哪个是正确的,你也许要画另外一张图表:


Line Chart 1 — generated with Python

与上张只看到周日数据的图表相比,这次我们看到了一整周的数据。如你所见,从这张图上看,每天的购买关系相当一致。

从这个小小的分析中,你可能会得出结论,对于这种差异最令人信服的解释是,这种产品在男人中比女人更受欢迎。

反转一下,如果你看到的是这样一张图表呢?

Line Chart 2 — also generated with Python

那么,我们怎么解释周日男女购买量的不同?

你可能会说,也许男人出于某种原因会在周日购买更多的这种产品。或许,这仅仅是种巧合。

所以,这是一个简化的例子来说明数据分析在现实世界中可能是什么样子的。

我在谷歌和微软时做的数据分析与该例非常相似 — 只是更复杂些罢了。我在谷歌使用 Python ,在微软使用 JavaScript。

在这两家公司我都用 SQL 从数据库中取数。然后我用 Python 和 Matplotlib(在谷歌)或者 JavaScript 和 D3(在微软)对这些数据做分析和可视化。

用 Python 进行数据分析和数据可视化

Python 中最流行的数据可视化库是 Matplotlib

它是一个非常好的选择,因为:

  • 它非常好上手。
  • 很多其他的库(如 seaborn)都依赖它进行构建,所以学会 Matplotlib 将有助于之后其他库的学习。

如何开始学习 Python 的数据分析和可视化?

你应该先学些基本的数据分析和可视化知识。而我在网上想找些这样的学习资源时,我并没找到。所以,我就自己录制了些这样的视频:

作者自己录的用 Python 和 Matplotlib 介绍数据分析和可视化的视频:
https://youtu.be/a9UrKTVEeZA

在学完基本的数据分析和可视化之后,再在 Coursera 或 可汗学院 上学习些统计学的基本知识会同样有帮助。

写脚本

什么是脚本?

脚本通常指一些小的程序,它们被用于做一些自动化的事情。

So, 让我举一个我个人的例子。

我曾经在一家日本的初创工作工作,公司有一个邮件响应系统。我们用它回复顾客发给我们的邮件。

当时我的一部分任务是计算包含某些关键字的邮件数量,这样我们就可以对收到的邮件进行分析。

当时我们可以人工进行这些处理,但我写了一个简单的程序/脚本去自动的完成它。

关于嵌入式开发呢?

对于嵌入式开发我没太有经验,但是我知道 Python 可以和 Rasberry Pi 协同工作,它似乎在硬件爱好者中是非常流行的应用。

关于游戏呢?

你能用一款叫 PyGame 的库去开发游戏,但它比较小众。但讲真,你可以玩玩它,要真去开发游戏还是别用它。

我会推荐你基于 C# 的 Unity 引擎,它是非常流行的游戏引擎。它允许你基于多种平台如 Mac,Windows, iOS 和 Android 来开发游戏。

关于桌面应用呢?

Python 的 Tkinter 是可以开发,但它貌似同样不是一个好但选择。

与之相对,Java, C#, C++ 都是做这方面都好手。

最近,一些公司开始用 JavaScript 🎉🎉 来开发桌面应用。

例如,Slack’s 的桌面应用 就是基于 Electron (译者注:其基于 JavaScript)。

个人建议,如果你想开发一个桌面应用,我推荐用 JavaScript 。这让你假如要开发 Web 版时,很多代码都可以重用。

最后,我其实也没有桌面应用的开发经验,所以我哪儿说的不对,请留言加以指正。

Python 3 还是 Python 2 ?

我推荐的是 Python 3,因为在这个时间点,它是更现代且更大众的选择。


最后,作者安利了很多自己的课程,就不做翻译啦。。。

另外,Python 也非常适合做网络爬虫,而作者没有提及。

推荐阅读更多精彩内容