Python 快速生成 web 动态展示机器学习项目!
来源丨网络
作者丨wedo实验君
1. Streamlit
一句话,Streamlit是一个可以用python编写web app的库,可以方便的动态展示你的机器学习的项目。
优点
你不需要懂html, css, js等,纯python语言编写web app
包括web常用组件:文本框, 按钮,单选框,复选框, 下拉框,多媒体(图片,视频)和文件上传等
应用场景
可以动态的探索数据
可以方便动态展示你的机器学习成果(可以和jupyter notebook做个比较)
https://github.com/streamlit/streamlit
2. 安装
pip install streamlit
streamlit hello# 启动web app
# streamlit run [filename]
streamlit run app.py# You can now view your Streamlit app in your browser.
# Local URL: http://localhost:8501
3. 基本组件介绍
3.1 布局
web中通常有布局layout css, 如Bootstrap中的12列删格系统;streamlit最多只有左右两栏,通常是一栏。通过st.sidebar
添加侧边栏,通常可作为菜单,选择控制操作。在上下结构上,streamlit按照代码顺序从上到下,依次布局。
import streamlit as st
import numpy as np
import time
import pandas as pd
import datetime
# 侧边栏
st.sidebar.title('菜单侧边栏')
add_selectbox = st.sidebar.selectbox("这个是下拉框,请选择?",("1", "Home 2", "Mobile 2")
)
# 主栏
st.title('Steamlit 机器学习web app')
3.2 text
streamlit提供了许多文本显示命令,还支持markdown语法
st.header('1. text文本显示')
st.markdown('Streamlit is **_really_ cool**.')
st.text('This is some text.')
st.subheader('This is a subheader')
st.write("st.write 可以写很多东西哦")
st.warning('This is a warning')
3.3 表单控件
streamlit提供丰富的表单控件,如按钮,单选框,复选框,下拉框,文本框和文件上传。用法提炼如下:
函数调用为定义显示控件,返回值是表示是否触发,或者触发返回结果;比如按钮,
st.button('Say hello')
定义了一个按钮, 如果按下按钮返回True,否则为False
st.markdown('- 按钮')
if st.button('Say hello'):st.write('Why hello there')st.markdown('- 单选框')
genre = st.radio("选择你喜欢的?",('Comedy', 'Drama', 'Documentary'))st.write('你选择了:', genre)st.markdown('- 复选框')
agree = st.checkbox('I agree')
if agree:st.write('感谢你同意了')st.markdown('- 下拉框')
option = st.selectbox('你喜欢的联系方式?',('Email', 'Home phone', 'Mobile phone'))st.write('你选择了:', option)st.markdown('- 多选下拉框')
options = st.multiselect('What are your favorite colors',['Green', 'Yellow', 'Red', 'Blue'],['Yellow', 'Red'])st.write('你选择了:', options)st.markdown('- slider')
values = st.slider('Select a range of values',0.0, 100.0, (25.0, 75.0))
st.write('Values:', values)st.markdown('- 文本输入')
title = st.text_input('Movie title', 'Life of Brian')
st.write('The current movie title is', title)txt = st.text_area('Text to analyze', '''It was the best of times, it was the worst of times, it wasthe age of wisdom, it was the age of foolishness, it wasthe epoch of belief, it was the epoch of incredulity, itwas the season of Light, it was the season of Darkness, itwas the spring of hope, it was the winter of despair, (...)''')st.markdown('- 日期与时间')
d = st.date_input("生日",datetime.date(2019, 7, 6))
st.write('Your birthday is:', d)t = st.time_input('闹钟', datetime.time(8, 45))
st.write('闹钟为:', t)st.markdown('- 上传文件')
uploaded_file = st.file_uploader("Choose a CSV file", type="csv")
if uploaded_file is not None:data = pd.read_csv(uploaded_file)st.write(data)
3.4 图像
常用的图像库都支持,通过st.image
展示图片
import cv2
img = cv2.imread('sunrise.jpg')
st.image(img[...,::-1], caption='Sunrise by the mountains',use_column_width=True)
3.5 图表
支持pandas中的dataframe展示图表(折线图,面积图和柱状图)
st.subheader('4.1 dataframe图表')
@st.cache(persist=True)
def get_data():df = pd.DataFrame(np.random.randn(200, 3),columns=['a', 'b', 'c'])return df
df = get_data()
# st.table(df)
st.dataframe(df)
st.line_chart(df)
st.area_chart(df)
st.bar_chart(df)
还支持matplotlib的图表展示,这个你应该很熟悉
plt.plot(df.a, df.b)
st.pyplot()
3.6 缓存
streamlit中数据的缓存使用st.cache
装饰器来修饰, 注意是作用于函数。缓存的好处顾名思义就是避免每次刷新的时候都要重新加载数据。
@st.cache(persist=True)
def get_data():df = pd.DataFrame(np.random.randn(200, 3),columns=['a', 'b', 'c'])return df
4. 动态数据demo
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 侧边栏
st.sidebar.title('请选择过滤条件')
time = st.sidebar.time_input('大于时间', datetime.time(1, 0))values = st.sidebar.slider('速度',0.0, 200.0, (25.0, 75.0))
# 主栏
st.title('数据探索')
@st.cache(persist=True)
def get_data():file = './7000.csv'return pd.read_csv(file, header=0)
data = get_data()
# print(values)
display_data = data[data['time'] > str(time)]
display_data = display_data[(display_data['速度'] > values[0]) & (display_data['速度'] < values[1])]
st.line_chart(display_data[['方向', '速度']])
5. 机器视觉项目demo
这个例子我们用人脸检测
来说明下机器视觉项目的展示。
功能:上传一张图片,检测出人脸框
人脸检测算法来自facenet项目
https://github.com/davidsandberg/facenet/tree/master/src/align
中的MTCNN算法布局为左右布局,左边为上传空间, 右边是展示
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
import time
import pandas as pd
import datetime
import cv2
from PIL import Image
import io
from face_detect.mtcnn_tf import MTCNN# 侧边栏
st.sidebar.title('请上传一张照片,开始检测')
uploaded_file = st.sidebar.file_uploader("", type="jpg")# 主栏
st.title('人脸检测')
@st.cache()
def init_model():mtcnn = MTCNN()return mtcnndetect = init_model()
if uploaded_file is not None:# print(uploaded_file)data = np.array(Image.open(io.BytesIO(uploaded_file.read())))_, bboxs, _, _ = detect.run(data, detect_multiple_faces=True, margin=0)# display bbox and landmarksfor idx, landmark in enumerate(landmarks):bbox = bboxs[idx]cv2.rectangle(data, (bbox[1], bbox[0]),(bbox[3], bbox[2]), (0, 2255, 0), 2)st.image(data, caption='image', use_column_width=False)
6. 总结
是不是觉得很方便,分分钟就可以构建一个web app来展示你的项目。希望对你有帮助, 快动起手来吧! 摘要如下:
数据记得要用缓存
@st.cache()
streamlit可以支持matplotlib
streamlit有漂亮的表单控件,函数的返回值就是触发的值
streamlit支持markdown
官方提供了其他复杂的demo(官方推荐用函数的方式的封装业务,这里也推荐, 本文主要是为了说明功能,采用比较直观的方式来编写)
https://github.com/streamlit/demo-face-gan
https://github.com/streamlit/demo-self-driving
往
期
回
顾
技术
Python多层级索引的数据分析
资讯
红帽、Docker、SUSE在俄停服
技术
太强了!Python开发桌面小工具
技术
一行Python代码能干嘛?来看!
分享
点收藏
点点赞
点在看
相关文章:

