译者注:
原文做者曾在谷歌、微软工做,并从事数据可视化相关工做,文章内容来自于真实工做经验分享。文章较长,适合和笔者同样有意向学习Python
的同窗阅读。html
若是你准备开始学习Python
或者你已经开始了学习Python
,那么,你肯能会问本身: “我用Python
究竟能作些什么?”前端
嗯,这是一个棘手的问题,由于Python有不少应用方向。但随着时间的推移,我发现Python有3个主要应用方向:python
让咱们依次来谈谈每个。git
最近基于Python
的Web框架(如Django
和Flask
)在Web开发中变得很是流行。算法
这些Web框架可帮助你在Python
中建立服务器端代码(后端代码)。 这是在你的服务器上运行的代码,而不是用户的设备和浏览器(前端代码)。 若是你不熟悉后端代码和前端代码之间的区别,请参阅下面的脚注。数据库
这是由于Web框架使构建通用后端逻辑变得更容易。 这包括将不一样的URL映射到Python代码块,处理数据库以及生成用户在其浏览器上看到的HTML文件。django
Django
和Flask
是两个最流行的Python Web框架。 若是你刚入门,我建议你使用其中一个。 Django
和Flask
有什么区别? Gareth Dwyer有一篇关于这个主题的优秀文章,因此我在这里引用它:flask
<引用 开始>小程序
主要对比:后端
Flask
提供简单,灵活和细粒度控制。 它是不受欢迎的(它可让你决定如何实现它)。 Django
提供了一个一应俱全的体验:你能够得到管理面板,数据库接口,ORM
[对象关系映射]以及开箱即用的应用程序和项目的目录结构。
你应该选择:
Flask
,若是你专一于体验和学习机会,或者你想要更多地控制使用哪些组件(例如你想要使用哪些数据库以及如何与它们进行交互)。
Django
,若是你专一于最终产品。特别是若是你正在开发一个直接的应用程序,如新闻网站,电子商店或博客,你但愿老是有一种明显的作事方式。
</引用 结束>
换句话说,若是你是初学者,Flask
多是一个更好的选择,由于它有更少的组件须要处理。 此外,若是你想要更多自定义,Flask
是更好的选择。
另外一方面,若是你想要直接构建一些东西,Django
可能会让你更快地到达那里。
如今,若是你想学习Django
,我推荐名为《Django for Beginners》的书。 你能够在这里找到它。
你还能够在此处找到该书的免费样本章节。
好的,咱们来看下一个主题吧!
首先,让咱们回顾一下机器学习是什么
我认为解释机器学习的最佳方法是给你一个简单的例子。 假设你想要开发一个程序来自动检测图片中的内容。
所以,以下图(图1),你但愿程序识别出它是一只狗。
鉴于下面的另外一个(图2),你但愿程序识别它是一个桌子。
你可能会说,好吧,我能够写一些代码来作到这一点。 例如,若是图片中有不少浅棕色像素,那么咱们能够说它是一只狗。
或者,你能够弄清楚如何检测图片中的边缘。 而后,你可能会说,若是有不少直边,那么它就是一张桌子。
可是,这种方法很快变得棘手。 若是照片中有一只没有棕色头发的白狗怎么办? 若是图片只显示桌子的圆形部分怎么办?
这就是机器学习的用武之地。
机器学习一般实现一种, 自动检测给定输入模式的算法。
你能够给机器学习算法,给1000张狗的照片和1000张桌子的照片。 而后,它将学习狗和桌子之间的区别。 当你给它一张狗或桌子的新图片时,它将可以识别它是哪个。
我认为这有点相似于婴儿学习新事物的方式。 宝宝怎么知道一件事看起来像狗,另外一件看起来像一张桌子? 可能来自一堆例子。
你可能没有明确地告诉婴儿,“若是有毛茸茸的东西,有浅棕色的头发,那么它多是一只狗。”
你可能会说,“那是一只狗。 这也是一只狗。 这是一张桌子。 那个也是一张桌子。“
机器学习算法的工做方式大体相同。
你能够将相同的想法应用于:
YouTube
,亚马逊和Netflix
)等其余场景。
你可能据说过的流行的机器学习算法包括:
你可使用上述任何算法来解决我以前解释过的图片标注问题。
Python
针对机器学习有流行的机器学习库和Python框架。
其中两个最受欢迎的是scikit-learn和TensorFlow。
scikit-learn附带了一些内置的更流行的机器学习算法。 我在上面提到了其中一些。 TensorFlow更像是一个低级库,容许你构建自定义机器学习算法。
若是你刚刚开始使用机器学习项目,我建议你先从scikit-learn开始。
若是你开始遇到效率问题,那么我会开始研究TensorFlow。
要学习机器学习基础知识,我会推荐斯坦福大学或加州理工学院的机器学习课程。
请注意,你须要微积分和线性代数的基本知识才能理解这些课程中的一些材料。
而后,我会用Kaggle练习你从其中一门课程中学到的东西。 这是一我的们竞争为特定问题构建最佳机器学习算法的网站。 他们也为初学者提供了很好的教程。
为了帮助你了解这些多是什么样子,让我在这里给你一个简单的例子。
假设你正在为一家在线销售某些产品的公司工做。
而后,做为数据分析师,你能够绘制这样的条形图。
从这张图中,咱们能够看出,男性购买了超过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,由于它更现代,并且在这一点上它是一个更受欢迎的选项。
脚注:关于后端代码与前端代码的说明(以防你不熟悉这些条款):
Instagram
这样的东西。而后,你须要为要支持的每种类型的设备建立前端代码。
你可使用,例如:
适用于iOS的Swift 适用于Android的Java 用于Web浏览器的JavaScript 每组代码都将在每种类型的设备/浏览器上运行。这将是一组代码,用于肯定应用程序的布局如何,单击按钮时的外观等等。
可是,你仍然须要可以存储用户的信息和照片。你须要将它们存储在服务器上,而不只仅存储在用户的设备上,以便每一个用户的关注者均可以查看他/她的照片。
这是后端代码/服务器端代码的用武之地。你须要编写一些后端代码来执行如下操做:
跟踪谁在关注谁 压缩照片,以避免占用太多存储空间 在发现功能中向每一个用户推荐照片和新账户 所以,这是后端代码和前端代码之间的区别。
顺便说一下,Python并非编写后端/服务器端代码的惟一好选择。还有许多其余流行的选择,包括Node.js
,它基于JavaScript。