Streamlit开发手册 http://cw.hubwiz.com/card/c/streamlit-manual/

打开浏览器,输入以下链接:

https://helloworld-streamlit.herokuapp.com/

需要加载一会

安装

pip install streamlit

在终端输入命令 streamlit hello 会自动打开一个网页,说明安装成功

如果报错:AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'

可以 pip install --upgrade protobuf 解决

部署

Streamlit 已经把它转换成了一个动态的 Web 应用。

所以,只要是常见的 Web 应用发布平台,理论上你都可以用来部署你的交互式数据分析作品。

这些平台,常见的包括:

  • EC2
  • Glitch
  • Heroku

这列表列下去就太多了。咱们这里只介绍 Heroku ,也就是前文给你展示的,样例使用的部署平台。

这东西的好处,就是基础款免费

你需要先到 Heroku 平台注册一个账号

之后,注册一个应用

我这里起的名字,叫做 helloworld-streamlit

你可以根据自己的喜好,起名称。

之后我们就要部署了。

部署的步骤,在上图中,你可以参考。

注意,上图中,右上角的 Open App 按钮,就是你的应用链接地址,你可以把它记下来。

首先你需要准备一些配置文件。

全部的配置文件,都给你展示在这个 github 项目中,你可以下载回来复用。

helloword.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import streamlit as st
import numpy as np
import pandas as pd

st.title("my first app")

@st.cache
def load_data():
    df = pd.read_csv("data.csv")
    df = df[['EVENT_TYPE', 'CREATE_TIME', 'COUNTY', 'LAT', 'LON']]
    df.columns = ['event_type', 'time', 'county', 'lat', 'lon']
    return df

df = load_data()

st.table(df.head())

event_list = df["event_type"].unique()

event_type = st.sidebar.selectbox(
    "Which kind of event do you want to explore?",
    event_list
)

county_list = df["county"].unique()

county_name = st.sidebar.selectbox(
    "Which county?",
    county_list
) 

part_df = df[(df["event_type"]==event_type) & (df['county']==county_name)]

# 使用st.write可以写入任何文本,甚至可以直接显式Pandas数据帧。
st.write(f"根据你的筛选,数据包含{len(part_df)}行")

st.map(part_df)

st.markdown("""
欢迎订阅我的微信公众号“玉树芝兰”,**第一时间免费**收到文章更新。别忘了**加星标**,以免错过新推送提示。
![](https://tva1.sinaimg.cn/large/006tNbRwly1gavw3v4iagj3076076dg2.jpg)
赞赏就是力量。
![](https://tva1.sinaimg.cn/large/006tNbRwly1gavw3vhpnpj30b40b4jrs.jpg)
如果你对 Python 与数据科学感兴趣,希望能与其他热爱学习的小伙伴一起讨论切磋,答疑解惑,欢迎加入知识星球。
![](https://tva1.sinaimg.cn/large/006tNbRwly1gavw3vz0ahj30dc0hzdgc.jpg)
""")

setup.sh 做一些初始设置,设定一些参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mkdir -p ~/.streamlit/

echo "\
[general]\n\
email = \"yourmail@email.com\"\n\
" > ~/.streamlit/credentials.toml

echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml

注意你将来用的时候,需要把其中标红的部分,替换成自己注册 heroku 时候的邮箱

requirements.txt 告诉机器,需要安装哪些 Python 依赖包。

numpy==1.15.0
streamlit==0.52.2
pandas==0.23.4

Procfile 是远端服务器上, Web 应用启动的时候,需要调用的脚本。其实里面只有一行。

web: sh setup.sh && streamlit run helloworld.py

请你下载,或者自行编辑上述 3 个文件后,与你的 Python 文件放在一个文件夹下面。

之后,请你到这里下载 heroku cli package。

下载后,根据提示安装即可。

进入终端。用 cd 命令切换到你的工作文件夹,也就是包含了你的 Python 脚本的目录。

输入:

heroku login

