Python + Steamlit 快速開(kāi)發(fā)可視化 web 頁(yè)面!
用Python做web圖形用戶界面,最先想到的是Flask、Djong等框架。然而研究這些對(duì)于初學(xué)者來(lái)講,尤其是沒(méi)有web開(kāi)發(fā)基礎(chǔ)的數(shù)據(jù)分析人員是痛苦的。
幸運(yùn)的是,Python中也有很多第三方庫(kù)來(lái)快速進(jìn)行簡(jiǎn)單的web可視化,例如之前介紹的 PyWebIO
今天再介紹一個(gè) Steamlit,可以快速利用簡(jiǎn)單的代碼快速布局自己想要的web界面!效果如下
一、安裝與運(yùn)行
安裝之前,我們需要將 Python 的版本升級(jí)到3.7或以上,同時(shí)設(shè)置好環(huán)境變量,這里默認(rèn)讀者都已經(jīng)設(shè)置好不細(xì)講。
在 Windows 或 macOS 中都可以使用pip進(jìn)行安裝
pip?install?streamlit
在終端輸出完畢后,可以執(zhí)行streamlit hello來(lái)檢驗(yàn),如果出現(xiàn)新的網(wǎng)頁(yè)界面,則說(shuō)明安裝成功。
并且之后利用Streamlit寫的程序,需要通過(guò)運(yùn)行streamlit run {你的py文件}來(lái)實(shí)現(xiàn)。
二、常用命令
接下來(lái)我們來(lái)了解 Streamlit 的一些常用命令。首先引入相關(guān)庫(kù)
import?streamlit?as?st
import?numpy?as?np
import?pandas?as?pd
import?time
構(gòu)建 MLweb 的標(biāo)識(shí)題目,可以利用st.title()函數(shù)創(chuàng)建一個(gè)標(biāo)題。
st.title('我的第一個(gè)MLweb')
保存這個(gè)py文件,命名為test.py,利用我們第一部分講解如何運(yùn)行代碼,在命令窗口輸入streamlit run test.py。
注意,這里直接用 streamlit 是已經(jīng)調(diào)好了環(huán)境變量,如果不想調(diào)的,打開(kāi) streamlit 的源程序文件,將streamlit的exe文件調(diào)用即可。
正常運(yùn)行下會(huì)彈出一個(gè) localhost網(wǎng)頁(yè),效果如下

輸入文字
如果需要輸入文字,可以用st.text_input()函數(shù)
構(gòu)建MLWeb表格
機(jī)器學(xué)習(xí)里面我們必須要做的是查看數(shù)據(jù)的類型,維度等具體特征。比如我們總是用到df.head(),那么在MLweb里面怎么實(shí)現(xiàn)?
有幾個(gè)方法:st.table(),st.dataframe(),st.write()。
其中st.write()是常見(jiàn)的表格函數(shù),st.write()被稱為streamlit庫(kù)的瑞士軍刀,圖像、文本、表格都可以用它來(lái)實(shí)現(xiàn),至于三者有什么區(qū)別呢?
st.write():交互式表格,不可修改st.table():靜態(tài)表格st.dataframe():返回一個(gè)可以使用和修改的對(duì)象,可以向其中添加數(shù)據(jù)或替換數(shù)據(jù).
代碼如下
st.write("嘗試運(yùn)用dataframe弄一個(gè)表格")
df?=?pd.DataFrame({
????'第一列':[1,2,3,4],
????'第二列':['a','b','c','d']})
st.table(df)
st.write("嘗試運(yùn)用dataframe弄一個(gè)表格---write函數(shù)")
st.write(pd.DataFrame({
????'first?column':?[1,?2,?3,?4],
????'second?column':?[10,?20,?30,?40]
}))
效果如圖:

利用write函數(shù)則效果如下

