如何利用streamlit快速搭建一个web应用并部署到heroku服务器上
streamlit是一个用于构建机器学习、数据可视化的python框架。如果你想快速部署自己的机器学习应用,或者给小伙伴直观展示你的数据,但是没有web开发的经验,streamlit绝对是你的不二选择。只要你会使用python,你会发现利用streamlit开发一个web app是一件及其简单的事情。Streamlit是第一个专门针对机器学习和数据科学团队的应用开发框架,它是开发自定义机器学习工具的最快的方法,它的目标是取代Flask在机器学习项目中的地位,可以帮助机器学习工程师快速开发用户交互工具。他只需要几行代码就可以轻松实现机器学习模型的可视化,代码多位设置控件类型和输入、输出,可以帮你轻松设计自己训练好的机器学习模型webapp。缺点是控件位置固定,格式比较单一,还有待进一步包的更新和发展。但绝对是没有web搭建应用基础的初学者必备利器。
streamlit入门(所有的都一样安装包)
pip install streamlit
尝试包的示例
streamlit hello
如果成功安装,会出现如下窗口,并且默认的浏览器会启动。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085315795.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020062508540224.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
这样你就可以通过选择左侧框框内的示例模型进行初次尝试了,示例中都附带了这个model的代码,能帮你快速理解:控件布局,数据读入、输出,界面设计等方面,助力快速入门。
当然最好的还是去浏览其官方文档:link
里面详尽了各种控件、布局样式和API接口。大家可以通过很多途径了解到各个控件怎么部署,这里就不详细描述了。
如何快速搭建你的webApp:
1.首先在本地创建一个 .py文件,例如我的app.py
![app.py](https://img-blog.csdnimg.cn/20200625085539189.png)
导入所有需要的包,包括全部自己模型内的包,我这里用SVM创建了一下简单的分类器作为示例
2设置题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085615576.png)
3设置控件:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085624813.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
st.sidebar.slider:表示在左侧新建一个滑动条一样的控件,效果见下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020062508592878.png)
st.sidebar.selectbox:表示左侧新建一个选择框:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085932385.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
4 训练模型
这一步跟你在任何python编辑器上一样,读入数据、建立模型即可,我这里直接导入之前训练好的模型
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085944879.png)
5从webApp中收集用户输入的信息,并打包成矩阵,输入自己已经建立好的模型:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085949389.png)
6写出自己模型的结果即可:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625085954971.png)
这样很容易通过简单的几行代码就实现了一个基于svm的诊断模型的webApp创建,可能用不到你几分钟,就完成了一个十分复杂,涉及到诸多框架、程序语言的webApp设计。到这里你就完成了第一个app的创建。
下面有了APP我怎么跟别人分享,难道都只能在本地端观看吗?
部署
创建好的APP,理论上可以部署到任意的服务器上,让用户实现访问,这里就介绍用heroku平台,没有别的原因,就是因为它是免费的平台,你可以不需要信用卡,就可以完成部署。
天下没有免费的午餐,它也有着明确的缺点,没有科学上网,没有heroku!
注册一个账号:
不能用qq邮箱、网易邮箱等,最好还是尝试国外邮箱,我用的是google,完全没有问题。
创建一个App
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090039634.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
通过Heroku Git上传你的APP
你可以完全按照下图中的代码一步步实现把自己的APP部署到Heroku上,当然前提是准备好的App,下面我将讲述需要哪些辅助的文件帮助你部署。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090046206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
这是我的文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090107886.png)
.git是后面生成的不用管,svm.joblib是我保存的自己建立的模型也不需要管,主要包括你的main.py、 Procflie 、requirements、setup.sh。
Procflie没有文件类型,后面保存的时候不需要加后缀,只需要把我写的app改成你的程序名称即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090113949.png)
Requirements
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090119860.png)
就是你写模型所以依赖的包环境
setup.sh
输入你的邮箱即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020062509012675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
把这些所有文件都放在一个文件夹内
最后通过heroku部署
运行cmd,cd到你的文件夹,按照下面的代码一步步就可以成功部署你的APP了
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200625090245395.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNzAxMA==,size_16,color_FFFFFF,t_70)
最后成功部署后:点击open APP就可以在网页上操作自己的应用了,复制链接分享给别人,就可以在世界的任何一个角落,通过网络访问你的APP了。
小结:
streamlit优缺点
streamlit的优点很明显:
开发速度快,修改方便。非常适合个人开发者
不必需要web方面知识也可以开发出可用的web app,这也是最吸引人的地方
streamlit也有一些缺点:
前端界面固定,开发者不能随意调整控件位置
社区现在还不够完善,也有一些bug暂时没有解决
总的来说,streamlit绝对是一款值得学习的框架;也许你的领域并不是机器学习、数据分析领
域,但是从另一个方面想,streamlit提供了丰富的控件以及简单的开发流程,完全可以使用
streamlit结合其他python库开发一些有趣的web app解决自身领域的一些小困难。
多尝试,多试错!
参考:
玉树兰芝:如何用 Python 和 Streamlit 做交互式数据分析产品?https://sspai.com/post/58474
streamlit:快速构建机器学习数据分析web app利器https://zhuanlan.zhihu.com/p/110816628?from_voters_page=true