最近,我在数据分析的一些任务中尝试了闻名已久的Streamlit,再一次感受到Python的强大之处。

于是,准备根据自己的掌握情况,写一个介绍Streamlit的系列。

本文作为第一篇, 先介绍介绍Streamlit是什么,以及它和Jupyter传统Web应用的区别。

1. 是什么

Streamlit是一个用于快速构建数据科学和机器学习应用程序的Python库,

使用Streamlit,我们可以使用简单的Python代码来创建交互式和可视化的应用,无需深入掌握前端技术或编写大量的底层代码。

Streamlit的发展历史可以追溯至2019年10月,当时Streamlit是作为一个专门针对机器学习和数据科学的应用开发框架而发布的。

刚开始的设计目标是取代Flask在机器学习项目中的地位,帮助机器学习工程师快速开发用户交互工具。

Streamlit的核心理念是“Scriptability”,即用户只需编写简单的Python脚本,就可以构建出一个完整的应用程序。

所以,Streamlit中封装了大量的交互式组件,支持表格、图表、数据表等对象的渲染,并具备栅格化响应式布局能力。

随后,Streamlit逐渐发展并受到数据科学社区的广泛关注。

其开源的性质和简洁高效的设计哲学受到越来越多的数据科学家和开发者的喜爱,他们使用Streamlit创建和分享各种美观的、交互式的Web应用。

Streamlit也开始支持越来越多的数据可视化库,如MatplotlibPlotlyAltair等,使得在应用中集成丰富的图表和视觉化元素变得非常简单。

值得一提的是,Streamlit在发展过程中还经历了被Snowflake收购的重要事件,

这一收购进一步推动了Streamlit在数据科学和机器学习领域的应用和发展。

对我来说,使用Streamlit最大的好处是,只要会Python就能构建一个漂亮的交互式应用,

不需要再陷入编写前端时,为了调整一个样式折腾半天的痛苦。

2. 用在哪里

以我自己的使用经验,Streamlit主要用在两个地方。

其一是在数据分析和机器学习项目的早期,使用Streamlit快速构建一个应用来探索项目中的各种可能性。

也可以用来做项目的原型,这比做静态原型要好很多,一方面可以轻易的实现各种交互,

另一方面,其中的图表组件可以将结果动态展示出来,更好的给客户演示项目可能的效果。

另一个可以使用的地方是教学演示,比如想做线上课程时,它可以让讲师轻松地将复杂的数据转化为直观的图表和图像,帮助学员更好地理解数据和背后的知识。

同时,Streamlit的交互式特性允许学员在界面上进行实时操作和探索,这大大增强了学习的参与度和互动性。

此外,Streamlit还支持多种数据科学库和工具的集成,使得讲师可以根据教学需求自由选择和组合不同的工具,进一步丰富教学内容和形式。

对于用户量有一定规模的应用,比如需要认证,权限以及其他业务功能时,不建议使用Streamlit

毕竟,传统的前后端开发方式还是更容易应对业务的频繁变更,也利于多人协作开发。

3. 与Jupyter相比

使用Streamlit之前,我在项目早期用的比较多的是Jupyter notebook

Jupyter也是交互式的,可以一边编码一边看结果,还可以结合markdown写一些说明文档。

使用之后,我感觉两者之间的区别主要有:

3.1. 交互性

Streamlit提供简洁的用户界面,其中可以轻松添加各种控件(如按钮、滑块等)。

Jupyter是以笔记本形式组织代码、文本和可视化输出。支持代码块的即时执行和结果展示。

相比之下,Jupyter是以代码的形式分享,更适合自己尝试各种数据分析的路径,以及在开发人员之间分享。

Streamlit以应用的形式分享,不需要了解代码,可以直接操作界面,更适合给客户分享。

3.2. 可视化能力

Streamlit内置了丰富的可视化组件,支持多种图表类型和交互式数据展示,可以轻松地将数据分析结果以图表形式呈现给用户。

Jupyter需要通过代码块生成各种可视化图表,通常是导入其他第三方库(如matplotlib、seaborn等)来帮助实现。其可视化能力很大程度依赖于所使用的库和开发者的编程技能。

相比之下,Streamlit对开发者的编程技能要求更低一些,因为使用内置封装好的组件比直接使用第三方可视化库要简单很多。

3.3. 扩展性

Streamlit本身就是纯粹的Python代码文件,所以可以很轻松地将现有的Python代码转集成到Streamlit应用中,并通过添加控件和可视化组件来增强应用功能。

Jupyter是以笔记形式组织的代码块,并不是纯粹的Python代码,代码的复用和扩展更多依赖于代码块的组合和笔记本的编辑,需要考虑更多。

相比之下,Streamlit扩展更加简单,功能复杂度提高之后,封装一些通用功能,布局代码结构也更加直观。

4. 与Web应用相比

Streamlit功能是介于Jupyter和传统Web应用之间的,比Jupyter强但是比传统Web应用弱。

最近没怎么做过数据分析和机器学习相关的Web应用了,对于两者的比较可能会考虑不周。

Streamlit的交互性上一节已经提过,传统Web应用的交互性无需多说,几乎是没有上限的,看看现在互联网上各式各样的Web应用就知道了。

不过,对于专注于数据分析和机器学习方面的开发人员来说,

传统Web应用的开发过于困难,不仅需要掌握多种技术和工具,还需要编写大量的前端和后端代码,以及进行复杂的调试和测试。

上一节提到的其他两点,可视化能力扩展性

传统Web应用能做到的也肯定比Streamlit强,Web应用发展这么多年,

尤其是近些年前端的飞速发展,Web应用既可以做各种复杂的游戏,也可以做业务复杂的电子商务平台等等。

