Python + Steamlit 快速开发可视化 web 页面!
用Python做web圖形用戶界面,最先想到的是Flask、Djong等框架。然而研究這些對于初學(xué)者來講,尤其是沒有web開發(fā)基礎(chǔ)的數(shù)據(jù)分析人員是痛苦的。
幸運的是,Python中也有很多第三方庫來快速進行簡單的web可視化,例如之前介紹的 PyWebIO
今天再介紹一個 Steamlit,可以快速利用簡單的代碼快速布局自己想要的web界面!效果如下
一、安裝與運行
安裝之前,我們需要將 Python 的版本升級到3.7或以上,同時設(shè)置好環(huán)境變量,這里默認讀者都已經(jīng)設(shè)置好不細講。
在 Windows 或 macOS 中都可以使用pip進行安裝
pip?install?streamlit在終端輸出完畢后,可以執(zhí)行streamlit hello來檢驗,如果出現(xiàn)新的網(wǎng)頁界面,則說明安裝成功。
并且之后利用Streamlit寫的程序,需要通過運行streamlit run {你的py文件}來實現(xiàn)。
二、常用命令
接下來我們來了解 Streamlit 的一些常用命令。首先引入相關(guān)庫
import?streamlit?as?st import?numpy?as?np import?pandas?as?pd import?time構(gòu)建 MLweb 的標識題目,可以利用st.title()函數(shù)創(chuàng)建一個標題。
st.title('我的第一個MLweb')保存這個py文件,命名為test.py,利用我們第一部分講解如何運行代碼,在命令窗口輸入streamlit run test.py。
注意,這里直接用 streamlit 是已經(jīng)調(diào)好了環(huán)境變量,如果不想調(diào)的,打開 streamlit 的源程序文件,將streamlit的exe文件調(diào)用即可。
正常運行下會彈出一個 localhost網(wǎng)頁,效果如下
輸入文字
如果需要輸入文字,可以用st.text_input()函數(shù)
構(gòu)建MLWeb表格
機器學(xué)習(xí)里面我們必須要做的是查看數(shù)據(jù)的類型,維度等具體特征。比如我們總是用到df.head(),那么在MLweb里面怎么實現(xiàn)?
有幾個方法:st.table(),st.dataframe(),st.write()。
其中st.write()是常見的表格函數(shù),st.write()被稱為streamlit庫的瑞士軍刀,圖像、文本、表格都可以用它來實現(xiàn),至于三者有什么區(qū)別呢?
st.write():交互式表格,不可修改
st.table():靜態(tài)表格
st.dataframe():返回一個可以使用和修改的對象,可以向其中添加數(shù)據(jù)或替換數(shù)據(jù).
代碼如下
st.write("嘗試運用dataframe弄一個表格") df?=?pd.DataFrame({'第一列':[1,2,3,4],'第二列':['a','b','c','d']}) st.table(df) st.write("嘗試運用dataframe弄一個表格---write函數(shù)") st.write(pd.DataFrame({'first?column':?[1,?2,?3,?4],'second?column':?[10,?20,?30,?40] }))效果如圖:
利用write函數(shù)則效果如下
可視化
機器學(xué)習(xí)挖掘數(shù)據(jù)的過程中可視化同樣占據(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里面有一個它時常拿來當門面的圖,就是舊金山的地圖,你或許利用Flask在創(chuàng)建地圖,讀取坐標點,個性化地圖,顯示在web端這些步驟花費大量時間。
而在這里,你進需要提供你的坐標點構(gòu)成的數(shù)據(jù)框,并用st.map()函數(shù)即可,這里用廣東廣州的坐標點(不太精準哈)來畫圖
代碼如下:
map_data?=?pd.DataFrame(np.random.randn(1000,?2)?/?[50,?50]?+?[23.26,?113.57],??#N,Wcolumns=['lat',?'lon']) st.map(map_data)效果圖如下
實戰(zhàn)
最后我們來實現(xiàn)一個簡單股票查詢系統(tǒng)。基本想法如下
輸入:用戶寫入股票代碼,起始時間,結(jié)束時間。
輸出:股票交易數(shù)據(jù)表,股票ma線可視化。
首先引入包
import?streamlit?as?st import?pandas?as?pd import?numpy?as?np import?tushare?as?ts接下來設(shè)置標題與可寫入文本,這里的文本是在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('起始時間:') stop_time?=?st.text_input('結(jié)束時間:')注意:這里的日期時間默認以年-月-日格式輸入,同時在股票名稱旁邊加入一個輔助幫助說明。
現(xiàn)在進行股票名稱獲取,我們用tushare庫作為股票交易數(shù)據(jù)獲取,注意需要tushare的pro接口的api才能通過股票代碼獲取股票公司名稱
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接著對股票交易數(shù)據(jù)顯示,用到st.dataframe()函數(shù)來讓用戶更直觀的看到獲取的交易數(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短線長線
if?code?!=?'':data1?=?data[['close','ma5','ma10']]st.line_chart(data1) else:passMACD治標是大家常看的指標,那么我們將ma5和ma10在圖標上顯示,并畫上收盤價,讀者可以自行驗證MACD的黃金或死亡交叉!最終效果見下方視頻
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達式(長文系列第②篇)
牛逼!Python函數(shù)和文件操作(長文系列第③篇)
牛逼!Python錯誤、異常和模塊(長文系列第④篇)
總結(jié)
以上是生活随笔為你收集整理的Python + Steamlit 快速开发可视化 web 页面!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐2个十分好用的pandas数据探索分
- 下一篇: Python赋值、打包和解包,90%人不