可視化
機(jī)器學(xué)習(xí)挖掘數(shù)據(jù)的過(guò)程中可視化同樣占據(jù)了舉足輕重的地位,這里我們構(gòu)使用st.line_chart()函數(shù)
chart_data?=?pd.DataFrame(
?????np.random.randn(20,?3),
?????columns=['a',?'b',?'c'])
st.line_chart(chart_data)
效果如下:
可以看到,streamlit給了我們方便的功能:下載或查看我們構(gòu)建的圖片,你甚至可以查看圖片的源代碼!
地圖
streamlit里面有一個(gè)它時(shí)常拿來(lái)當(dāng)門面的圖,就是舊金山的地圖,你或許利用Flask在創(chuàng)建地圖,讀取坐標(biāo)點(diǎn),個(gè)性化地圖,顯示在web端這些步驟花費(fèi)大量時(shí)間。
而在這里,你進(jìn)需要提供你的坐標(biāo)點(diǎn)構(gòu)成的數(shù)據(jù)框,并用st.map()函數(shù)即可,這里用廣東廣州的坐標(biāo)點(diǎn)(不太精準(zhǔn)哈)來(lái)畫圖
代碼如下:
map_data?=?pd.DataFrame(
????np.random.randn(1000,?2)?/?[50,?50]?+?[23.26,?113.57],??#N,W
????columns=['lat',?'lon'])
st.map(map_data)
效果圖如下
實(shí)戰(zhàn)
最后我們來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單股票查詢系統(tǒng)。基本想法如下
輸入:用戶寫入股票代碼,起始時(shí)間,結(jié)束時(shí)間。
輸出:股票交易數(shù)據(jù)表,股票ma線可視化。
首先引入包
import?streamlit?as?st
import?pandas?as?pd
import?numpy?as?np
import?tushare?as?ts
接下來(lái)設(shè)置標(biāo)題與可寫入文本,這里的文本是在web端輸入的,用到st.text_input()函數(shù)
st.title('股票查詢系統(tǒng)')
code?=?st.text_input('你的股票名稱:',help?=?'code:股票代碼,即6位數(shù)字代碼,或者指數(shù)代碼(sh=上證指數(shù) sz=深圳成指 hs300=滬深300指數(shù) sz50=上證50 zxb=中小板 cyb=創(chuàng)業(yè)板)')
start_time?=?st.text_input('起始時(shí)間:')
stop_time?=?st.text_input('結(jié)束時(shí)間:')
注意:這里的日期時(shí)間默認(rèn)以年-月-日格式輸入,同時(shí)在股票名稱旁邊加入一個(gè)輔助幫助說(shuō)明。
現(xiàn)在進(jìn)行股票名稱獲取,我們用tushare庫(kù)作為股票交易數(shù)據(jù)獲取,注意需要tushare的pro接口的api才能通過(guò)股票代碼獲取股票公司名稱
def?get_name(stoke_code):
????pro=ts.pro_api()
????dat?=?pro.query('stock_basic',?fields='symbol,name')????????????????
????company_name?=?list(dat.loc[dat['symbol']?==?stoke_code].name)[0]?
????return?company_name
接著對(duì)股票交易數(shù)據(jù)顯示,用到st.dataframe()函數(shù)來(lái)讓用戶更直觀的看到獲取的交易數(shù)據(jù)
data?=?ts.get_hist_data('{}'.format(code),start?=?'{}'.format(start_time),
?????????????????end?=?'{}'.format(stop_time))
st.write('股票代碼為{}的交易數(shù)據(jù)表'.format(code))
st.dataframe(data)
最后可視化ma短線長(zhǎng)線
if?code?!=?'':
????data1?=?data[['close','ma5','ma10']]
????st.line_chart(data1)
else:
????pass
MACD治標(biāo)是大家常看的指標(biāo),那么我們將ma5和ma10在圖標(biāo)上顯示,并畫上收盤價(jià),讀者可以自行驗(yàn)證MACD的黃金或死亡交叉!最終效果見(jiàn)下方視頻

各位伙伴們好,詹帥本帥搭建了一個(gè)個(gè)人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請(qǐng)移步小程序體驗(yàn)一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長(zhǎng)文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第②篇)
牛逼!Python函數(shù)和文件操作(長(zhǎng)文系列第③篇)
牛逼!Python錯(cuò)誤、異常和模塊(長(zhǎng)文系列第④篇)