Linux-CentOS 7 增加root分区容量
今天搭建了一台CentOS 7 的机器,搭建完成后通过【df -lh】看了一下分区大小,root分区太小了。 分区.png打算把home分区的容量分一部分给root,具体操作步骤如下: 备份home分区cp -r /home/ homebak卸载【home】目录umount /home/现…

PHP数组实际占用内存大小的分析
http://blog.csdn.net/hguisu/article/details/7376705我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1…

肝货,详解 tkinter 图形化界面制作流程!
作者 | 黄伟呢来源 | 数据分析与统计学之美本期案例是带着大家制作一个属于自己的GUI图形化界面—>用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首先详细讲述一下Tkinter的使用方法。tk…

迁移碰到数据库 Unknown collation: 'utf8mb4_unicode_ci'
数据库从香港服务器迁移到阿里云的虚拟主机,不得不吐槽一下。阿里云的ftp好慢,db导入面板也不够友好。 还得靠中断命令行链接,结果版本太低不支持 utf8mb4_unicode_ci,尼玛,现在都mysql5.7了,您还在 5.1时代…

15-shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是…

高性能Mysql主从架构的复制原理及配置详解
1 复制概述Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复…

gdal 1.9+python 2.7开发环境配置
最近项目使用Cesium平台基于WegGl做web地球,其中关于地形数据有一种支持格式为terrain的地形数据。这种格式可以通过一个python工具切dem来得到。 下面记录下配置gdalpython开发环境,系统是win7 64位,不过gdal和python是32位的,没…

