但对于streamlit来说,请你相信我,这是一个你可以无脑去学习的框架,我之所以这么说,是因为我相信终有一天,你一定能用得上它。
如果你真的需要一些理由的话,那我随便给你举几个例子:
难道真的要为了这种简单的需求,去折腾html+css+js+flask(ordjango)吗?
这是大多数非专业开发者的痛点,也是streamlit这个框架流行开来的主要原因。
Streamlit是一个用于机器学习、数据可视化的Python框架,它能几行代码就构建出一个精美的在线app应用。
它能做什么,取决于你想干什么?
streamlit的功能强大,要学习的函数虽然多,但非常容易上手,学习成本却远比前端+Flask来得低得低。接下来,我会一一介绍。
和安装其他包一样,安装streamlit非常简单,一条命令即可
pipinstallstreamlit考虑到streamlit会附带安装比较多的工具依赖包,为了不污染当前的主要环境,我使用venv新建一个虚拟环境。
python3-mvenv.然后使用如下命令进入该虚拟环境
source./venv/bin/activate接下来,再安装streamlit,命令在上边。
安装的包比较多(数了下竟然接近92个?),过程也会很久,需要点耐心
piplist|wc-l92在安装过程中,可能会遇到一些问题,但也不一定,这取决于你的机器,如遇到问题请自行借助搜索引擎解决。
Streamlit提供了一些入门示例,执行如下命令即可
这里面有很多的demo,你可以看一下,这些Demo还有对应的配套代码
这些代码直接拷贝保存,就可以在本地直接通过如下命令直接运行
streamlitrunst-demo.py2.Markdown文本导入streamlit后,就可以直接使用st.markdown()初始化,调用不同的方法,就可以往文档对象中填入内容
如下我自己写的一个小Demo,供你参考
importstreamlitasst#markdownst.markdown('StreamlitDemo')#设置网页标题st.title('一个傻瓜式构建可视化web的Python神器--streamlit')#展示一级标题st.header('1.安装')st.text('和安装其他包一样,安装streamlit非常简单,一条命令即可')code1='''pip3installstreamlit'''st.code(code1,language='bash')#展示一级标题st.header('2.使用')#展示二级标题st.subheader('2.1生成Markdown文档')#纯文本st.text('导入streamlit后,就可以直接使用st.markdown()初始化')#展示代码,有高亮效果code2='''importstreamlitasstst.markdown('StreamlitDemo')'''st.code(code2,language='python')Streamlit运行的方式与普通的脚本有所不同,应该使用streamlitrunst-demo.py
运行后就会自动打开浏览器加载这个页面,如果没有自动打开,也可以手动拷贝上图中的链接打开访问。
是不是有点那个味了?就这,还只是开胃菜~
关于数据的展示,streamlit由两个组件进行支持
Table的示例
df=pd.DataFrame(np.random.randn(10,5),columns=('第%d列'%(i+1)foriinrange(5)))st.table(df)效果如下
Datafram的示例
df=pd.DataFrame(np.random.randn(10,5),columns=('第%d列'%(i+1)foriinrange(5)))st.dataframe(df.style.highlight_max(axis=0))效果如下,可以看到在图示外,有个向下的小箭头,你点一下,就会进行排序
除此之外,你还能看到我对最大值进行了高亮显示,原因是我传入的参数是df.style.highlight_max(axis=0)
其实还有n多种样式,比如:
这些你都可以在源代码中找到示例
在采集到一些监控数据后,若你需要做一个监控面板,streamlit也为你提供的metric组件
如下代码创建三个指标,并且填入对应的数据
col1,col2,col3=st.columns(3)col1.metric("Temperature","70°F","1.2°F")col2.metric("Wind","9mph","-8%")col3.metric("Humidity","86%","4%")刷新页面,就能看到下面的效果
Streamlit原生支持多种图表:
下面一一展示
折线图
面积图
柱状图
地图
Streamlit的一些原生图表组件,虽然做到了傻瓜式,但仅能输入数据、高度和宽度,如果你想更漂亮的图表,就像matplotlib.pyplot、Altair、vega-lite、Plotly、Bokeh、PyDeck、Graphviz那样,streamlit也提供了支持:
对于这部分,熟悉的同学自行尝试了,这里不再演示。
前面streamlit都只是展示文本和数据,如果仅是如此,那streamlit也就justsoso
对于那些不会前端,并且平时有需要写一些简单的页面的人说,能写一些交互界面才是硬需求。
庆幸的是,你平时在网页上、app上能看到的交互组件,Streamlit几乎都能支持。。
这些内容非常多,也比较简单,一个一个举例也没必要,大家直接去看streamlit源码里的注释即可。
想要在页面上播放图片、音频和视频,可以使用streamlit的这三个组件:
状态组件用来向用户展示当前程序的运行状态,包括:
效果如下:
Streamlit是自上而下渲染的,组件在页面上的排列顺序与代码的执行顺序一致。
一个精美的webapp,只有上下单栏式的布局肯定是不够的。
实际上streamlit还提供了多种多样的布局:
st.sidebar:侧边栏
侧边栏可以做一些用户操作控件
st.columns:列容器,处在同一个columns内组件,按照从左至右顺序展示
st.expander:隐藏信息,点击后可展开展示详细内容,如:展示更多
st.container:包含多组件的容器
st.empty:包含单组件的容器
Streamlit是自上而下逐步渲染出来的,若你的应用场景需要对渲染做一些控制,streamlit也有提供对应的方法
当用户在页面上做一些操作的时候,比如输入数据,都会触发整个streamlit应用代码的重新执行,如果其中有读取外部数据的步骤(数GB的数据),那这种性能损耗是非常可怕的。
但streamlit提供了一个缓存装饰器,当要重新执行代码渲染页面的时候,就会先去缓存里查一下,如果代码或者数据没有发生变化,就直接调用缓存的结果即可。
使用方法也简单,在需要缓存的函数加上@st.cache装饰器即可。
如果需要让别人也能访问这个应用,那你需要有一台服务器,这样才能通过公网ip进行访问
然后创建自己的app
这个App名字好像是要全网唯一,本想取个hello-streamlit的,发现早有人取过了。
然后为你的应用,创建几个Heroku规定的文件
拿到了这份模板后,你就可以基于这份模板创建你的git仓库
gitinitgitadd--allgitcommit-m"init"然后部署到Heroku
herokuloginherokucreategitpushherokumasterherokups:scaleweb=1按照命令行输出的URL就可以访问你的应用了。
查看Heroku日志:
herokulogs--tail要想使用自己域名,需要先通过Heroku验证。然后运行:
herokudomains:addhivecnstats.iswbm.com使用Heroku唯一的缺点就是Heroku是需要梯子的,一般人访问不了,没条件的还是乖乖的备台服务器吧。
Streamlit一个开箱即用的工具集,它可以让一个普通的个人开发者免于学习繁杂的前端知识,就可以轻松、快速的构建一个简洁、优雅的webapp应用,这是streamlit最吸引人的地方。
对于从事数据分析,机器学习领域的人来说,它绝对是开发神器,但即使你不是这些领域的人,你肯定也会有搭建一个webapp需求的时候,streamlit正是你需要的。
PyCharm中文指南
《PyCharm中文指南》使用300多张GIF动态图的形式,详细讲解了最贴合实际开发的105个PyCharm高效使用技巧,内容通俗易懂,适合所有Python开发者。
Python黑魔法指南
《Python黑魔法指南》目前迎来了v3.0的版本,囊集了100多个开发小技巧,非常适合在闲时进行碎片阅读。
Python中文指南
学Python最好的学习资料永远是Python官方文档,可惜现在的官方文档大都是英文,虽然有中文的翻译版了,但是进度实在堪忧。为了照顾英文不好的同学,我自己写了一份面向零基础的朋友的在线Python文档--《Python中文指南》