如果你想学习 Python,或者如果你最近开始学习 Python,你也许会这么问自己:
“我到底可以使用 Python 做什么?”
这是一个棘手的问题去回答,因为已经有许多 Python 的程序。
但是随着时间的迁移,我发现 Python 有三个主要的流行应用程序:
- Web 开发
- 数据科学 - 包括机器学习,数据分析和数据可视化
- 脚本编写
我们依次讨论它们。
Web开发
基于 Python 的 web 框架(比如 Django 和 Flask )最近变得非常流行。
这些 web 框架帮助你使用 Python 创建服务器端代码(后台代码),即运行在你服务器上的代码,相对于运行在用户的设备、浏览器上(前端代码)。如果你不熟悉后端代码和前端代码的区别,请参考下面的脚注。
但是等一下,为什么我需要一个 web 框架呢?
那是因为 web 框架在构建共同后端逻辑非常方便,包括映射不同的 URLS 到 Python 代码块,处理数据库和产生用户在浏览器中看到的 HTML 文件。
我应该用哪一个 web 框架?
Django 和 Flask 是两个最受欢迎的 Python web 框架。如果你刚刚入门 Python,我建议你使用他们其一。
Django 和 Flask 之间的区别是什么?
这里有一篇 Gareth Dwyer 编写的关于这个问题的出色文章,所以我在这里引用它:
<开始引用>
主要对比:
- Flask 提供了简单性,灵活性和细粒度的控制。It is unopinionated (它让你可以决定你想要实现的东西)。
- Django 提供全方位的体验:你可以开箱即用式地获得管理面板、数据库接口、ORM [对象关系映射]以及目录结构。
你可能应该选择:
- Flask,如果你专注于体验和学习机会,或者如果你想要去控制更多使用的组件(比如你想要使用哪些数据库和你想要如何与它们交互)。
- Django,如果你专注于最终产品。特别是如果你正在开发一个简单易用的应用比如新闻网站、电子商店、博客,并且你想要有一种简单,显而易见的方法去搭建这个应用。
<结束引用>
换一种说法,如果你是一个初学者,Flask 可能是更好的选择。因为它需要处理的组件更少。同时,如果你想要更多的定制化,Flask 是更好的选择。
在另一方面,如果你正在寻找简单易用的方式构建程序,Django 将会让你更快完成。
现在如果你想学习 Django,我推荐你一本书《Django for Beginners》。你可以从这里找到它。
你也可以找到免费的章节案例在这本书里。
好的,让我们开始下一个的话题。
数据科学 - 包括机器学习,数据分析和数据可视化
首先,回顾下机器学习是什么 。
我认为最好的方式解释什么是机器学习,就是给你一个简单的样例。
假如你想要开发一个程序去自动检测数图片里面的内容。
你想要你的程序去识别这是一只狗。
另一张图片,你想要你的程序去识别这是一张桌子。
你或许会说,好的,我可以写一些代码去完成这个功能。比如,如果图片中有很多白色像素,那么我们可以说这里是一只狗。
或者,你可以找出如何检测图片中的边缘。然后,你可能会说,如果有很多直边,那就是一张桌子。
然而,这种方法很快就会变得棘手。如果图片里有一只白狗没有棕色毛发呢?如果图片只展示桌子的圆形部分呢?
这就是机器学习的用武之地。
机器学习通常实现一种算法,可以自动检测给定的输入模型。
你可以传入1000张狗的图片和1000张桌子的图片到机器学习算法中。之后算法将会去学习狗和桌子之间的差异。之后你传入一张新的狗或者桌子的图片,算法将能够识别出它属于哪一个。
我认为这个机器学习算法就是某种与婴儿学习新鲜事物具有相似性。婴儿是如何学习到一个事物是狗还是桌子呢?可能是从一堆样例中学习到的。
你应该不会去明确告诉一个婴儿:“如果某个动物毛茸茸的并且有着浅棕色毛发,那么它就很可能是一只狗。”;
你可能会这么说:“这是一只狗,这也是一只狗。并且这是一张桌子,这也是一张桌子。”
机器学习算法的工作方式类似这样。
你可以将相同的想方法应用于:
- 推荐系统(例如 YouTube、Amazon、Netflix)
- 人脸识别
- 语音识别
以及其他应用程序。
你可能听过的流行的机器学习算法包括:
- 神经网络
- 深度学习
- 支持向量机
- 随机森林
你可以使用上门任意一种算法解决我之前解释的图片标记问题。
适用于机器学习的 Python
有很多 Python 语言的机器学习类库和框架。
两个最流行的框架是 scikit-learn 和 TensorFlow。
- scikit-learn 内置了一些更加流行的机器学习算法。我在上面提到了其中一些。
- TensorFlow 更像是一个低级别类库,它可以让你自定义机器学习算法。
如果你刚刚开始进行机器学习的项目,我将会建议你首先使用 scikit-learn。如果你开始遇到效率问题,那么我将会建议你开始研究 TensorFlow。
我应该如何学习机器学习?
为了学习机器学习的基础,我将会推荐斯坦福大学的或者加州理工学院的机器学习课程。
请注意,你需要微积分和线性代数的基本知识才能理解这些课程中的某些资料。
之后我将使用 Kaggle 去训练你从其中一门课程中学习到的知识。这是一个人们可以对于一个特定问题的最好的机器学习算法进行竞赛的网站。他们也为初学者提供不错的课程。
关于数据分析和数据可视化呢?
为了帮助你理解这些知识点是什么,让我给你几个简单案例。
假设你在一家在线销售某些产品的公司工作。
作为数据分析师,你可能回绘制一个条形图。
从这幅图我们可以得知,在这个特定的星期日,男性购买了400多种产品,女性购买了350多种产品。
作为数据分析师,你可能会针对这种差异提出一些可能的解释。
一个明显的解释是这个产品对于男性更具有吸引力。另一个可能的解释是样本数量太小了,并且这种差异是具有偶然性的。还有另一个可能的解释是,由于某种原因男人倾向于只在星期日购买更多该产品。
为了了解这些解释哪些事正确的,你可能会绘制另一些图表比如下面这个。
我们将查看整整一周的数据,而不是仅显示周日的数据。正如你说看到的,从这个线形图,我们可以看到这种差异在不同的日子是相当一致的。
从这个小分析,你也许会得出如下结论,关于这种差异的最令人信服的解释是,相较于女性,该产品更受男性欢迎。
另一方面,如果你看到如下另一个图表呢?
线形图2 - 也是由Python生成的
那么,你怎么解释周日的差异?
你也许会说,男人可能出于某个原因倾向于在周日购买这个产品。或者,这也许只是一种巧合,男人购买更多产品在周日。
因此,这是数据分析在现实世界中的简化示例。
我在 Google 和 Microsoft 工作时所做的数据分析工作与该示例非常相似,只是更为复杂。我实际上在 Google 公司使用 Python 去处理这种分析问题,然而在 Microsoft 公司我使用 JavaScript 技术。
我在两家公司都是用SQL从数据库中抽取数据。之后,我将会使用 Python 和 Matplotlib (在 Google 公司)或者 JavaScript和D3.js(在 Microsoft 公司)去可视化和分析数据。
使用Python做数据分析和可视化
最流行的数据可视化类库是 Matplotlib。
这是一个很好的入门库,因为:
- 入门简单
- 其他一些库,例如 [seaborn] 9 也以此为基础。因此,学习 Matplotlib 将有助于你今后学习这些其他库。
我应该怎么学习使用 Python 进行数据分析和可视化?
你首先应该学习数据分析和可视化的基础知识。当我在网上寻找好的资源时,找不到任何资源。因此,我最终制作了有关此话题的 YouTube 视频:
我还最终完成了关于 Pluralsight 的主题的完整课程,你可以通过注册 10 天的免费试用期来免费获取。
我建议这两种方式都采取。
在学习了数据分析和可视化的基础知识之后,从 Coursera 和 Khan Academy 等网站学习统计基础知识也将有所帮助。
脚本编写
什么是脚本编写?
脚本编写通常指的是编写自动化简单任务的小型程序。
所以,根据我个人经验给你一个参考样例。
我曾经在一家日本的拥有邮件维护系统的公司工作过。我们用这个系统来回答客户通过电子邮件发送给我们的问题。
当我在那工作的时候,我的任务是计算包含某些关键词的邮件个数,以便我们可以分析我们收到的邮件。
我们本来可以手动完成,但是我编写了一个简单的程序/简单的脚本去自动完成该任务。
实际上我们使用 Ruby 作为程序后端,但是 Python 也可以作为这个任务的不错的语言。Python 很适合这种任务,主要是因为它具有相对简单的语法并且易于编写。
关于嵌入式应用呢?
我并不是嵌入式应用专家,但是我知道 Python 可与 Raspberry Pi 一起使用。Raspberry Pi 似乎在硬件爱好者中很流行。
关于游戏编程呢?
你可以使用 PyGame 的库来开发游戏,但它不是最受欢迎的游戏引擎。你可以使用它来构建一个喜好的项目,但是如果你想正式学习游戏开发,我个人不会建议选择它。
相反,我建议使用 Unity C#(最受欢迎的游戏引擎之一)入门。你可以使用它构建很多平台支持的游戏,包括 Mac、Windows、iOS 以及 Android。
关于桌面应用呢?
你可以使用功能 Python 的 Tkinter 模块,但是它并不是最受欢迎的选择。
取而代之的是,似乎 Java,C#和C ++ 之类的语言更受欢迎。
最近一些公司也开始使用 JavaScript 来创建桌面应用。
例如,Slack 公司的桌面应用是由 Electron 构建的。Electron 允许你使用 JavaScript 构建桌面应用。
对于我个人而言,如果我正在构建一个桌面应用,我将会选择使用 JavaScript 语言。如果你使用 JavaScript 的话,它可以让你重用Web版本中的某些代码。
然后,我并不是一个桌面应用的专家,所以请给我留言,告诉我你支持还是反对我的观点。
Python 3 还是 Python 2?
我建议使用 Python 3,因为它是较新版本,并且是目前最受欢迎的选择。
脚注:关于后端代码与前端代码的注释(以防你不熟悉这些术语):
假设你想制作类似 Instagram 的产品。
你需要去创建你想要支持的每一个类型设备的前端代码。
你或许会使用如下技术,比如:
- Swift for iOS
- Java for Android
- JavaScript for web browsers
每组代码将在各自类型的设备/浏览器上运行。这将是一组用于确定应用程序的布局、单击时的按钮样式等的代码。
然而,你仍然需要能够存储用户的信息和图片。你将会想要存储这些信息到你的服务器上,而不仅仅是存储到你的用户的设备上,以至于可以让每个用户的关注者可以访问到他/她的图片。
这就是后端代码/服务器端代码出现的地方。你将会需要写一些后台代码去完成下面的事情:
- 追踪谁关注了谁
- 压缩照片以免占用太多存储空间
- 在 discovery 功能中向每个用户推荐照片和新用户
所以,这就是前端和后台代码之间的差异。
顺便说一下,Python 并不是编写后端/服务器端代码的唯一的选择。还有很多流行的选择,包括基于 JavaScript 的 Node.js。
喜欢这篇文章吗? 然后,你可能也喜欢我的 YouTube 频道。
我在 YouTube 有一个编程教育频道,叫作 CS Dojo,有 440,000 多名订阅者,在这里我可以创作更多类似本文的内容。
非常感谢你阅读我的文章!
原文:What exactly can you do with Python? Here are Python's 3 main applications,作者:YK Sugi