问题仍然在于开发的困难程度,选择的时候得看你的应用有多复杂,你的团队是否能够覆盖开发Web应用所需要的各类技术。

5. 总结

总的来说,StreamlitJupyter传统的Web应用三者各有适合的应用场景,并不是某一种可以完全取代另一种。

具体如何选择可以参考下图:

对于专注于数据分析和机器学习方向的个人或者学生来说,Streamlit绝对值得一试。

什么是Streamlit的更多相关文章

  1. 【Python】神器:Streamlit,仅使用Python开发一个运维管理后台(不需要编写html,js,css)

    背景 作为SRE,我们有很多很多自动化的工具,大部分都是自动运行的,还有一部分是CLI,我们一直苦于没有一个自己的管理后台网站,受限于前端能力薄弱,开发出来的网页只能说凑活能用,但是不好用. 现在我们 ...

  2. python streamlit 速成web页面,深度学习模型展示.

    #  点我查看 参考文献 py中一个web应用,Streamlit 是一个开源 Python 库,可让您轻松创建和共享用于机器学习和数据科学的精美自定义 Web 应用程序.只需几分钟,您就可以构建和部 ...

  3. 详解Python Streamlit框架,用于构建精美数据可视化web app,练习做个垃圾分类app

    今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app.它的优势是入门容易.纯 Python 编码.开发效率高.UI精美. 上图是用 Streamlit 构 ...

  4. Streamlit:快速数据可视化界面工具

    目录 Streamlit简介 Streamlit使用指南 常用命令 显示文本 显示数据 显示图表 显示媒体 交互组件 侧边栏 缓存机制 Streamlit使用Hack Streamlit的替代品 相关 ...

  5. Python 周刊第 418 期

    新闻 PyCon US 2020 开始接受财务赞助! https://pycon.blogspot.com/2019/10/financial-aid-launches-for-pycon-us-20 ...

  6. 20个Python代码段,你需要立刻学会,好用到哭!

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  7. python教程:用简单的Python编写Web应用程序

    python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分 ...

  8. 20行Python代码开发植物识别 app

    这篇文章介绍如何用Python快速实现一个植物识别的app,家里养了几盆多肉还叫不上名字,正好拿来识别一下.实现这样一个app只需要20行左右的代码,先来看下效果: 另外,我也开发了微信小程序版本,大 ...

  9. 有用的20个Python代码段

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  10. 学就完事了!万星项目带你做 3D 游戏——GitHub 热点速览 v.21.18

    本文首发于「HelloGitHub」微信公众号,搜索「HelloGitHub」点击关注解锁更多宝藏! 作者:HelloGitHub-小鱼干 新手开始学习的时候,都会遇到一个问题:如何开始学 xx?Se ...

随机推荐

  1. 使用Java对稀疏数组的压缩与还原

    稀疏矩阵的压缩与还原 稀疏数组中元素个数很少或者有大量的重复值,如果直接保存保存,会浪费很多空间,这时,就可以考虑对数组进行压缩存储. 先定义一个稀疏数组 //创建一个二维数组 11 * 11 int ...

  2. 【JavaScript】下滑线命名转驼峰命名处理

    同事写接口返回的JSON属性名称始终不一致,一会下划线一会驼峰 然后自己封装了一个: function toHump(name){ var newName = name.toLowerCase(); ...

  3. 贝塔分布 beta分布的累积分布函数(CDF)计算 —— 如何使用二项式分布表示beta分布的概率累积函数

    贝塔分布 beta分布的累积分布函数(CDF)的计算公式: 计算beta分布的累积分布函数(CDF)是需要计算积分的,但是最近发现另一种计算方法,即,使用二项式分布计算beta分布的概率累积函数. b ...

  4. 日本联合研究团队发布 Fugaku-LLM——证明大型纯 CPU 超算也可用于大模型训练

    相关: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_101396655 ...

  5. Linux系统下使用pytorch多进程读取图片数据时的注意事项——DataLoader的多进程使用注意事项

    原文: PEP 703 – Making the Global Interpreter Lock Optional in CPython 相关内容: The GIL Affects Python Li ...

  6. nvme硬盘的断电保护是否有用,是噱头、智商税还是真的有需要?购买DOCKCASE智能M2固态硬盘盒10秒保护

    最近在某东上买了一个10秒断电保护的nvme硬盘,其实对于这个断电保护有用没有用我是不懂的,也是不care的,买这个硬盘盒主要就是为了这个屏幕去的,不过东西到手后我就开始思考这个断电保护到底有用没有用 ...

  7. 在vscode中通过修改launch.json文件为项目添加启动参数——在launch.json文件中修改args变量

    以前一直在使用pycharm,不管怎么说毕竟国内外的Python编程者大部分都更支持pycharm,并且认为pycharm是Python语言编程中最好用的编辑器,但是随着国内编程人员一茬一茬的兴起很多 ...

  8. 由浅深入理解java多线程,java并发,synchronized实现原理及线程锁机制

    由浅深入理解java多线程,java并发,synchronized实现原理及线程锁机制 目录 由浅深入理解java多线程,java并发,synchronized实现原理及线程锁机制 一,线程的生命周期 ...

  9. WPF如何给window加阴影效果

    <Style x:Key="WindowStyle1" TargetType="{x:Type Window}"> <Setter Prope ...

  10. SMU 2024 spring 天梯赛自主训练2

    SMU 2024 spring 天梯赛自主训练2 7-1 I Love GPLT - SMU 2024 spring 天梯赛自主训练2 (pintia.cn) PHP 点击查看代码 I L o v e ...