专栏首页玉树芝兰如何用纯 Python 写 Web 应用?

如何用纯 Python 写 Web 应用?

不用学前端编程,你就能用 Python 简单高效写出漂亮的交互式 Web 应用,将你的数据分析成果立即展示给团队和客户。

1

痛点

从我开始折腾数据分析工具的那一天,就没有想明白一件事儿——我打算把数据分析的成果做成一个 Web 应用,为什么这么难?

我需要的核心功能,无非是在网页上接收用户输入,然后做分析处理,把分析结果反馈给用户,完事儿。

可是这谈何容易?

很多人都会微笑着告诉你,想做 Web 应用?这得学前端编程, HTML + Javascript 了解一下吧!

什么?你还需要在后台做数据分析?那你就得学 Web 框架了。

你说喜欢 Python ?那就学个 Django 或者 Flask 好了。

我也不是没有看过 Django 和 Flask 的教程,还曾经付费学习过。光是 Django 配置环境,就够写一章出来。

作为学习的中间成果,我还写了这篇《如何用 Python 做 Web 开发?——Django 环境配置》分享给你。

真正让我痛苦的,不是 Web 框架的操作有多么琐碎,而是教程里的案例,为什么都那么奇怪?

几乎所有的教程,都指向一个目标:

来,我教你做一个 blog 出来!

我用你教?!

我要是想用 blog ,可以直接注册一个免费的啊!为什么我要自己开发个 blog 出来?

为什么你就不能告诉我,该怎么把我目前的数据分析结果,迅速挪到 Web 页面上,跟用户实时交互?

虽然二者的结果,都是做一个 Web 应用出来。但是,它们关注的焦点,需要的功能,能一样吗?

但是人家写书和做教程的人,就是不疾不徐,坚持一定要教会你,如何做一个 blog 出来……

你不学,又能怎么办呢?你难道想只凭 Python 脚本,就做一个 Web 应用出来?

还真别说,最近,这个事儿从幻想,变成了现实。

2

样例

这不,我就用纯 Python 脚本写了个 Web 应用。

我编写的代码里,没有一丝半毫的 Web 框架,Javascript,甚至是 HTML 。

这玩意儿能用吗?

你自己来试试看。

请你打开浏览器,输入以下链接:

https://helloworld-streamlit.herokuapp.com/

你会看到下面的初始化界面。

初始化完毕之后,页面会分成左右两栏。左面是两个下拉候选框,分别让你指定需要分析的数据范围。

上面一个,是事件类型;

下面一个,是事件发生归属地。

如果你看过《如何用 Python 和循环神经网络预测严重交通拥堵?》,应该对这个数据集很熟悉。

只不过,当时我们更注重的,是用循环神经网络搭建了一个严重拥堵事件预测模型。

而今天,我们是要进行探索性数据分析,也就是根据我们感兴趣的目标,对数据进行整理操作,然后可视化显示。

选定之后,你会看到右侧提示两个信息:

  • 你筛选之后,数据框包含行数;
  • 在层叠地图上的可视化结果。

怎么样?

麻雀虽小,五脏俱全。

虽然咱们这个 Web 应用很简单,不过交互分析该有的功能和流程,基本上都涵盖了。

你可能会问:

王老师,编这么一个应用出来,不简单吧?

让我带你到幕后,看看是不是很复杂。

3

幕后

我把这个应用的全部源代码,都为你存储到了 Github 上。请你访问这个网址获取。

可以看到,一共包含了 4 个文件。

有意思的是,其中 3 个,包括:

  • Procfile
  • setup.sh
  • requirements.txt

都只是部署到远程服务器时,需要用到的配置文件而已。

也就是说,只有最后一个 helloworld.py 是主角,它包含了实现咱们全部交互式数据分析功能的 Python 脚本文件。

这代码,少说也得有几百行吧?

别担心,打开来看看:

上面这张截图,就已经包含了实现交互数据分析功能的全部代码。

神奇吧?

4

解读

这么短的代码,为什么能有如此强大的功能?

这是因为它背后使用的一个软件包,叫做 streamlit 。

它是干什么用的?

一言以蔽之,给你赋能,让你能够不去操心什么前端后端。只写 Python ,只关注功能,你就能写出一个交互式 Web 应用出来。

