数据科学是当前Google上最热门的搜索话题之一。由于其在现实世界应用中的高需求和广泛使用,越来越多的开发者社区正在开发新的框架和库,以帮助数据科学家和研究人员完成日常任务。Streamlit就是这样一个库,它允许用户快速构建数据应用。它与NumPy、Pandas、Matplotlib等Python库无缝集成。
Streamlit是一个开源的Python库,用于创建和共享数据Web应用。它在数据科学社区逐渐获得了大量关注。由于开发数据科学Web应用的便捷性,许多开发者将其纳入日常工作流程。Streamlit的GitHub仓库拥有超过14.1k的星标和1.2k的分支。在幕后,它使用React作为前端框架来在屏幕上渲染数据。因此,React开发者可以轻松地通过少量代码更改来操作UI。
要继续阅读本文,请确保熟悉Python,并满足以下本地开发环境要求。
设置:使用virtualenv在选择的任何目录中创建一个虚拟环境。如果使用的是Pycharm IDE,或者已经知道如何为项目设置它,可以跳过以下步骤。
virtualenv env
source ./env/bin/activate
通过在终端输入以下命令创建一个requirements.txt文件:
pip freeze > requirements.txt
在同一目录下创建一个新的Python文件app.py。
安装:要将Streamlit安装到Python应用程序中,请在终端中输入以下命令:
pip install 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
输出应该与下面的截图类似。
完整的代码和数据文件可以在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')