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

