Streamlit入门与应用

数据科学是当前Google上最热门的搜索话题之一。由于其在现实世界应用中的高需求和广泛使用,越来越多的开发者社区正在开发新的框架和库,以帮助数据科学家和研究人员完成日常任务。Streamlit就是这样一个库,它允许用户快速构建数据应用。它与NumPy、Pandas、Matplotlib等Python库无缝集成。

Streamlit简介

Streamlit是一个开源的Python库,用于创建和共享数据Web应用。它在数据科学社区逐渐获得了大量关注。由于开发数据科学Web应用的便捷性,许多开发者将其纳入日常工作流程。Streamlit的GitHub仓库拥有超过14.1k的星标和1.2k的分支。在幕后,它使用React作为前端框架来在屏幕上渲染数据。因此,React开发者可以轻松地通过少量代码更改来操作UI。

先决条件、设置和安装

要继续阅读本文,请确保熟悉Python,并满足以下本地开发环境要求。

  • Python版本 >= 3.XXX(推荐3.7)
  • pip
  • virtualenv
  • Pycharm或任何其他代码编辑器

设置:使用virtualenv在选择的任何目录中创建一个虚拟环境。如果使用的是Pycharm IDE,或者已经知道如何为项目设置它,可以跳过以下步骤。

virtualenv env source ./env/bin/activate

通过在终端输入以下命令创建一个requirements.txt文件:

pip freeze > requirements.txt

在同一目录下创建一个新的Python文件app.py。

安装:要将Streamlit安装到Python应用程序中,请在终端中输入以下命令:

pip install streamlit

开发第一个Streamlit应用

打开app.py文件并复制以下代码:

# 导入语句 import streamlit as st import numpy as np import pandas as pd

在应用中添加标题和文本:

st.title('Hello World') st.write("欢迎使用第一个Streamlit应用")

通过在终端输入以下命令运行应用:

streamlit run app.py

输出应该与下面的截图类似。

Streamlit的构建模块

完整的代码和数据文件可以在GitHub仓库中找到。

简而言之,开发Streamlit应用的方式与编写任何Python脚本相同。Streamlit提供了用于用户交互的小部件和易于使用的函数,以在屏幕上渲染数据。在本节中,对于每个问题,将实现一个合适的答案代码。

如何在屏幕上显示数据?传统上,任何数据科学Web应用中的数据可以是数据框、文本、图表、代码或媒体。让看看代码如何在应用中实现上述所有内容。

import streamlit as st import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from PIL import Image import requests

标题和子标题:

st.title("Life Expectancy By Country") st.write("Life Expectancy Data of India and USA from the year 1960 till 2016.")

多列支持:

col1, col2 = st.beta_columns(2) IN_flag = Image.open(r"c:UsersHPDesktopdataappIN.jpg") col1.header("INDIA") col1.image(IN_flag, use_column_width=True) US_flag = Image.open(r"c:UsersHPDesktopdataappUS.png") col2.header("USA") col2.image(US_flag, use_column_width=True)

读取CSV并显示前六行:

df = pd.read_csv('lf.csv') st.write(df.head())

根据复选框显示完整数据:

if st.checkbox('show full data'): df

显示代码:

st.write('Displaying Code in Streamlit app') with st.echo(): # square function def square(x): print(x*x) # cube function def cube(x): print(x*x*x) square(5) #output 25 cube(5) # output 125

Streamlit提供了易于使用的函数来在屏幕上写入数据。使用Streamlit库中的标题和写入方法来在应用中显示它。还可以在上述代码中看到,首先使用Pandas包从CSV文件中将数据集加载到数据框中,然后将数据框的前六行渲染到屏幕上。还使用Pillow库显示图像。Streamlit库的echo命令为提供了一种将代码添加到应用中的方法。

小部件允许向数据Web应用添加交互性。Streamlit提供了按钮、复选框、输入文本、侧边栏等小部件,使用户能够直接通过UI与数据进行交互,而无需实现代码。让在下面的代码中查看每一个。在app.py文件中添加以下代码。

# 显示条形图和搜索输入的数据 _input = st.text_input("Enter Year to Search") if _input: _df = df[df['year'] == int(_input)] if len(_df['year'])>0: _df if len(_df['year'])>0: sns.set_theme(style="whitegrid") fig, ax = plt.subplots() fig = plt.figure(figsize=(7, 4)) ax = sns.barplot(data=_df, y="Lf-overall", x="year", hue="country", palette="tab20_r") st.pyplot(fig) else: st.write('Data Does Not Exist in the Database')

输出

通过输入文本小部件,在数据框内创建了一个搜索功能,通过该功能可以计算并绘制印度和美国预期寿命的图表。

Streamlit还提供了一种在侧边栏上添加信息和小部件的方法,就像许多现代Web应用一样。让在侧边栏上添加更多交互式小部件。在app.py文件中添加以下代码。

# 侧边栏列 st.sidebar.title('Sidebar Widgets') # 单选按钮 rating = st.sidebar.radio('Are You Happy with the Example', ('Yes', 'No', 'Not Sure')) if rating == 'Yes': st.sidebar.success('Thank You for Selecting Yes') elif rating == 'No': st.sidebar.info('Thank You for Selecting No') elif rating == 'Not Sure': st.sidebar.info('Thank You for Selecting Not sure') # 选择框 rating = st.sidebar.selectbox("How much would you rate this App? ", ['5 Stars', '4 Stars', '3 Stars', '2 Stars', '1 Star']) st.sidebar.success(rating) st.sidebar.write('Find Square of a Number') # 滑块 get_number = st.sidebar.slider("Select a Number", 1, 10) st.sidebar.write('Square of Number', get_number, 'is', get_number*get_number)

输出

如何在屏幕上显示API数据?

使用Streamlit,还可以从RESTful API获取和显示数据。如果有人对react.js有所了解,甚至可以使用它来构建Web应用。但是,该主题的相关性和实现超出了本文的范围。

# 显示API数据 API_URL = 'https://cleanuri.com/api/v1/shorten' st.subheader('URL SHORTNER') _url = st.text_input('Enter URL') pressed = st.button('Get Short Link') if pressed: if _url != '': data = {'url': _url} r = requests.post(API_URL, data=data) st.write(r.json()) else: st.write('Please enter the right URL first')
  • Streamlit的构建模块
  • 简要讨论了库提供的最常见方法和小部件。
  • 还使用免费的cleanuri.com API创建了一个URL缩短器功能。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485