最近,我在数据分析的一些任务中尝试了闻名已久的Streamlit
,再一次感受到Python
的强大之处。
于是,准备根据自己的掌握情况,写一个介绍Streamlit
的系列。
本文作为第一篇, 先介绍介绍Streamlit
是什么,以及它和Jupyter
和传统Web应用的区别。
1. 是什么
Streamlit
是一个用于快速构建数据科学和机器学习应用程序的Python库,
使用Streamlit
,我们可以使用简单的Python
代码来创建交互式和可视化的应用,无需深入掌握前端技术或编写大量的底层代码。
Streamlit
的发展历史可以追溯至2019年10月 ,当时Streamlit
是作为一个专门针对机器学习和数据科学的应用开发框架而发布的。
刚开始的设计目标是取代Flask
在机器学习项目中的地位,帮助机器学习工程师快速开发用户交互工具。
Streamlit
的核心理念是"Scriptability
",即用户只需编写简单的Python脚本,就可以构建出一个完整的应用程序。
所以,Streamlit
中封装了大量的交互式组件,支持表格、图表、数据表等对象的渲染,并具备栅格化响应式布局能力。
随后,Streamlit
逐渐发展并受到数据科学社区的广泛关注。
其开源的性质和简洁高效的设计哲学受到越来越多的数据科学家和开发者的喜爱,他们使用Streamlit
创建和分享各种美观的、交互式的Web应用。
Streamlit
也开始支持越来越多的数据可视化库,如Matplotlib
、Plotly
和Altair
等,使得在应用中集成丰富的图表和视觉化元素变得非常简单。
值得一提的是,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. 总结
总的来说,Streamlit
,Jupyter
和传统的Web应用三者各有适合的应用场景,并不是某一种可以完全取代另一种。
具体如何选择可以参考下图:
对于专注于数据分析和机器学习方向的个人或者学生来说,Streamlit
绝对值得一试。