前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用简单的Python为数据科学家编写Web应用程序?

如何使用简单的Python为数据科学家编写Web应用程序?

作者头像
代码医生工作室
发布2019-11-14 12:42:31
2.8K0
发布2019-11-14 12:42:31
举报
文章被收录于专栏:相约机器人相约机器人

来源 | Medium

编辑 | 代码医生团队

StreamLit的出现兑现了仅使用Python创建Web应用程序的承诺。

Python之禅:简单胜于复杂,Streamlit使创建应用变得非常简单。

这篇文章是关于了解如何使用Streamlit创建支持数据科学项目的应用程序。

安装

代码语言:javascript
复制
pip install streamlit

要查看安装是否成功,可以运行:

代码语言:javascript
复制
streamlit hello

显示:

可以转到本地URL:localhost:8501在浏览器中,查看Streamlit应用程序的运行情况。开发人员提供了一些不错的演示,请花点时间并感觉一下工具的功能。

Streamlit Hello World

Streamlit旨在使用简单的Python简化应用程序开发。编写一个简单的应用程序。

在这里,从一个简单的应用程序开始,将其称为streamlit的Hello World。只需将下面给出的代码粘贴到一个名为helloworld.py

代码语言:javascript
复制
import streamlit as stx = st.slider('x')st.write(x, 'squared is', x * x)

并且,在终端上运行:

代码语言:javascript
复制
streamlit run helloworld.py

应该能够在浏览器中看到一个运行中的简单应用,该应用localhost:8501可移动滑块并给出结果。

一个简单的滑块小部件应用

在上面的应用程序中,使用了Streamlit的两个功能:

  • st.slider可以滑动以更改Web应用程序输出的小部件。
  • 以及通用st.write命令。惊讶于它如何能够从图表,数据框和简单文本中编写任何内容。稍后对此进行更多讨论。

重要提示:请记住,每次更改窗口小部件的值时,整个应用程序都会从上到下运行。

Streamlit窗口小部件

小部件提供了一种控制应用程序的方式。了解这些小部件的最佳位置是API参考文档本身,将介绍一些最终可能会用到的最突出的小部件。

1.滑块

代码语言:javascript
复制
streamlit.slider(label, min_value=None, max_value=None, value=None, step=None, format=None)

已经st.slider在上面看到了实际操作。它可以与min_value,max_value和step一起使用,以获取一定范围内的输入。

2.文字输入

获取用户输入的最简单方法是一些URL输入或一些用于情感分析的文本输入。它只需要一个标签来命名文本框。

代码语言:javascript
复制
import streamlit as sturl = st.text_input('Enter URL')st.write('The Entered URL is', url)

该应用的外观如下:

一个简单的text_input小部件应用

提示:可以更改文件helloworld.py并刷新浏览器。工作方式是打开并更改helloworld.py高级文字,并在浏览器中并排查看更改。

3.复选框

复选框的一个用例是隐藏或显示/隐藏应用程序中的特定部分。另一个可能是在函数的参数中设置布尔值。st.checkbox()接受一个参数,即小部件标签。在此应用程序中,该复选框用于切换条件语句。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npdf = pd.read_csv("football_data.csv")if st.checkbox('Show dataframe'):st.write(df)

一个简单的复选框小部件应用

4.选择框

可以st.selectbox用来从系列或列表中进行选择。通常用例是将其用作从列表中选择值的简单下拉列表。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npdf = pd.read_csv("football_data.csv")option = st.selectbox(    'Which Club do you like best?',     df['Club'].unique())'You selected: ', option

一个简单的下拉/选择框小部件应用

5.多重选择

还可以从下拉列表中使用多个值。在这里st.multiselect用来获取多个值作为变量列表options

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npdf = pd.read_csv("football_data.csv")options = st.multiselect( 'What are your favorite clubs?', df['Club'].unique())st.write('You selected:', options)

一个简单的多选小部件应用

逐步创建简单应用

对于理解重要的小部件来说,就这么多。现在将一次使用多个小部件创建一个简单的应用程序。

首先,将尝试使用streamlit可视化足球数据。在上述小部件的帮助下,执行此操作非常简单。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npdf = pd.read_csv("football_data.csv")clubs = st.multiselect('Show Player for clubs?', df['Club'].unique())nationalities = st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())# Filter dataframenew_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]# write dataframe to screenst.write(new_df)

简单应用程序如下所示:

结合使用多个小部件

