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