利用Streamlit 做一个数据可视化工具
Streamlit 是一个用于机器学习、数据可视化的 Python 框架,可以非常快的做出一个在线的Web应用,不需要前端的知识。Streamlit可以做出灵活并且可交互的数据可视化,还可以向其他人分享。
Windows 安装:
在 Anaconda下创建一个环境,
pip install streamlit
运行 hello:
streamlit hello
会在浏览器中打开一个demo的页面,如果没有也可以根据命令行里的地址打开网页。在这里就可以看到数据可视化的 DataFrame Demo。
demo
想要运行自己的python程序, 输入命令:
$ python -m streamlit run your_script.py
# 相当于
$ streamlit run your_script.py
如果想做一个自己的数据可视化工具,首先需要读入数据。Streamlit支持 “magic commands”,即不需要调用write就可以在你的app里显示出来,比如:
import streamlit as st
import pandas as pd
df = pd.DataFrame({
'first column': [1, 2, 3, 4],
'second column': [10, 20, 30, 40]
})
df
就会得到这样的显示:
点击column还可以进行排序。利用pandas命令还可以对最大值进行高亮,df.style.highlight_max(axis=0)
如果我们的数据很多,想要筛选出来满足某个条件的数据并展示出来,就需要一个选择框:
option = st.selectbox(
'Which number do you like best?',
df['first column'])
'You selected: ', option
df[df['first column']==option]
呈现结果如下:
如果想要多个并列的选择:
col1, col2 = st.columns(2)
with col1:
option1 = st.selectbox(
'selecte first column',
df['first column'])
with col2:
option2 = st.selectbox(
'selecte second column',
df['second column'])
df[(df['first column']==option1) & (df['second column']==option2)]
每一次修改都会重新运行一次加载数据的流程,如果你的数据很大,可以用@st.cache
,可以直接读缓存里加载的数据:
@st.cache # 👈 This function will be cached
def load_data(path):
df = pd.read_csv(path)
return df
如果想要画图,st.line_chart(df)
其他各种可视化以及插入图片等可以查看文档,基本上都是很好理解的用法。
完整代码:
import streamlit as st
import pandas as pd
@st.cache # 👈 This function will be cached
def load_data(path):
df = pd.read_csv(path)
return df
# df = load_data(path)
df = pd.DataFrame({
'first column': [1, 2, 3, 4],
'second column': [10, 20, 30, 40]
})
col1, col2 = st.columns(2)
with col1:
option1 = st.selectbox(
'selecte first column',
df['first column'])
with col2:
option2 = st.selectbox(
'selecte second column',
df['second column'])
df[(df['first column']==option1) & (df['second column']==option2)]
st.line_chart(df)
文档:
https://docs.streamlit.io/library/api-reference
教程:
https://zhuanlan.zhihu.com/p/163927661
https://juejin.cn/post/7044757186064416798
其他Demo:
https://github.com/streamlit/demo-self-driving