Python開(kāi)源庫(kù)?Streamlit?應(yīng)用案例
一、引言
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的時(shí)代,數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師常常面臨一個(gè)挑戰(zhàn):如何將他們復(fù)雜而精妙的數(shù)據(jù)分析和模型成果,以一種直觀、交互且易于理解的方式展示給更廣泛的受眾。傳統(tǒng)的 Web 開(kāi)發(fā)技術(shù)雖然強(qiáng)大,但對(duì)于專注于數(shù)據(jù)處理和算法的專業(yè)人員來(lái)說(shuō),往往需要投入大量的時(shí)間和精力去學(xué)習(xí)和掌握 HTML、CSS、JavaScript 等前端技術(shù),這無(wú)疑增加了額外的負(fù)擔(dān),分散了他們?cè)诤诵臉I(yè)務(wù)上的注意力。
Streamlit 的出現(xiàn),猶如一道曙光,為這一困境提供了完美的解決方案。它是一個(gè)開(kāi)源的 Python 框架,旨在讓數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師能夠快速、輕松地創(chuàng)建交互式 Web 應(yīng)用程序,而無(wú)需深厚的前端開(kāi)發(fā)背景。通過(guò) Streamlit,只需使用熟悉的 Python 語(yǔ)言,就能將數(shù)據(jù)分析腳本轉(zhuǎn)化為功能齊全、美觀大方的 Web 應(yīng)用,實(shí)現(xiàn)數(shù)據(jù)可視化、用戶交互以及模型部署等多種功能,極大地提高了工作效率,加速了數(shù)據(jù)驅(qū)動(dòng)項(xiàng)目的開(kāi)發(fā)和落地。
二、Streamlit 基礎(chǔ)入門(mén)
2.1 安裝 Streamlit
安裝 Streamlit 非常簡(jiǎn)單,如果你已經(jīng)安裝了 Python 和 pip(Python 的包管理工具),那么在命令行中輸入以下命令即可完成安裝:
pip install streamlit
安裝過(guò)程中,pip 會(huì)自動(dòng)下載并安裝 Streamlit 及其所有依賴項(xiàng)。安裝完成后,可以通過(guò)以下命令來(lái)驗(yàn)證安裝是否成功:
streamlit hello
執(zhí)行上述命令后,Streamlit 會(huì)啟動(dòng)一個(gè)示例應(yīng)用程序,并在默認(rèn)瀏覽器中打開(kāi)該應(yīng)用。這個(gè)示例應(yīng)用展示了 Streamlit 的一些基本功能和特性,讓你對(duì) Streamlit 有一個(gè)初步的直觀感受。如果能夠正常看到示例應(yīng)用的頁(yè)面,說(shuō)明 Streamlit 已經(jīng)成功安裝在你的系統(tǒng)中,可以開(kāi)始使用它來(lái)創(chuàng)建自己的應(yīng)用程序了。
2.2 第一個(gè) Streamlit 應(yīng)用
下面我們通過(guò)一個(gè)簡(jiǎn)單的 “Hello, Streamlit!” 應(yīng)用來(lái)了解 Streamlit 應(yīng)用的基本結(jié)構(gòu)和創(chuàng)建過(guò)程。創(chuàng)建一個(gè)新的 Python 文件,例如命名為hello_streamlit.py,在文件中輸入以下代碼:
import streamlit as st
# 設(shè)置頁(yè)面標(biāo)題
st.title('Hello, Streamlit!')
# 顯示一段文本
st.write('This is my first Streamlit app.')上述代碼中,首先導(dǎo)入了 Streamlit 庫(kù),并將其別名為st,這是使用 Streamlit 的標(biāo)準(zhǔn)做法。然后使用st.title()函數(shù)設(shè)置了應(yīng)用的頁(yè)面標(biāo)題為 “Hello, Streamlit!”,st.write()函數(shù)用于在頁(yè)面上顯示一段文本內(nèi)容。
保存好代碼后,在命令行中進(jìn)入到該 Python 文件所在的目錄,然后執(zhí)行以下命令來(lái)運(yùn)行這個(gè) Streamlit 應(yīng)用:
streamlit run hello_streamlit.py
命令執(zhí)行后,Streamlit 會(huì)啟動(dòng)一個(gè)本地服務(wù)器,并自動(dòng)在默認(rèn)瀏覽器中打開(kāi)應(yīng)用頁(yè)面。你將看到頁(yè)面上顯示著設(shè)置的標(biāo)題和文本內(nèi)容,這就是一個(gè)最簡(jiǎn)單的 Streamlit 應(yīng)用。每次修改代碼并保存后,Streamlit 應(yīng)用會(huì)自動(dòng)實(shí)時(shí)更新頁(yè)面顯示,無(wú)需手動(dòng)重啟服務(wù)器,這大大提高了開(kāi)發(fā)效率,讓你能夠快速看到代碼修改后的效果。
2.3 Streamlit 應(yīng)用的運(yùn)行機(jī)制
當(dāng)你執(zhí)行streamlit run命令時(shí),Streamlit 會(huì)啟動(dòng)一個(gè)本地服務(wù)器。這個(gè)服務(wù)器會(huì)讀取你編寫(xiě)的 Python 腳本,并解析其中的 Streamlit 代碼。Streamlit 會(huì)根據(jù)代碼中定義的各種元素(如標(biāo)題、文本、圖表、交互組件等),在瀏覽器端生成相應(yīng)的 HTML、CSS 和 JavaScript 代碼,從而構(gòu)建出一個(gè)完整的 Web 應(yīng)用界面。
Streamlit 的一個(gè)重要特性是實(shí)時(shí)更新。它會(huì)持續(xù)監(jiān)控 Python 腳本文件的變化,一旦檢測(cè)到文件被修改并保存,就會(huì)立即重新運(yùn)行腳本,并將新的界面更新推送到瀏覽器端。這種實(shí)時(shí)反饋機(jī)制使得開(kāi)發(fā)過(guò)程變得非常流暢,你可以快速嘗試不同的想法,修改代碼后馬上就能看到效果,就像在使用一個(gè)交互式的 Python shell 一樣方便。同時(shí),Streamlit 還負(fù)責(zé)處理與瀏覽器的通信、用戶輸入的接收和處理等底層細(xì)節(jié),開(kāi)發(fā)者無(wú)需關(guān)心這些復(fù)雜的 Web 開(kāi)發(fā)技術(shù),只需專注于用 Python 編寫(xiě)應(yīng)用的邏輯和展示內(nèi)容即可。
三、Streamlit 核心功能詳解
3.1 豐富的文本與標(biāo)題展示
在 Streamlit 中,文本和標(biāo)題的展示是構(gòu)建應(yīng)用的基礎(chǔ)。除了前面示例中使用的st.title()和st.write()函數(shù)外,還有其他多種方式來(lái)呈現(xiàn)不同樣式和層次的文本。
- st.header():用于創(chuàng)建一級(jí)標(biāo)題,字體大小小于st.title(),通常用于劃分頁(yè)面的主要部分。例如:
st.header('This is a header')- st.subheader():創(chuàng)建二級(jí)標(biāo)題,字體大小小于st.header(),用于進(jìn)一步細(xì)分內(nèi)容。示例:
st.subheader('This is a subheader')- st.markdown():這個(gè)函數(shù)非常強(qiáng)大,它允許你使用 Markdown 語(yǔ)法來(lái)編寫(xiě)文本內(nèi)容。Markdown 是一種輕量級(jí)的標(biāo)記語(yǔ)言,通過(guò)簡(jiǎn)單的符號(hào)(如#表示標(biāo)題,*表示列表等)就能創(chuàng)建出具有豐富格式的文本。例如:
st.markdown('### This is a Markdown - style header')
st.markdown('* This is an item in an unordered list')
st.markdown('1. This is an item in an ordered list')通過(guò)st.markdown(),你可以輕松實(shí)現(xiàn)文本的加粗、斜體、鏈接、圖片嵌入等復(fù)雜格式。例如,要顯示加粗文本可以使用**text**,顯示斜體文本可以使用*text*,添加鏈接可以使用[link text](url)的格式。
3.2 數(shù)據(jù)可視化
數(shù)據(jù)可視化是 Streamlit 的一大核心功能,它使得數(shù)據(jù)科學(xué)家能夠?qū)?fù)雜的數(shù)據(jù)以直觀、易懂的圖表形式展示出來(lái)。Streamlit 支持多種流行的數(shù)據(jù)可視化庫(kù),如 Matplotlib、Seaborn、Plotly、Altair 等,并且能夠與這些庫(kù)無(wú)縫集成,讓你可以使用熟悉的繪圖語(yǔ)法在 Streamlit 應(yīng)用中創(chuàng)建精美的可視化圖表。
- 使用 Matplotlib 進(jìn)行可視化:Matplotlib 是 Python 中最常用的繪圖庫(kù)之一。在 Streamlit 中使用 Matplotlib 非常簡(jiǎn)單,首先需要導(dǎo)入 Matplotlib 庫(kù),然后創(chuàng)建圖表對(duì)象并進(jìn)行繪圖操作,最后使用st.pyplot()函數(shù)將圖表顯示在 Streamlit 應(yīng)用中。例如,繪制一個(gè)簡(jiǎn)單的折線圖:
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
# 生成數(shù)據(jù)
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 創(chuàng)建圖表
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Sine Wave')
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 在Streamlit中顯示圖表
st.pyplot(fig)- 使用 Seaborn 進(jìn)行可視化:Seaborn 是基于 Matplotlib 的統(tǒng)計(jì)數(shù)據(jù)可視化庫(kù),它提供了更高級(jí)、美觀的繪圖風(fēng)格。同樣,在 Streamlit 中使用 Seaborn 也很便捷。例如,繪制一個(gè) Seaborn 的散點(diǎn)圖:
import streamlit as st
import seaborn as sns
import pandas as pd
import numpy as np
# 生成數(shù)據(jù)
data = pd.DataFrame({'x': np.random.randn(100),'y': np.random.randn(100)
})
# 創(chuàng)建Seaborn散點(diǎn)圖
fig, ax = plt.subplots()
sns.scatterplot(x='x', y='y', data=data, ax=ax)
ax.set_title('Scatter Plot')
# 在Streamlit中顯示圖表
st.pyplot(fig)- 使用 Plotly 創(chuàng)建交互式圖表:Plotly 生成的圖表具有交互性,用戶可以在瀏覽器中通過(guò)鼠標(biāo)操作(如縮放、平移、懸停查看數(shù)據(jù)點(diǎn)信息等)來(lái)更好地探索數(shù)據(jù)。在 Streamlit 中使用 Plotly,首先要導(dǎo)入 Plotly 庫(kù),然后創(chuàng)建 Plotly 圖表對(duì)象,最后使用st.plotly_chart()函數(shù)展示圖表。例如,創(chuàng)建一個(gè) Plotly 的柱狀圖:
import streamlit as st
import plotly.express as px
import pandas as pd
# 生成數(shù)據(jù)
data = pd.DataFrame({
'Category': ['A', 'B', 'C', 'D'],
'Value': [25, 40, 15, 30]
})
# 創(chuàng)建Plotly柱狀圖
fig = px.bar(data, x='Category', y='Value', title='Bar Chart')
# 在Streamlit中顯示圖表
st.plotly_chart(fig)- 使用 Altair 進(jìn)行可視化:Altair 是一個(gè)聲明式統(tǒng)計(jì)可視化庫(kù),其語(yǔ)法簡(jiǎn)潔直觀。在 Streamlit 中使用 Altair 時(shí),創(chuàng)建好 Altair 圖表對(duì)象后,使用st.altair_chart()函數(shù)進(jìn)行展示。例如,繪制一個(gè) Altair 的折線圖:
import streamlit as st
import altair as alt
import pandas as pd
import numpy as np
# 生成數(shù)據(jù)
data = pd.DataFrame({
'x': np.linspace(0, 10, 100),
'y': np.sin(np.linspace(0, 10, 100))
})
# 創(chuàng)建Altair折線圖
chart = alt.Chart(data).mark_line().encode(
x='x',y='y'
).properties(title='Altair Line Chart')
# 在Streamlit中顯示圖表
st.altair_chart(chart)3.3 交互式組件
Streamlit 提供了豐富的交互式組件,這些組件允許用戶與應(yīng)用進(jìn)行交互,從而實(shí)現(xiàn)更加動(dòng)態(tài)和個(gè)性化的數(shù)據(jù)展示與分析。通過(guò)這些交互式組件,用戶可以輸入數(shù)據(jù)、選擇選項(xiàng)、調(diào)整參數(shù)等,應(yīng)用會(huì)根據(jù)用戶的操作實(shí)時(shí)更新顯示內(nèi)容。
- 按鈕(Button):st.button()函數(shù)用于創(chuàng)建一個(gè)按鈕。當(dāng)按鈕被點(diǎn)擊時(shí),可以觸發(fā)相應(yīng)的操作。例如,創(chuàng)建一個(gè)簡(jiǎn)單的按鈕,并在按鈕被點(diǎn)擊時(shí)顯示一條消息:
import streamlit as st
if st.button('Click me'):
st.write('You clicked the button!')- 文本輸入框(Text Input):st.text_input()函數(shù)創(chuàng)建一個(gè)文本輸入框,用戶可以在其中輸入文本內(nèi)容。應(yīng)用可以獲取用戶輸入的文本并進(jìn)行處理。例如,獲取用戶輸入的名字并進(jìn)行問(wèn)候:
import streamlit as st
name = st.text_input('Enter your name')
if name:
st.write(f'Hello, {name}!')- 數(shù)字輸入框(Number Input):st.number_input()函數(shù)用于創(chuàng)建一個(gè)數(shù)字輸入框,用戶可以在其中輸入數(shù)字??梢栽O(shè)置輸入框的最小值、最大值、默認(rèn)值等參數(shù)。例如,創(chuàng)建一個(gè)數(shù)字輸入框,讓用戶輸入年齡:
import streamlit as st
age = st.number_input('Enter your age', min_value = 0, max_value = 120, value = 25)
st.write(f'Your age is {age}')- 滑塊(Slider):st.slider()函數(shù)創(chuàng)建一個(gè)滑塊,用戶可以通過(guò)拖動(dòng)滑塊來(lái)選擇一個(gè)范圍內(nèi)的值??梢栽O(shè)置滑塊的最小值、最大值、步長(zhǎng)、默認(rèn)值等。例如,使用滑塊來(lái)調(diào)整正弦波的頻率:
import streamlit as st
import numpy as np
import matplotlib.pyplot as plt
# 設(shè)置頁(yè)面標(biāo)題
st.title('Sine Wave with Adjustable Frequency')
# 創(chuàng)建滑塊,允許用戶調(diào)整頻率
frequency = st.slider('Select frequency:', 1, 10, 5)
# 生成數(shù)據(jù)
x = np.linspace(0, 2 * np.pi, 1000)
y = np.sin(frequency * x)
# 繪制圖表
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Sine Wave')
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 在Streamlit中顯示圖表
st.pyplot(fig)- 下拉選擇框(Selectbox):st.selectbox()函數(shù)創(chuàng)建一個(gè)下拉選擇框,用戶可以從預(yù)定義的選項(xiàng)中選擇一個(gè)。例如,創(chuàng)建一個(gè)下拉選擇框,讓用戶選擇喜歡的顏色:
import streamlit as st
colors = ['Red', 'Green', 'Blue', 'Yellow']
selected_color = st.selectbox('Select your favorite color', colors)
st.write(f'You selected {selected_color}')- 多選框(Multiselect):st.multiselect()函數(shù)創(chuàng)建一個(gè)多選框,用戶可以從多個(gè)選項(xiàng)中選擇一個(gè)或多個(gè)。例如,創(chuàng)建一個(gè)多選框,讓用戶選擇喜歡的水果:
import streamlit as st
fruits = ['Apple', 'Banana', 'Orange', 'Mango', 'Strawberry']
selected_fruits = st.multiselect('Select your favorite fruits', fruits)
st.write(f'You selected {selected_fruits}')- 復(fù)選框(Checkbox):st.checkbox()函數(shù)創(chuàng)建一個(gè)復(fù)選框,用戶可以勾選或取消勾選。例如,使用復(fù)選框來(lái)控制圖表的顯示:
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
# 設(shè)置頁(yè)面標(biāo)題
st.title('Show/Hide Plot')
# 創(chuàng)建復(fù)選框
show_plot = st.checkbox('Show plot')
if show_plot:
# 生成數(shù)據(jù)
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 繪制圖表
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Sine Wave')
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 在Streamlit中顯示圖表
st.pyplot(fig)3.4 文件上傳功能
在數(shù)據(jù)處理和分析中,經(jīng)常需要處理用戶上傳的文件。Streamlit 提供了便捷的文件上傳功能,允許用戶將本地文件上傳到應(yīng)用中進(jìn)行處理。使用st.file_uploader()函數(shù)可以創(chuàng)建一個(gè)文件上傳組件。例如,創(chuàng)建一個(gè)文件上傳組件,用于上傳 CSV 文件,并讀取和顯示文件內(nèi)容:
import streamlit as st
import pandas as pd
# 設(shè)置頁(yè)面標(biāo)題
st.title('File Upload Example')
# 創(chuàng)建文件上傳組件
uploaded_file = st.file_uploader('Choose a CSV file', type=['csv'])
if uploaded_file is not None:
try:
# 使用pandas讀取CSV文件
data = pd.read_csv(uploaded_file)
st.write('File uploaded successfully. Here is the data:')
st.dataframe(data)
except Exception as e:
st.write(f'Error reading the file: {e}')上述代碼中,st.file_uploader()函數(shù)的第一個(gè)參數(shù)是上傳組件的標(biāo)題,type=['csv']表示只允許上傳 CSV 文件。當(dāng)用戶選擇并上傳一個(gè)文件后,uploaded_file變量將包含上傳文件的相關(guān)信息。通過(guò)pd.read_csv(uploaded_file)可以讀取 CSV 文件的內(nèi)容,并使用st.dataframe()函數(shù)將數(shù)據(jù)以表格形式顯示在應(yīng)用頁(yè)面上。如果讀取文件過(guò)程中出現(xiàn)錯(cuò)誤,會(huì)捕獲異常并顯示相應(yīng)的錯(cuò)誤信息。Streamlit 還支持上傳其他類型的文件,如 Excel 文件(使用pandas的read_excel函數(shù)讀取)、圖像文件(使用PIL庫(kù)或OpenCV庫(kù)進(jìn)行處理)等,具體的處理方式根據(jù)文件類型和業(yè)務(wù)需求而定。
3.5 布局與容器
合理的布局和容器使用可以使 Streamlit 應(yīng)用的界面更加整潔、美觀和易于使用。Streamlit 提供了多種布局和容器選項(xiàng),幫助你更好地組織應(yīng)用中的元素。
- 列布局(Columns):使用st.columns()函數(shù)可以將頁(yè)面分為多列,在每一列中可以獨(dú)立放置不同的組件。例如,創(chuàng)建兩列布局,在第一列中顯示一個(gè)標(biāo)題,在第二列中顯示一個(gè)按鈕:
import streamlit as st
# 創(chuàng)建兩列布局
col1, col2 = st.columns(2)
with col1:
st.title('Column 1')
with col2:
if st.button('Button in Column 2'):
st.write('Button in Column 2 clicked')st.columns()函數(shù)接受一個(gè)整數(shù)參數(shù),表示要?jiǎng)?chuàng)建的列數(shù)。這里將頁(yè)面分為兩列,通過(guò)with語(yǔ)句分別在不同的列中添加組件。列的寬度會(huì)根據(jù)內(nèi)容自動(dòng)調(diào)整,也可以通過(guò)傳遞一個(gè)包含列寬比例的列表來(lái)指定列寬。例如,col1, col2 = st.columns([3, 1])表示第一列寬度是第二列寬度的三倍。
- 容器(Container):st.container()函數(shù)創(chuàng)建一個(gè)容器,你可以在容器中放置多個(gè)組件,將相關(guān)的組件組合在一起。容器可以幫助你更好地組織和管理應(yīng)用的結(jié)構(gòu)。例如,創(chuàng)建一個(gè)容器,在容器中添加標(biāo)題、文本和按鈕:
import streamlit as st
# 創(chuàng)建容器
container = st.container()
with container:
st.title('Container Example')
st.write('This is some text inside the container.')
if st.button('Button in Container'):
st.write('Button in container clicked')容器可以嵌套使用,從而創(chuàng)建更復(fù)雜的布局結(jié)構(gòu)。例如,可以在一個(gè)容器中再創(chuàng)建列布局,然后在列中放置其他組件。
- 側(cè)邊欄(Sidebar):側(cè)邊欄是 Streamlit 應(yīng)用中常用的布局元素,通常用于放置導(dǎo)航菜單、配置選項(xiàng)等。使用st.sidebar屬性可以在側(cè)邊欄中添加各種組件。例如,在側(cè)邊欄中添加一個(gè)標(biāo)題和一個(gè)下拉選擇框:
import streamlit as st
# 在側(cè)邊欄添加標(biāo)題
st.sidebar.title("應(yīng)用設(shè)置")
# 在側(cè)邊欄添加下拉選擇框
option = st.sidebar.selectbox(
'請(qǐng)選擇一個(gè)選項(xiàng)',
['選項(xiàng)1', '選項(xiàng)2', '選項(xiàng)3', '選項(xiàng)4']
)
# 在主界面顯示選擇結(jié)果
st.write(f'你選擇了: {option}')四、Streamlit 高級(jí)特性
**
4.1 狀態(tài)管理
在復(fù)雜的 Streamlit 應(yīng)用中,管理用戶交互產(chǎn)生的狀態(tài)至關(guān)重要。Streamlit 提供了st.session_state來(lái)幫助開(kāi)發(fā)者處理狀態(tài)相關(guān)的問(wèn)題。st.session_state是一個(gè)類似于字典的對(duì)象,用于存儲(chǔ)和管理應(yīng)用運(yùn)行過(guò)程中的各種狀態(tài)信息,比如用戶輸入的值、按鈕的點(diǎn)擊次數(shù)、數(shù)據(jù)的處理中間結(jié)果等 。
舉個(gè)例子,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器功能:
import streamlit as st
if 'count' not in st.session_state:
st.session_state.count = 0
def increment():
st.session_state.count += 1
st.button('Increment', on_click=increment)
st.write(f'Count: {st.session_state.count}')在上述代碼中,首先檢查st.session_state中是否存在count鍵,如果不存在則初始化其值為 0。當(dāng)用戶點(diǎn)擊按鈕時(shí),觸發(fā)increment函數(shù),更新st.session_state.count的值,從而實(shí)現(xiàn)計(jì)數(shù)器的功能。并且,即使頁(yè)面因用戶的其他操作重新加載,st.session_state中的狀態(tài)也會(huì)被保留,確保應(yīng)用狀態(tài)的一致性。
4.2 自定義主題
Streamlit 默認(rèn)提供了簡(jiǎn)潔的主題樣式,但開(kāi)發(fā)者可以根據(jù)項(xiàng)目需求和個(gè)人喜好來(lái)自定義應(yīng)用的主題。通過(guò)創(chuàng)建并配置.streamlit/config.toml文件,能夠修改應(yīng)用的背景顏色、字體樣式、組件顏色等外觀屬性。
創(chuàng)建.streamlit文件夾(如果不存在),在其中新建config.toml文件,并添加以下內(nèi)容來(lái)修改主題:
[theme] base = "light" primaryColor = "#FF5733" backgroundColor = "#F8F9FA" secondaryBackgroundColor = "#E9ECEF" textColor = "#212529" font = "sans serif"
上述配置中,base設(shè)置主題為淺色模式;primaryColor定義了主要顏色;backgroundColor和secondaryBackgroundColor分別設(shè)置背景和二級(jí)背景顏色;textColor設(shè)置文本顏色;font指定字體。保存文件后,重新運(yùn)行 Streamlit 應(yīng)用,就能看到自定義主題的效果。此外,還可以通過(guò)編程的方式在 Python 代碼中動(dòng)態(tài)設(shè)置主題,為應(yīng)用提供更靈活的外觀定制方案。
4.3 與機(jī)器學(xué)習(xí)模型集成
Streamlit 強(qiáng)大之處還在于能夠輕松集成機(jī)器學(xué)習(xí)模型,將模型預(yù)測(cè)功能嵌入到 Web 應(yīng)用中,實(shí)現(xiàn)模型的可視化部署。以 Scikit-learn 庫(kù)訓(xùn)練的簡(jiǎn)單線性回歸模型為例,展示如何進(jìn)行集成:
import streamlit as st
import numpy as np
from sklearn.linear_model import LinearRegression
# 生成模擬數(shù)據(jù)
x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 4, 6, 8, 10])
# 訓(xùn)練線性回歸模型
model = LinearRegression()
model.fit(x, y)
# Streamlit應(yīng)用
st.title("線性回歸預(yù)測(cè)")
user_input = st.number_input("輸入x值", min_value=0.0, max_value=10.0)
if user_input:
input_data = np.array([user_input]).reshape(-1, 1)
prediction = model.predict(input_data)
st.write(f"預(yù)測(cè)的y值為: {prediction[0]}")在這個(gè)示例中,先使用 Scikit-learn 訓(xùn)練一個(gè)簡(jiǎn)單的線性回歸模型,然后在 Streamlit 應(yīng)用中創(chuàng)建一個(gè)數(shù)字輸入框接收用戶輸入的x值,將該值傳入訓(xùn)練好的模型進(jìn)行預(yù)測(cè),并展示預(yù)測(cè)結(jié)果。實(shí)際應(yīng)用中,無(wú)論是復(fù)雜的深度學(xué)習(xí)模型,還是其他機(jī)器學(xué)習(xí)模型,都可以通過(guò)類似的方式與 Streamlit 集成,為用戶提供直觀的模型預(yù)測(cè)交互界面。
五、Streamlit 應(yīng)用部署
完成本地開(kāi)發(fā)后,需要將 Streamlit 應(yīng)用部署到服務(wù)器上,以便讓更多用戶訪問(wèn)。以下是幾種常見(jiàn)的部署方式:
5.1 Streamlit 社區(qū)云
Streamlit 社區(qū)云是最便捷的部署方式,它完全免費(fèi)且無(wú)需配置服務(wù)器。只需將應(yīng)用代碼上傳到 GitHub 倉(cāng)庫(kù),然后在 Streamlit 社區(qū)云平臺(tái)進(jìn)行簡(jiǎn)單的鏈接設(shè)置,即可完成部署。具體步驟如下:
- 將 Streamlit 應(yīng)用的所有代碼和依賴項(xiàng)(如requirements.txt文件)上傳到一個(gè)公開(kāi)的 GitHub 倉(cāng)庫(kù)。
- 訪問(wèn) Streamlit 社區(qū)云網(wǎng)站,使用 GitHub 賬號(hào)登錄。
- 按照平臺(tái)提示,選擇要部署的 GitHub 倉(cāng)庫(kù),配置相關(guān)參數(shù)(如分支、運(yùn)行命令等)。
- 點(diǎn)擊部署按鈕,等待平臺(tái)自動(dòng)構(gòu)建和部署應(yīng)用,部署完成后即可獲得應(yīng)用的訪問(wèn)鏈接。
5.2 部署到 Heroku
Heroku 是一個(gè)流行的云平臺(tái)即服務(wù)(PaaS),支持多種編程語(yǔ)言應(yīng)用的部署。部署 Streamlit 應(yīng)用到 Heroku 的步驟如下:
- 注冊(cè)并安裝 Heroku 命令行工具。
- 在應(yīng)用項(xiàng)目目錄下,創(chuàng)建Procfile文件(無(wú)文件擴(kuò)展名),并添加內(nèi)容web: streamlit run your_app.py(your_app.py替換為實(shí)際的應(yīng)用主文件)。
- 創(chuàng)建requirements.txt文件,列出應(yīng)用所需的所有 Python 依賴項(xiàng),如streamlit、numpy、pandas等。
- 初始化 Git 倉(cāng)庫(kù)(如果尚未初始化),提交代碼更改。
- 使用 Heroku 命令行工具登錄賬號(hào),創(chuàng)建新的應(yīng)用實(shí)例,將本地代碼推送到 Heroku 遠(yuǎn)程倉(cāng)庫(kù),觸發(fā)應(yīng)用的構(gòu)建和部署。
5.3 其他云平臺(tái)
除了上述方式,還可以將 Streamlit 應(yīng)用部署到 AWS、Google Cloud Platform、Microsoft Azure 等主流云平臺(tái)。以 AWS 為例,通常需要?jiǎng)?chuàng)建 EC2 實(shí)例或使用 AWS Elastic Beanstalk 等服務(wù),配置 Python 運(yùn)行環(huán)境,安裝 Streamlit 及其依賴,上傳應(yīng)用代碼,并進(jìn)行端口映射等相關(guān)配置,從而實(shí)現(xiàn)應(yīng)用的穩(wěn)定運(yùn)行和對(duì)外訪問(wèn) 。
六、Streamlit 實(shí)際應(yīng)用案例
6.1 數(shù)據(jù)探索與分析應(yīng)用
某電商公司使用 Streamlit 開(kāi)發(fā)了一個(gè)數(shù)據(jù)探索應(yīng)用,幫助業(yè)務(wù)人員快速分析銷售數(shù)據(jù)。通過(guò)文件上傳功能,業(yè)務(wù)人員可以上傳不同時(shí)間段的銷售 CSV 文件。應(yīng)用中利用交互式組件,如日期選擇器篩選銷售日期范圍,下拉選擇框選擇產(chǎn)品類別;結(jié)合數(shù)據(jù)可視化庫(kù),以柱狀圖展示各產(chǎn)品銷售額對(duì)比,折線圖呈現(xiàn)銷售額隨時(shí)間的變化趨勢(shì)。通過(guò)這些功能,業(yè)務(wù)人員能夠直觀地發(fā)現(xiàn)銷售數(shù)據(jù)中的規(guī)律和問(wèn)題,為決策提供有力支持。
6.2 機(jī)器學(xué)習(xí)模型演示應(yīng)用
一個(gè)機(jī)器學(xué)習(xí)研究團(tuán)隊(duì)開(kāi)發(fā)了一個(gè)圖像分類模型,使用 Streamlit 創(chuàng)建應(yīng)用來(lái)演示模型的效果。用戶可以通過(guò)文件上傳功能上傳本地圖片,應(yīng)用將圖片傳入模型進(jìn)行分類預(yù)測(cè),并在頁(yè)面上顯示原始圖片和預(yù)測(cè)結(jié)果。同時(shí),應(yīng)用還展示了模型的訓(xùn)練數(shù)據(jù)信息、評(píng)估指標(biāo)等內(nèi)容,方便用戶了解模型的性能和特點(diǎn),這種直觀的演示方式有助于向非技術(shù)人員展示機(jī)器學(xué)習(xí)模型的價(jià)值。
七、總結(jié)與展望
Streamlit 憑借其簡(jiǎn)單易用、功能強(qiáng)大的特點(diǎn),成為數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)工程師進(jìn)行快速原型開(kāi)發(fā)和應(yīng)用部署的首選工具之一。從基礎(chǔ)的安裝使用、豐富的核心功能,到高級(jí)的狀態(tài)管理、主題定制以及與機(jī)器學(xué)習(xí)模型的集成,再到多種靈活的部署方式和豐富的實(shí)際應(yīng)用案例,Streamlit 為數(shù)據(jù)驅(qū)動(dòng)的 Web 應(yīng)用開(kāi)發(fā)提供了一站式解決方案。
隨著開(kāi)源社區(qū)的不斷發(fā)展和更新迭代,未來(lái) Streamlit 有望引入更多創(chuàng)新功能,進(jìn)一步優(yōu)化性能和用戶體驗(yàn),與更多的工具和平臺(tái)實(shí)現(xiàn)深度集成。無(wú)論是數(shù)據(jù)科學(xué)領(lǐng)域的新手還是經(jīng)驗(yàn)豐富的專業(yè)人士,都能在 Streamlit 的世界中找到屬于自己的應(yīng)用開(kāi)發(fā)樂(lè)趣和價(jià)值,讓數(shù)據(jù)和模型以更直觀、更交互的方式展現(xiàn)出來(lái),推動(dòng)數(shù)據(jù)驅(qū)動(dòng)的創(chuàng)新和發(fā)展。
八、合規(guī)建議
Streamlit采用**Apache License 2.0**開(kāi)源許可協(xié)議, 完整許可文本見(jiàn):https://github.com/streamlit/streamlit/blob/main/LICENSE
九、參考資料
到此這篇關(guān)于Python開(kāi)源庫(kù) Streamlit 詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Python開(kāi)源庫(kù) Streamlit內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python Web框架Flask、Streamlit、FastAPI示例詳解
- streamlit(python構(gòu)建web)之環(huán)境搭建過(guò)程
- Python使用Streamlit打造高效的測(cè)試數(shù)據(jù)生成器
- Python基于Streamlit實(shí)現(xiàn)音頻處理示例詳解
- Python使用Streamlit快速構(gòu)建一個(gè)數(shù)據(jù)應(yīng)用程序
- Python?Streamlit實(shí)現(xiàn)文件的上傳和下載功能
- Python streamlit構(gòu)建令人驚嘆的可視化Web高級(jí)主題界面
- Python使用Streamlit快速創(chuàng)建儀表盤(pán)
- python使用Streamlit庫(kù)制作Web可視化頁(yè)面
相關(guān)文章
如何使用Python進(jìn)行OCR識(shí)別圖片中的文字
這篇文章主要介紹了使用Python進(jìn)行OCR識(shí)別圖片中的文字 ,本文通過(guò)實(shí)例代碼加文字說(shuō)明的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Python簡(jiǎn)單實(shí)現(xiàn)將Markdown轉(zhuǎn)為Word和PDF
在當(dāng)今文檔處理的時(shí)代,Markdown 已經(jīng)成為了一種流行的輕量級(jí)標(biāo)記語(yǔ)言,本文主要和大家介紹了如何使用Python實(shí)現(xiàn)將Markdown轉(zhuǎn)為Word和PDF,感興趣的小伙伴可以了解下2026-02-02
python實(shí)現(xiàn)通過(guò)flask和前端進(jìn)行數(shù)據(jù)收發(fā)
今天小編就為大家分享一篇python實(shí)現(xiàn)通過(guò)flask和前端進(jìn)行數(shù)據(jù)收發(fā),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python?excel合并居中值相同的單元格實(shí)例代碼
在工作中遇到了合并具有相同條件的單元格合并的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python?excel合并居中值相同單元格的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Python中Collections模塊的Counter容器類使用教程
Counter是Python標(biāo)準(zhǔn)庫(kù)提供的一個(gè)非常有用的容器,可以用來(lái)對(duì)序列中出現(xiàn)的各個(gè)元素進(jìn)行計(jì)數(shù),下面就來(lái)一起看一下Python中Collections模塊的Counter容器類使用教程2016-05-05
python根據(jù)url地址下載小文件的實(shí)例
今天小編就為大家分享一篇python根據(jù)url地址下載小文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
對(duì)python中Matplotlib的坐標(biāo)軸的坐標(biāo)區(qū)間的設(shè)定實(shí)例講解
今天小編就為大家分享一篇對(duì)python中Matplotlib的坐標(biāo)軸的坐標(biāo)區(qū)間的設(shè)定實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
使用 PyTorch 實(shí)現(xiàn) MLP 并在 MNIST 數(shù)據(jù)集上驗(yàn)證方式
今天小編就為大家分享一篇使用 PyTorch 實(shí)現(xiàn) MLP 并在 MNIST 數(shù)據(jù)集上驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

