原创 徐振华 大数据挖呀挖 2022-02-11 22:29 ![]() “机器学习道不明 搞个app说得清 简介 最近要把模型的一些结果做成网页展示出来,选择了bootstrap,结合python的django框架,做是能做,但是有点繁琐。 前端常用的框架是vue和react,对于python技术栈的人来说又有点困难。 组内小伙伴介绍了python的streamlit包,简单调研一下,发现这真是一个神器,直接用python可以非常快速搭建一个webapp,而且特别适合展示图表。 这张图可以看到,streamlit几乎支持了所有ML相关的包: 启动 我是用的docker,在容器里启动后,在网页上直接输入URL即可访问。 事件 django+js的前后端应用更像是一个框架,我们对号入座,分别在python和html里填上对应的代码,比如通过callback函数实现事件的处理。 而streamlit是一个单页面应用,页面上显示的元素都是一个py文件顺序执行下来的结果。每次一个控件的值改变,整个脚本都会从头执行一遍。 为了避免刷新速度太慢,streamlit里提供了@cache方法,使用缓存把一些复杂操作的结果存下来,第二次执行的时候可以加快速度。 控件 streamlit里通过判断控件返回的值来自定义函数,例如下面的单选框: 对应的代码: selector = st.sidebar.multiselect("Which would you like", [1, 2, 3], key="3")st.write(selector) 那么如果判断selector的值执行不同的代码,就是streamlit里对事件响应的逻辑。 亮点 streamlit里对dataframe的支持很好,可以直接st.write(df),渲染出来的表格自带排序功能,还可以支持style输出: stream里支持plotly, seaborn等常用画图工具,还有不怎么常见但是功能很强大的altair。 多页面应用 streamlit本身只能支持一个单页面应用,但是结合hydralit,可以做成一个带导航条的多页面应用。 看看下面这几个页面,哪里还像一个python做出来的玩具? 后记 今天短暂地用streamlit开发了一下,用起来真的是超爽,直接在jupyter里调试python代码,然后刷新页面就可以看到修改后的效果了。 再也不用一会python,一会F12打开浏览器调试JS代码了 确定 |
|