因为你已经在 setup.sh 中指定了自己的邮箱,所以这里会尝试直接用它来登录。

这时按任意键,会跳出一个浏览器窗口。

在浏览器中,点击确认即可登录。

看到上面的提示,证明登录成功了。

下面我们来设置 git ,这是推送我们文件和更新改动的途径。

在终端下执行:

git init

之后设置一下与远端的 heroku 服务器的连接:

heroku git:remote -a helloworld-streamlit

若是看到下图,证明成功了:

然后执行:

git add .
git commit -m "init"

再执行:

git push heroku master

这样就可以把全部内容推送到 heroku 了。

推送的第一步,是上传文件。

Heroku 发现咱们推送的是一个 Python App ,所以自动执行许多安装设置工作。

这些安装和配置做完后,会出现下面这样的提示。

到这里,你的 Web 应用部署就搞定了。

回到浏览器里,用下图中标红的这个按钮开启你自己的应用吧。

思考

尝试过之后,你应该不难发现,Streamlit 给你带来了什么。

如果你学过 Javascript 和 Flask, Django 等 Web 应用开发技术,Streamlit 可以加快你的 Web 应用开发与测试进程。

如果你还没有学过上述技术, Streamlit 就可以给你赋能,让你一下子有了把数据分析结果变成产品的能力。

给你讲点儿更激进的。

有人已经希望能用它替代掉 Flask 用于产品发布了。

还有人说,将来写技术文档,也应该充分使用 Streamlit 。

甚至,还把它比作了数据科学界的 iPhone 。

这里,它是借喻 iPhone 开启智能手机时代,说明 Streamlit 的划时代性。

我不希望你也变得如此激进。

因为这里提到的每一种功用,现在还都有非常专业的工具做的更好,而且新的工具也在不断涌现。

例如说,我们在多个教程中一直使用 Jupyter Notebook 。

现在凭借 Voila 扩展的加持,你也可以很轻松地把 Jupyter Notebook 变成 Web app ,而且可以免费运行在 mybinder 上面

但是,你可以看到,一个新的工具,以一种简单,而不是更繁复的办法,解决一个功能痛点,是一件多么令人欣喜的事儿。

看了这篇文章,可能会给你一种误解,似乎 JavaScript 为代表的前端编程技术,再也不需要学了。

其实不是这样的。

可以想象,开发门槛降低以后,将来会有更多的人使用 Python 来做 Web 应用。

用 Streamlit 这样的方法,他们只是开发出了一个原型。

要是想打造精品,就必须精细调控很多细节。

这时候, Javascript 是绕不过去的。

如果你精通 Javascript ,那你潜在的合作对象一下子就多了起来,你掌握的这门技术,也就有了更大的价值。

还记得吗?我不止一次给你强调过,协作网络更重要。忘了的话,记得复习《学 Python ,能提升你的竞争力吗?》。

小结

本文我为你介绍了 Streamlit ,它可以让你用 Python 脚本编写简洁实用的交互式 Web 应用。

通过学习本文,希望你掌握了以下知识点:

  • 现在你有了一种选择,仅用纯 Python 做一个完整的交互式数据分析产品出来;
  • 如何在读取数据等常用重复操作中,使用 st.cache 装饰器提升速度与效率;
  • 如何使用滑动条、下拉框等基本组件;
  • 如何在网页上输出文字、表格和图像;
  • 如何把你本地构建和测试后的 Web 应用部署到 Heroku 上,以发布给你的合作者与客户。

咱们是以数据分析和可视化为例,进行了讲解。而且为了讲解的清晰,我们只介绍了 Streamlit 可实现功能的一小部分。但请注意,即便是目前, Streamlit 能帮你达成的目标,也远远不止于此。

Reference

1、 https://github.com/streamlit/streamlit
2、 https://sspai.com/post/58474
3、 Streamlit开发手册 http://cw.hubwiz.com/card/c/streamlit-manual/

打赏

微信 微信 支付宝 支付宝
万分感谢