当然,既然最后是 Web 应用,那么实际上前后端的功能都是齐备的。

只不过,这些交由 Streamlit 来帮你费心操办。你根本不用管。

5

爆发

为什么会有人做了这么一款神器出来?

原因很简单,咱们前面提到的痛点,是大伙儿都有的。

咱们这些麻瓜(Muggle),遇到痛点只能忍着。

但是真正的魔法师(优秀程序员),是忍不了的。

在这段来自 PyData LA 2019 的视频里,Streamlit 的 CEO Adrien Treuille 谈及了他在数据智能企业中,长期遭遇的痛点。

最大的痛点,就是数据科学家训练好机器学习模型后,需要验证效果,和用户反馈沟通。

但是,做机器学习的工程师本身,并不掌握这一整套的工具栈。

所以,就得在把全部的数据分析和模型训练工作完成后,把这东西移交给一个工具制作团队。

人家做完以后,就告诉数据科学团队说,做好了。但是注意,现在处于需求冻结阶段。这个应用你们可以随便用,只是别乱改。改坏了我们管不了。因为最近两个月,我们还得给其他若干数据分析团队做 app 。大概几个月以后,我们又能回来帮助你们了……

Adrien Treuille 很敏锐地捕捉到了这个长期痛点,于是在 2018 年, 创立了 streamlit 。

目标很简单,给数据科学团队提供简单的工具,让他们使用已经掌握的 Python 编程技能,就能直接做 Web 应用。

什么“等上两三个月不许改”?!你们自己慢慢儿玩儿去吧,我们想怎么改,就怎么改!

至于做出来的东西嘛,可以是这样的:

6

资源

看到这里,是不是心动了?也打算学习一下 Streamlit ?

没问题,我前面给你提供的样例,就在 github 上,你可以直接查看源码。

注意因为数据比较大,有接近 300 MB,github 免费空间放不下,所以我存到了云盘上。微信公众号后台回复“dfw”,就能看到下载链接。

如果你希望重现这个小应用,并且一步步学习掌握 Streamlit 的基础知识和技能,我也已经为你写好了一份手把手的教程。

它不仅教你如何设置环境,安装工具,写作代码,甚至连如何免费部署到 heroku 平台,让用户使用,都毫无保留地教给了你。

那篇文章,我用于参加少数派年度征文活动,所以就不能全文展示在这里了。文末我会给你相关链接。

读完以后,如果你觉得有收获,欢迎在少数派平台上帮我点个赞。

7

思考

尝试过之后,你应该不难发现,Streamlit 给你带来了什么。

如果你学过 Javascript 和 Flask, Django 等 Web 应用开发技术,Streamlit 可以加快你的 Web 应用开发与测试进程。

如果你还没有学过上述技术, Streamlit 可以给你赋能,让你一下子有了把数据分析结果变成产品的能力。

给你讲点儿更激进的。

有人已经希望能用它替代掉 Flask 用于产品发布了。

还有人说,将来写技术文档,也应该充分使用 Streamlit 。

甚至,还把它比作了数据科学界的 iPhone 。

这里,它是借喻 iPhone 开启智能手机时代,说明 Streamlit 的划时代性。

我不希望你也变得如此激进。

因为这里提到的每一种功用,现在还都有非常专业的工具做的更好,而且新的工具也在不断涌现。

例如说,我们在多个教程中一直使用 Jupyter Notebook 。

现在凭借 Voila 扩展的加持,你也可以很轻松地把 Jupyter Notebook 变成 Web app ,而且可以免费运行在 mybinder 上面

但是,你可以看到,一个新的工具,以一种简单,而不是更繁复的办法,解决一个功能痛点,是一件多么令人欣喜的事儿。

看了这篇文章,可能会给你一种误解,似乎 JavaScript 为代表的前端编程技术,再也不需要学了。

其实不是这样的。

可以想象,开发门槛降低以后,将来会有更多的人使用 Python 来做 Web 应用。

用 Streamlit 这样的方法,他们只是开发出了一个原型。

要是想打造精品,就必须精细调控很多细节。

这时候, 如果你精通 Javascript ,那你潜在的合作对象一下子就多了起来,你掌握的这门技术,也就有了更大的价值。

