Streamlit是个啥?简单来说,它就是一个让你的Python代码瞬间变身Web应用的魔法棒。不需要你懂HTML、CSS那些复杂的前端技术,只需要写Python代码,Streamlit就能帮你生成漂亮的网页。
来,咱们先安装一下Streamlit:
pip install streamlit
安装完成后,咱们来写个简单的例子,感受一下Streamlit的魔力:
import streamlit as st# 设置页面标题st.title('Hello, Streamlit!')# 显示文本st.write('这是一个简单的Streamlit应用示例。')# 显示数字st.write('这里是一个数字:', 42)
然后,在命令行里运行:
streamlit run your_script.py
你的浏览器就会自动打开一个新标签页,显示你刚刚写的那个简单的Streamlit应用。怎么样,是不是很简单?
二、添加交互元素Streamlit的厉害之处,在于它能让你轻松添加各种交互元素,比如按钮、输入框、滑块等。这些元素能让你的应用变得更加生动有趣。
2.1 按钮咱们先来添加一个按钮:
import streamlit as st# 设置页面标题st.title('带有按钮的Streamlit应用')# 添加一个按钮if st.button('点击我'): st.write('按钮被点击啦!')
运行这个代码,你会看到一个按钮,当你点击它时,会显示“按钮被点击啦!”的提示。
2.2 输入框接下来,咱们添加一个输入框,让用户可以输入文本:
import streamlit as st# 设置页面标题st.title('带有输入框的Streamlit应用')# 添加一个输入框user_input = st.text_input('请输入一些文字:')# 显示用户输入的内容st.write('你输入的是:', user_input)
现在,你可以在这个输入框里输入文字,然后在下方看到你输入的内容。
2.3 滑块滑块也是个很好玩的交互元素,你可以用它来调整数值:
import streamlit as st# 设置页面标题st.title('带有滑块的Streamlit应用')# 添加一个滑块slider_value = st.slider('选择一个数值:', 0, 100)# 显示滑块的值st.write('你选择的数值是:', slider_value)
这个滑块可以让你在0到100之间选择一个数值,并实时显示你选择的值。
三、显示图表数据分析怎么能少了图表呢?Streamlit也支持显示各种图表,比如折线图、柱状图等。咱们用matplotlib和pandas来生成一些数据,然后用Streamlit显示出来。
3.1 折线图import streamlit as stimport matplotlib.pyplot as pltimport pandas as pdimport numpy as np# 设置页面标题st.title('带有折线图的Streamlit应用')# 生成一些数据np.random.seed(0)data = pd.DataFrame({ '时间': pd.date_range(start='2023-01-01', periods=100, freq='D'), '数值': np.random.randn(100).cumsum()})# 用matplotlib绘制折线图fig, ax = plt.subplots()ax.plot(data['时间'], data['数值'])ax.set_xlabel('时间')ax.set_ylabel('数值')# 在Streamlit中显示图表st.pyplot(fig)
运行这个代码,你会看到一个漂亮的折线图,展示了随机生成的数据随时间的变化情况。
3.2 柱状图柱状图也很常用,咱们再来试试:
import streamlit as stimport matplotlib.pyplot as pltimport pandas as pd# 设置页面标题st.title('带有柱状图的Streamlit应用')# 生成一些分类数据categories = ['A', 'B', 'C', 'D', 'E']values = [10, 20, 15, 30, 25]# 用matplotlib绘制柱状图fig, ax = plt.subplots()ax.bar(categories, values)ax.set_xlabel('分类')ax.set_ylabel('数值')# 在Streamlit中显示图表st.pyplot(fig)
这个柱状图展示了不同分类下的数值大小,一目了然。
四、布局和样式Streamlit还提供了一些布局和样式的功能,让你的应用看起来更加美观和整洁。
4.1 布局你可以使用st.column和st.beta_expander等功能来创建复杂的布局。比如,把内容分成两列:
import streamlit as st# 设置页面标题st.title('带有布局的Streamlit应用')# 创建两列布局col1, col2 = st.beta_columns(2)# 在第一列中添加内容with col1: st.write('这是第一列的内容。') st.button('第一列的按钮')# 在第二列中添加内容with col2: st.write('这是第二列的内容。') st.slider('第二列的滑块:', 0, 100)
4.2 样式你还可以设置一些样式,比如改变字体大小、颜色等。不过,这部分功能比较高级,咱们今天就不深入探讨了。
五、实战:创建一个简单的数据应用最后,咱们来实战一下,创建一个简单的数据应用。这个应用会读取一个CSV文件,显示数据,并允许用户通过滑块来选择数据的一个范围进行可视化。
import streamlit as stimport pandas as pdimport matplotlib.pyplot as plt# 设置页面标题st.title('简单的数据应用')# 上传CSV文件uploaded_file = st.file_uploader('上传一个CSV文件:', type=['csv'])if uploaded_file is not None: # 读取CSV文件 df = pd.read_csv(uploaded_file) # 显示数据 st.write('数据预览:') st.dataframe(df.head()) # 添加一个滑块来选择数据的范围 lower_bound = st.slider('选择数据的下界:', df['数值'].min(), df['数值'].max()) upper_bound = st.slider('选择数据的上界:', df['数值'].min(), df['数值'].max()) # 过滤数据 filtered_df = df[(df['数值'] >= lower_bound) & (df['数值'] <= upper_bound)] # 显示过滤后的数据 st.write('过滤后的数据:') st.dataframe(filtered_df) # 绘制过滤后数据的折线图 fig, ax = plt.subplots() ax.plot(filtered_df['时间'], filtered_df['数值']) ax.set_xlabel('时间') ax.set_ylabel('数值') st.pyplot(fig)
这个应用允许用户上传一个CSV文件,然后通过滑块选择数据的范围进行可视化。是不是很有意思?
温馨提示:在实际应用中,你可能需要对用户上传的文件进行一些验证,比如检查文件是否为CSV格式、是否包含必要的列等。
好啦,今天咱们就聊到这里。Streamlit这个库真的很强大,能让你轻松创建交互式的Web应用。希望这篇文章能帮到你,让你在数据分析和机器学习的道路上更加得心应手。如果你有任何问题或者建议,欢迎在评论区留言哦!