可以添加一些图表吗?

Streamlit当前支持许多绘图库。包括Plotly,Bokeh,Matplotlib,Altair和Vega图表。Plotly Express也可以使用,尽管没有在文档中指定。它还具有一些Streamlit原生的内置图表类型,例如st.line_chart和st.area_chart。

简单应用程序的代码。只使用了四个调用来简化。其余都是简单的python。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = pd.read_csv("football_data.csv")clubs = st.multiselect('Show Player for clubs?', df['Club'].unique())nationalities = st.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]st.write(new_df)# create figure using plotly expressfig = px.scatter(new_df, x ='Overall',y='Age',color='Name')# Plot!st.plotly_chart(fig)

添加图表

改进措施

首先,说过每次更改任何小部件时,整个应用程序都会从头到尾运行。当创建将用于深度学习模型或复杂机器学习模型的应用程序时,这是不可行的。Streamlit通过Caching改进了这方面。

1.缓存

在简单的应用程序中。每当值更改时,就会一次又一次读取pandas数据框。虽然它适用于拥有的小数据,但不适用于大数据或当必须对数据进行大量处理时。使用st.cache装饰器功能在以下Streamlit处理中使用缓存。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = st.cache(pd.read_csv)("football_data.csv")

或者,对于仅需运行一次的更复杂且耗时的功能(请考虑加载大型深度学习模型),请使用:

代码语言:javascript
复制
@st.cachedef complex_func(a,b):    DO SOMETHING COMPLEX# Won't run again and again.complex_func(a,b)

当用Streamlit的缓存装饰器标记一个函数时,只要调用该函数,streamlit就会检查调用该函数所使用的输入参数。

如果这是Streamlit第一次看到这些参数,它将运行该函数并将结果存储在本地缓存中。

下次调用该函数时,如果这些参数没有更改,则Streamlit知道它可以完全跳过执行该函数。它仅使用缓存中的结果。

2.侧边栏

为了根据偏好提供更整洁的外观,可能希望将小部件移动到侧栏,例如Rshiny仪表板。这很简单。只需添加st.sidebar小部件的代码。

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as pxdf = st.cache(pd.read_csv)("football_data.csv")clubs = st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())nationalities = st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]st.write(new_df)# Create distplot with custom bin_sizefig = px.scatter(new_df, x ='Overall',y='Age',color='Name')# Plot!st.plotly_chart(fig)

将小部件移到侧边栏

3.Markdown

喜欢用Markdown写作。发现它不如HTML冗长,更适合数据科学工作。那么可以在streamlit应用程序中使用Markdown吗?

有两种方法可以做到这一点。最好的方法是使用Magic命令。Magic命令可以像注释一样轻松地编写markdown。也可以使用以下命令st.markdown

代码语言:javascript
复制
import streamlit as stimport pandas as pdimport numpy as npimport plotly_express as px'''# Club and Nationality AppThis very simple webapp allows you to select and visualize players from certain clubs and certain nationalities.'''df = st.cache(pd.read_csv)("football_data.csv")clubs = st.sidebar.multiselect('Show Player for clubs?', df['Club'].unique())nationalities = st.sidebar.multiselect('Show Player from Nationalities?', df['Nationality'].unique())new_df = df[(df['Club'].isin(clubs)) & (df['Nationality'].isin(nationalities))]st.write(new_df)# Create distplot with custom bin_sizefig = px.scatter(new_df, x ='Overall',y='Age',color='Name')'''### Here is a simple chart between player age and overall'''st.plotly_chart(fig)

最终应用演示

结论

在本文中,创建了一个简单的Web应用程序。但是可能性是无限的。在这里举个例子是流线型网站的GAN面部。它只是通过使用小部件和缓存的相同指导思想来工作。

https://research.nvidia.com/publication/2017-10_Progressive-Growing-of

喜欢开发人员使用的默认颜色和样式,并且发现它比使用Dash更加舒适,而Dash直到现在都在演示中使用。还可以在Streamlit应用程序中包含音频和视频。

https://streamlit.io/docs/api.html#display-interactive-widgets

最重要的是,Streamlit是一个免费的开放源代码,而不是一个开箱即用的专有Web应用程序。

过去,如果演示或演示文稿有任何更改,必须与开发人员联系。现在这样做相对来说是微不足道的。

可以在此处找到最终应用程序的完整代码。

https://github.com/MLWhiz/streamlit_football_demo

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档