破纪录了!用 Python 实现自动扫雷!
用PythonOpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。中级 - 0.74秒 3BV/S60.81相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣&a…

java高并发编程(二)
马士兵java并发编程的代码,照抄过来,做个记录。 一、分析下面面试题 /*** 曾经的面试题:(淘宝?)* 实现一个容器,提供两个方法,add,size* 写两个线程,线程1添加…

LAMP 关键数据集锦技术选项参考
LAMP 关键数据集锦技术选项参考 源自日积月累自己的其他人的经验总结负载均衡 LVS工作在四层,内核态,性能极高,有VIP功能,配合 keepalived 做有效的 心跳检查和负载均衡安装配置麻烦,HAProxy工作在四层到七层&am…

centos7 设置中文
查看系统版本[rootwebtest76 ~]# cat /etc/redhat-releaseCentOS Linux release 7.0.1406 (Core) [rootlocalhost ~]# cat /etc/locale.conf LANGen_US.UTF-8[rootlocalhost ~]# cp /etc/locale.conf /etc/locale.conf_bak[rootlocalhost ~]# vim /etc/locale.conf # 修改后原英…

Python最常用的函数、基础语句有哪些?
作者 | 朱卫军来源 | Python大数据分析Python有很多好用的函数和模块,这里给大家整理下我常用的一些方法及语句。一、内置函数内置函数是python自带的函数方法,拿来就可以用,比方说zip、filter、isinstance等。下面是Python官档给出的内置函数…
1.5s~0.02s,期间我们可以做些什么?
原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景音乐噢背景音乐已取消~ 2333333大爷我就算功能重做,模块重构,我也不做优化!!!运行真快! 前言 本文主要探讨…

Python 自动化办公之 Excel 拆分并自动发邮件
作者 | 周萝卜来源 | 萝卜大杂烩今天我们来分享一个真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍!需求需要向大约 500 名用户发送带有 Excel 附件的电…

In Gradle projects, always use http://schemas.andr
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载。 在做项目自定义时候遇到这个错误 In Gradle projects, always use http://schemas.android.com/apk/res-auto for custom attributes 解决办…

HTTP POST慢速DOS攻击初探
1. 关于HTTP POST慢速DOS攻击 HTTP Post慢速DOS攻击第一次在技术社区被正式披露是今年的OWASP大会上,由Wong Onn Chee 和 Tom Brennan共同演示了使用这一技术攻击的威力。他们的slides在这里: http://www.darkreading.com/galleries/security/applicatio…
Java 学习(20)--异常 / IO 流
异常(Exception) (1)程序出现的不正常的情况。 (2)异常的体系 Throwable(接口,将异常类对象交给 JVM 来处理) |--Error 严重问题,我们不处理。(jvm 错误,程序无法处理) |--Exception 异常 …

runtime自动归档/解档
原文出自:标哥的技术博客 前言 善用runtime,可以解决自动归档解档。想想以前归档是手动写的,确实太麻烦了。现在有了runtime,我们可以做到自动化了。本篇文章旨在学习如何通过runtime实现自动归档和解档,因此不会对所有…

Ivanti 洞察职场新趋势:71% 的员工宁愿放弃升职也要选择随处工作
近日,为从云端到边缘的 IT 资产提供检测、管理、保护和服务的自动化平台供应商 Ivanti 公布了其年度无处不在的办公空间( Everywhere Workplace) 调查结果。这项调查是Ivanti与全球“未来工作”专家共同完成的,调查范围涵盖 6100 …

Shippable和Packet合作提供原生ARM CI/CD
DevOps自动化平台Shippable和裸金属云服务提供商Packet联合发布了一种新的持续集成和交付(CI/CD)托管服务,适用于在Armv8-A架构上开发软件应用的开发人员。该解决方案支持开源和商业软件项目,用于在Packet提供的基于ARM的云服务上…

阿里云ECS架设***过程总结
原文地址:最近开发移动项目,数据库服务是架设在电信服务器上,可怜我的联通网络本地调试直接x碎了一地!!度娘相关资料后,最终决定在阿里云ECS上架设作为跳板来访问电信服务器!一.原理1.阿里云ECS上架设.2.本地连接使用拨号到阿里云ECS.3.使用阿里云ECS网络访问电信服务器.使用前…

MYSQL的MERGE存储引擎
MYSQL的引擎不是一般的多,这次说到的是MERGE,这个引擎有很多特殊的地方: MERGE引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必…

Pandas SQL 语法归纳总结,真的太全了
作者 | 俊欣来源 | 关于数据分析与可视化对于数据分析师而言,Pandas与SQL可能是大家用的比较多的两个工具,两者都可以对数据集进行深度的分析,挖掘出有价值的信息,但是二者的语法有着诸多的不同,今天小编就来总结归纳一…

分布式RPC实践--Dubbo基础篇
2019独角兽企业重金招聘Python工程师标准>>> 简介 Dubbo是阿里巴巴开源的一个高性能的分布式RPC框架,整个框架的核心原理来源于生产者与消费者的运作模型;框架的核心分4大部分: 1. 服务注册中心 注册中心主要用于保存生产者消费者…

又居家办公了,要签合同怎么办?
本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动,寻访一百零一个数字化转型场景,聚合呈现并开通评选通道࿰…

lombox的用法(省去了set/get/NoArgsConstructor/AllArgsConstructor)
1、环境的搭建,在eclipse下的eclipse.ini中添加以下参数,-Xbootclasspath/a:C:\repository\org\projectlombok\lombok\1.16.6\lombok-1.16.6.jar-javaagent:C:\repository\org\projectlombok\lombok\1.16.6\lombok-1.16.6.jar重启你的eclipse.2、将lombo…

mysql 压力测试脚本
#创建表DEPTCREATE TABLE dept( /*部门表*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT "",loc VARCHAR(13) NOT NULL DEFAULT "") ENGINEMyISAM DEFAULT CHARSETutf8 ;#创建表EMP雇员CREATE TABLE emp(empno…

C++语言学习(十二)——C++语言常见函数调用约定
C语言学习(十二)——C语言常见函数调用约定 一、C语言函数调用约定简介 C /C开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数就会出现堆栈异常等现象…

PHP代码保护——Zend Guard
Zend Guard的作用,就是用编译处理的方式来保护PHP源代码免于被反编译查看、未经授权的定制修改、未经许可的使用和重新发布等。而且,它是PHP的东家Zend公司开发的,是完全为PHP量身定做的保护神。 下面,请大家就和我一起来学习使用…

Python 2.4 递归函数
递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用本身,这个函数就是递归函数。举个例子:计算阶乘n!1*2*3*4*5*...*n,用函数fact(n)表示,可以看出fact(n)n!f(n-1)*n所以,fact(n)可以表示为n*fa…