还记得吗?我不止一次给你强调过,比起一个工具自身的能力来,协作网络更重要。忘了的话,记得复习《学 Python ,能提升你的竞争力吗?》。

这就好像印刷术的发明,不是让会写字这件事儿变得失去价值,而是全社会都增大了对好作品的渴求。深刻的思考,加上有效的文字表达,会让你生存得更好。

当然,如果你不希望精通写作技艺,只是想做一个抄书匠糊口。那么印刷术就可能会替代你的工作,结果就不那么美妙了。

8

小结

这篇文章,我为你介绍了 Streamlit 这款有趣的工具。希望你读过之后,掌握了以下知识点:

  • 借助 Streamlit ,你可以用纯 Python 编制 Web 应用;
  • 学 Web 设计依然很有前途,因为你的潜在合作群体正在迅速扩大;
  • 不要惹魔法师(优秀程序员)。他们的痛点需求会转化成无尽的战斗力,兴许会直接替掉你的日常工作。

9

福利

在教程中,你已经看到了,为了部署你的应用到 Heroku 等平台,你需要告诉服务端,安装哪些 Python 依赖软件包,也就是制作一个 requirements.txt

在咱们这篇教程中,requirements.txt 比较简单,就像是这个样子:

可以看到,除了软件包名称,你还需要指定其版本,以避免不同版本之间不兼容,或者运行结果出现差别。

然而,如果你的程序里面,需要引入很多软件包和模块,如果手动一条条书写这种软件包依赖设定,就是一件非常繁琐而头痛的事儿。

本文分享自微信公众号 - 玉树芝兰(nkwangshuyi),作者:王树义老师

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用 pipenv 克隆 Python 教程代码运行环境?(含视频讲解)

    咱们的 Python 教程代码已经可以免安装在线运行了。但如果你希望在本地克隆运行环境,请参考本文的步骤说明。

    王树义
  • 如何让Jupyter Notebook支持多种编程语言?

    不满意Jupyter Notebook只有Python 2环境,还打算让它支持Python 3与R?没问题,本文一步步帮助你实现这个愿望。

    王树义
  • 如何用 Pandas 存取和交换数据?

    数据采集、整理、可视化、统计分析……一直到深度学习,都有相应的 Python 包支持。

    王树义
  • Python Web开发实战

    《Python Web开发实战》按照一个Web 产品从无到有、从简单变复杂、从基础到进阶的过程,多角度、全方位讲述了Python Web 开发。内容涉及Web ...

    用户3157710
  • 部署ASP.NET MVC3 到服务器需要的资源

    国内很多网站空间都只支持.NET 2.0 和 .NET 3.0 3.5,很少有空间商支持.NET 4的,即使有个别支持.NET 4,但是不支持MVC的默认路由访...

    Isaac Zhang
  • Python之初识Web,打造属于你的个人品牌!

    在上一期关于对Python的介绍中讲到Python在Web开发、数据科学、爬虫系统、机器学习、自动化运维和测试中有着较为广泛的应用。不了解的朋友可以查看‘Pyt...

    灰小猿
  • 18段代码带你玩转18个机器学习必备交互工具

    作者 | 曼纽尔·阿米纳特吉(Manuel Amunategui)、迈赫迪·洛佩伊(Mehdi Roopaei)

    AI科技大本营
  • 18段代码带你玩转18个机器学习必备交互工具

    作者:曼纽尔·阿米纳特吉(Manuel Amunategui)、迈赫迪·洛佩伊(Mehdi Roopaei)

    华章科技
  • 神级程序员告诉你,如何在这全民Python时代中,正确快速的学习Python

    Python如今愈发火热的一种语言,随互联网的发生而创立,又随互联网的极速发展而繁荣。使用Python会遇到各种各样的问题 开源中国OSC高手问答请来了《Pyt...

    企鹅号小编
  • Python指南:高级程序设计之面向对象程序设计进阶

    本节中,我们将更深入地学习 Python 对面向对象的支持,学习很多可以减少必须编写的代码的总量、拓展程序的威力与功能的技术。下面以一个简单的类开始:

    王强

扫码关注云+社区

领取腾讯云代金券