房地產(chǎn)網(wǎng)站建設(shè)平臺(tái)免費(fèi)p站推廣網(wǎng)站入口
streamlit是什么
streamlit
是一個(gè)開源的python
庫,它能夠快速的幫助我們創(chuàng)建定制化的web
應(yīng)用,而且還非常便于和他人分享,特別是在機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)領(lǐng)域。整個(gè)過程不需要你了解任何前端的知識(shí),包括html
、css
、javascript
等,對(duì)非前端開發(fā)人員非常的友好。
streamlit安裝
streamlit
要求python
版本大于等于3.6,可以直接使用pip
進(jìn)行安裝
pip?install?streamlit
安裝成功后,使用其內(nèi)置的hello app
測(cè)試,執(zhí)行命令
streamlit?hello
服務(wù)啟動(dòng)后,它會(huì)自動(dòng)幫我們打開頁面,地址是 http://localhost:8501
可以看到,streamlit
默認(rèn)使用端口8501
除此之外,streamlit
官方還提供了一個(gè)稍復(fù)雜的應(yīng)用,它結(jié)合了yolov3
的目標(biāo)檢測(cè)算法,倉庫地址:https://github.com/streamlit/demo-self-driving,感興趣的可以去研究研究,代碼簡(jiǎn)短,但功能完整
那么,針對(duì)我們自己寫的源碼文件,該怎么運(yùn)行呢?其實(shí)也非常簡(jiǎn)單,比如源碼文件是app.py
,那么可以執(zhí)行
streamlit?run?app.py
這里再說2個(gè)常用的命令
streamlit docs 查看文檔
streamlit cache clear 清緩存
streamlit常用組件
按鈕
import?streamlit?as?stbutton?=?st.button('按鈕')
文本輸入框
import?streamlit?as?stst.text_input('請(qǐng)輸入最喜歡的編程語言',?key="name")
文本顯示
import?streamlit?as?stst.write('Hello?streamlit.')
streamlit
完美支持markdown
語法,可以直接使用write
方法,來看示例
import?streamlit?as?stst.write("""#?一級(jí)標(biāo)題##?二級(jí)標(biāo)題###?三級(jí)標(biāo)題**強(qiáng)調(diào)**>這是引用.?python????.?java????.?c/c++????.?rust????
""")
除了write
方法,streamlit
還提供了text
方法,同樣可以顯示文本信息
import?streamlit?as?stst.text('Hello?streamlit.')
標(biāo)題
import?streamlit?as?stst.title('title')
除了title
,streamlit
還提供了header
和subheader
import?streamlit?as?stst.header('header')
st.subheader('subheader')
滑動(dòng)條
import?streamlit?as?stnumber?=?st.slider('Pick?a?number',?0,?100)
選擇框
import?streamlit?as?stflag?=?st.checkbox('Yes')
單選按鈕
import?streamlit?as?stlanguages?=?['python',?'c',?'rust',?'c++']st.radio('Pick?a?language',?languages)
下拉選擇框
import?streamlit?as?stst.selectbox('用過哪幾種編程語言?',?('python',?'c',?'java',?'rust'))
日期選擇器
import?streamlit?as?stdate?=?st.date_input('Pick?a?date')
顏色選擇器
import?streamlit?as?stcolor?=?st.color_picker('Pick?a?color')
文件選擇器
import?streamlit?as?stfile?=?st.file_uploader('Pick?a?file')
streamlit的其它功能
顯示json
import?streamlit?as?stst.json({"code":?0,"data":?{"sex":?"female","age":?18,"score":?100}
})
顯示代碼
from?numpy.core.arrayprint?import?_leading_trailing
import?streamlit?as?stcode?=?"""def?func():print('Hello?streamlit.')
"""
st.code(code,?language='python')
顯示pandas中的dataframe
from?numpy.core.arrayprint?import?_leading_trailing
import?streamlit?as?st
import?pandas?as?pd
import?numpy?as?npdf?=?pd.DataFrame(np.random.randn(50,?5),?columns=('col?%d'?%?i?for?i?in?range(5)))
st.dataframe(df)
最后一句中的st.dataframe(df)
可以用st.write(df)
來代替,效果一樣
顯示表格
import?streamlit?as?st
import?pandas?as?pd
import?numpy?as?npdf?=?pd.DataFrame(np.random.randn(50,?5),?columns=('col?%d'?%?i?for?i?in?range(5)))
st.table(df)
與上邊的dataframe
不同的是,表格會(huì)將所有數(shù)據(jù)都顯示出來,而沒有了滾動(dòng)條
指標(biāo)性數(shù)據(jù)顯示
這里還需要安裝另一個(gè)庫streamlit-metrics
,執(zhí)行安裝命令pip install streamlit-metrics
即可
import?streamlit?as?st
from?streamlit_metrics?import?metric_rowst.write("一周數(shù)據(jù)統(tǒng)計(jì)")
metric_row({"關(guān)注人數(shù)":?100,"點(diǎn)贊人數(shù)":?200,"在看人數(shù)":?300,"分享人數(shù)":?400}
)
streamlit的會(huì)話狀態(tài)和回調(diào)
會(huì)話狀態(tài)session state
在瀏覽器中打開新的頁面,就創(chuàng)建了一個(gè)會(huì)話(session
)。會(huì)話狀態(tài)是頁面rerun
(并非類似F5
的頁面刷新)時(shí)數(shù)據(jù)交互的一種方式。
看個(gè)計(jì)數(shù)的示例
import?streamlit?as?stst.title('Hello?streamlit.')
counter?=?0increment?=?st.button('Increment')
if?increment:counter?+=?1st.write('Count=?',?counter)
可以看到只有第一次點(diǎn)擊按鈕時(shí),Count
增加了1,后面的點(diǎn)擊,counter
都不會(huì)改變,這顯然跟我們的預(yù)期是不一樣的。
我們修改下上面的代碼
from?typing?import?Counter
import?streamlit?as?stst.title('Hello?streamlit.')
if?'counter'?not?in?st.session_state:st.session_state.counter?=?0increment?=?st.button('Increment')
if?increment:st.session_state.counter?+=?1st.write('Count=?',?st.session_state.counter)
這樣功能就正常了,每點(diǎn)擊一次按鈕,Count
就加1
回調(diào)callbacks
回調(diào)(callbacks
)是一個(gè)python
函數(shù),它在輸入組件更改時(shí)被調(diào)用,比如按鈕被點(diǎn)擊、滑動(dòng)條被拉拽等。
針對(duì)上邊的示例,使用callbacks
修改一下
from?typing?import?Counter
import?streamlit?as?st#?callbacks
def?increment_counter():st.session_state.counter?+=?1st.title('Callbacks')
if?'counter'?not?in?st.session_state:st.session_state.counter?=?0st.button('Increment',?on_click=increment_counter)
st.write('Count=?',?st.session_state.counter)
代碼執(zhí)行的效果是一樣的。這是無需傳參的示例,如果需要數(shù)據(jù)交互,可以使用args
或kwargs
,看下面的示例
import?streamlit?as?stst.title('Callbacks?with?args')
if?'counter'?not?in?st.session_state:st.session_state.counter?=?0increment_value?=?st.number_input('Enter?a?value',?value=0,?step=1)def?increment_counter(increment_value):st.session_state.counter?+=?increment_valueincrement?=?st.button('Increment',?on_click=increment_counter,args=(increment_value,?))st.write('Count?=?',?st.session_state.counter)
下面看看kwargs
的用法,它接收的是命名參數(shù)
import?streamlit?as?stst.title('Callbacks?with?kwargs')
if?'counter'?not?in?st.session_state:st.session_state.counter?=?0def?increment_counter(increment_value=0):st.session_state.counter?+=?increment_valuedef?decrement_counter(decrement_value=0):st.session_state.counter?-=?decrement_valuest.button('Increment',?on_click=increment_counter,kwargs=dict(increment_value=5))st.button('Decrement',?on_click=decrement_counter,kwargs=dict(decrement_value=1))st.write('Count?=?',?st.session_state.counter)
點(diǎn)擊Increment
按鈕,Count
就加5,點(diǎn)擊Decrement
按鈕,Count
就減1
會(huì)話狀態(tài)的注意事項(xiàng)
關(guān)于會(huì)話狀態(tài),有兩點(diǎn)需要注意,分別是
只要頁面打開并連接到
streamlit
服務(wù)器,會(huì)話狀態(tài)就會(huì)一直存在。一旦關(guān)閉選項(xiàng)卡,會(huì)話狀態(tài)中存儲(chǔ)的所有內(nèi)容都會(huì)丟失會(huì)話狀態(tài)不會(huì)持久化。如果
streamlit
服務(wù)器崩潰,那么存儲(chǔ)在會(huì)話狀態(tài)中的所有內(nèi)容都會(huì)被刪除