機器學習項目可視化展示方法

2021-02-15 機器學習實驗室

Author:楊劍礪,Datawhale成員,數據分析師

From:Datawhale

很多數據科學工作者都存在這樣一個痛點,由於沒有能點亮網頁前端的技能樹,導致在項目展示或項目合作時,無法快速開發出這樣一套用戶界面以供使用。而今天要介紹的Streamlit正是為了應對這一痛點而生的。

Streamlit是一個機器學習工程師專用的,專門針對機器學習和數據科學團隊的應用開發框架,是目前開發自定義機器學習工具的最快的方法。可以認為它的目標是取代Flask在機器學習項目中的地位,可以幫助機器學習工程師快速開發用戶交互工具。

本文目錄:

     1. Streamlit是什麼               2. 如何開始一個Streamlit項目              3. Streamlit架構與設計初探

     4. 常用工具總結

‍顯示文本

顯示數據

顯示交互控制項

顯示圖表

其他工具

側邊欄

‍     5. 重要功能

     6. 近期重大更新
     7. 優秀demo

一、Streamlit是什麼?Streamlit是一個強大的python開源工具包,可以用來快速搭建web app,以優雅地展示你的機器學習或數據科學項目。

不需要任何網頁前端設計基礎即可輕鬆搭建web app

由於web本身會隨著代碼塊自動刷新,寫程序時可以及時觀察到每一步代碼改動對於網頁的顯示效果影響,方便調試

交互式界面可以優雅地展示數據科學項目

streamlit的代碼框架遵循從上到下的運行邏輯,極易理解,所見即所得

二、如何開始一個Streamlit項目

在安裝streamlit之前,需要注意python版本至少為3.6。使用pip安裝streamlit庫

在python腳本中導入包

啟動一個streamlit app有兩種方式(命令行)。

1)直接運行本地的python文件

2)運行遠程url,這個功能可以直接運行github中的連結

$ streamlit run https://raw.githubusercontent.com/streamlit/demo-uber-nyc-pickups/master/app.py

可以嘗試運行以下命令啟動官網提供的demo項目

三、Streamlit架構與設計初探在開始介紹streamlit提供的諸多小工具之前,需要簡單介紹下streamlit的架構和布局設計思路。3.1 APP模型下圖為官網展示的app模型架構圖,一個streamlit app是這樣工作的:

streamlit會將python腳本按順序從上往下運行

每次用戶打開指向該app服務的網頁時,整個腳本會被重新執行

在腳本運行的過程中,streamlit會將數據表,圖像,控制項等實時地顯示在網頁上

在運行過程中,streamlit會優先調用緩存(需要用戶在程序中設置)避免高昂計算過程

每次用戶和控制項進行交互時,腳本會被重新執行,圖像,控制項等被重新顯示為新的值

3.2 網頁布局Streamlit的布局結構十分簡單(這既是它的優點,也是它的缺點)。和bootstrap等前端框架中的複雜柵格布局不同,Streamlit只支持左側邊欄和右側正文欄的布局,事實上由於上一節提到Streamlit特殊的從上往下執行程序的結構,用戶也無需考慮到布局問題,控制項會按照程序中的順序從上往下自然排列。這樣的設計自然是極大程度上簡化了用戶在布局設計上所花的精力,可以將精力更多地用在項目展示上。

四、常用工具總結

4.1 顯示文本

st.title  

st.header

st.subheader  

st.text      

st.markdown

st.code    

常用的顯示文本命令包括大標題title, 正文標題header,正文副標題subheader,正文文本text,markdown格式(支持文字和emoji表情),代碼code  

st.title('Streamlit introduction')st.header('Build your first app')st.subheader('Text widgets are shown as below')st.text('I am the tool to display text')st.markdown('I am the *tool* to **display markdown**')st.markdown(':sunglasses:')st.code('''def hello():    print("Hello, Streamlit!")''', language='python')

在streamlit中還有一個萬能顯示工具st.write,該方法中可以接受多種格式的輸入參數,如文本,markdown,數據框,圖表,字典,函數,並且隨著輸入格式的不同,會以不同方式呈現。

4.2 顯示數據

st.table

st.dataframe

streamlit支持數據框以及json的格式顯示數據,其中table和dataframe的區別在於table為靜態數據,dataframe為動態數據。

df = pd.DataFrame(    np.random.randn(10, 5),   columns=('col %d' % i for i in range(5)))
st.table(df)st.dataframe(df)
st.json({ 'foo': 'bar', 'baz': 'boz', 'stuff': [ 'stuff 1', 'stuff 2', 'stuff 3', 'stuff 5', ], })

4.3 顯示交互控制項

st.checkbox

st.selectbox

st.multiselect

st.ratio

這一組工具可以用於構建機器學習模型時用戶參數的選擇,如下拉單選,下拉多選,滑塊選擇等功能。

st.write('-checkbox----')agree = st.checkbox('I agree')if agree:    st.write('Great! You agreed!')
st.write('-selectbox---')option = st.selectbox( 'Select your model', ('decision tree', 'logistic regression', 'SVM'))st.write('You selected:', option)
st.write('-multiselect---')options = st.multiselect( 'What are your favorite colors', ['Green', 'Yellow', 'Red', 'Blue'], ['Yellow', 'Red'])st.write('You selected:', options)
st.write('-ratio---')genre = st.radio( "What's your favorite model", ('linear regression', 'neural network'))if genre == 'linear regression': st.write('You like simple model')else: st.write("You like complex model")
st.write('-slider---')st.slider('How old are you?', min_value=0, max_value=100, value=20, step=5)

st.text_input          

st.number_input        

st.text_area      

st.date_input    

這一組工具可用於構建機器學習模型時的不同格式的用戶輸入以及數據上傳。其中file_uploader默認支持的文件上傳大小上限為200MB。

st.write('-text_input----')st.text_input('Movie title', 'Life of Brian')
st.write('-number_input---')st.number_input('Insert a number')
st.write('-text_area---')txt = st.text_area('Text to analyze', '''It was the best of times, it was the worst of times, it wasthe age of wisdom, it was the age of foolishness, it wasthe epoch of belief, it was the epoch of incredulity, itwas the season of Light, it was the season of Darkness, itwas the spring of hope, it was the winter of despair, (...)''')
st.write('-date_input---')st.date_input( "When's your birthday", datetime.date(2019, 7, 6))
st.write('-file_uploader---')uploaded_file = st.file_uploader("Choose a CSV file", type="csv")

4.4 顯示圖表

st.line_chart

st.bar_chart

st.area_chart

streamlit本身支持原生的三種圖表形式,折線圖,柱狀圖和面積圖,不過一般不太會用到,因為streamlit還支持大量的第三方可視化圖表接口。

chart_data = pd.DataFrame(     np.random.randn(20, 3),     columns=['a', 'b', 'c'])st.line_chart(chart_data)
chart_data = pd.DataFrame( np.random.randn(50, 3), columns=["a", "b", "c"])st.bar_chart(chart_data)
chart_data = pd.DataFrame( np.random.randn(20, 3), columns=['a', 'b', 'c'])st.area_chart(chart_data)

st.pyplot

st.altair_chart

st.plotly_chart

st.bokeh_chart

st.pydeck_chart

st.deck_gl_chart

streamlit的強大之處在於提供了大量第三方可視化接口, 以最普遍的matplotlib為例,只需在常規的代碼基礎上加上一句st.pyplot()即可顯示在網頁上顯示圖表

arr = np.random.normal(1, 1, size=100)plt.hist(arr, bins=20)st.pyplot()

4.5 其他工具progress用於在循環中顯示進度條,spinner用於提示代碼正在運行

st.error

st.warning

st.info

st.success

這是一組用於顯示不同狀態的工具

st.error('This is an error')st.warning('This is a warning')st.info('This is a purely informational message')st.success('This is a success message!')

4.6 側邊欄

上述提到幾乎所有工具均可放置在側邊欄,代碼以st.sidebar.[element_name]的形式給出,以selectbox為例,st.sidebar.selectbox即表示該工具會出現在左側。同樣側邊欄的工具布局也是按照代碼順序從上往下顯示。

add_selectbox = st.sidebar.selectbox(    "How would you like to be contacted?",    ("Email", "Home phone", "Mobile phone"))

五、重要功能
5.1 緩存機制緩存機制是streamlit的一大重要功能,緩存功能使得用戶在加載或處理大型數據時可以直接讀取緩存,避免昂貴的計算過程。

streamlit的緩存機制是通過@st.cache的裝飾器實現的。

@st.cache  def expensive_computation(a, b):    time.sleep(10)    return a * b
a = 2b = 21res = expensive_computation(a, b)
st.write("Result:", res)

每當程序運行至被cache裝飾的函數時,當第一次運行時,會正常執行並將結果存入緩存,當函數被再次運行,首先會判斷函數的輸入參數,函數主體內容是否發生變化,如果發生變化,則重新運行函數,否則將跳過函數,直接讀取緩存結果。

5.2 錄屏功能

streamlit還提供了一個非常有用的錄屏功能,在網頁右上角的菜單欄,有一個Record a screencast功能,可以支持錄製屏幕互動操作,非常適合團隊協作和效果展示。

六、近期重大更新streamlit雖然問世不久,已經擁有十分活躍的社區和用戶群,並且官網也在不斷豐富現有的功能中,以應對用戶各種普遍的需求。根據官網發布的2020路線圖,今天預計會有一些重大的新功能推出,包括:七、優秀demo官網收錄了許多優秀的demo作品,充分展示出streamlit的強大之處和應用前景。7.1 自動駕駛目標檢測

這個項目使用不到300行代碼,通過streamlit的交互界面展示了Udacity自動駕駛數據集和YOLO目標檢測方法的應用。

$ streamlit run https://raw.githubusercontent.com/streamlit/demo-self-driving/master/app.py

7.2 GAN面部生成項目

這個項目使用僅僅150行代碼,展示了tensorflow和Nvidia的Progressive Growing of GANs以及Shaobo Guan的Transparent Latent-space GAN方法在面部特徵生成中的應用。

$ git clone https://github.com/streamlit/demo-face-gan.git$ cd demo-face-gan$ pip install -r requirements.txt$ streamlit run app.py

往期精彩:

數學推導+純Python實現機器學習算法21:最大熵模型

數學推導+純Python實現機器學習算法27:LDA線性判別分析

一個算法工程師的成長之路

長按二維碼.關注機器學習實驗室

相關焦點

  • Python機器學習10:機器學習中的五種可視化方法(上)
    在機器學習中,通常需要先了解訓練的數據集,才能決定選擇哪種特徵預處理方法、哪種模型,以便獲得問題的最優解法。最有效的了解訓練數據集的方法是可視化訓練數據集,從各種可視化的圖中觀察訓練數據集特徵。本文將介紹如何使用Python機器學習庫Pandas可視化訓練數據集。Pandas是Python中高效的數據加載、數據分析工具,它是基於NumPy實現的,提供了很多有用的函數接口。引言本教程將介紹5中常用的機器學習可視化方法,分別如下所示。
  • 機器學習可視化
    0.簡介作為任何數據科學項目的一部分,數據可視化起著重要的作用,通過它可以了解有關可用數據的更多信息並確定任何主要模式。如果能夠使分析中的機器學習部分儘可能在視覺上變得直觀,那不是很好嗎?最後,可以使用另一種可能的方法來創建這種類型的繪圖,方法是使用「權重和偏移掃描(Weights&Biases Sweeps)」功能。權重和偏差是一個免費工具,可用於為個人或團隊自動創建不同機器學習任務(例如,學習曲線,圖形模型等)的圖和日誌。
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    導入數據,並通過描述性分析、可視化等對數據進行分析。創建六個模型,並從中選擇準確度最高的模型。可以說這並不是一個正式的項目,只是用來做一個簡單的展示,用於給初次接觸機器學習的讀者快速了解機器學習的過程和結果。
  • 資料 | 機器學習與流場數據可視化
    from=leiphonecolumn_res0910內容簡介 · · · · · ·科學計算可視化(Scientific Visualization,SciVis)是計算機圖形學的一個重要研究方向本書嘗試性地將機器學習理論應用於科學計算可視化中,大大提高了數據中特徵識別的魯棒性和準確率,同時結合流場數據可視化技術的具體實現,詳細闡述這兩個領域結合的理論和存在的關鍵問題。
  • 【R教程】R做你的第一個機器學習項目教程(一)
    在這篇文章裡你將會用R完成你的第一個機器學習項目。在這個逐步教程裡,你需要做:1 下載和安裝R並且獲取用做機器學習非常有用的R包。2 導入一個數據集並且用統計分析和數據可視化來理解它的結構。學習機器學習最好的方法就是設計並實現一系列小項目。初學R的時候你可能回覺得這有點可怕R在編寫腳本時所提供的語法結構是比較奇怪的。這裡有幾百個R包和幾千個函數讓你選擇,給每個任務提供了多種解決方法,所以這會讓你感到有點吃不消。所以說,在R上開始機器學習最好的方法就是要完成一個項目。
  • 【乾貨】Python機器學習機器學習項目實戰3——模型解釋與結果分析(附代碼)
    1、 特徵重要性【7】2、 單一決策樹可視化3、 LIME:Local Interpretable Model-Agnostic Explainations【8】 前兩種方法是決策樹特有的,而第三種方法可以廣泛應用於任何機器學習模型。LIME是一個相對較新的包,目的是對機器學習預測進行解釋【9】。
  • 開源推薦:來自Google大腦團隊的19個數據可視化項目
    對研究科學家來說,隨著機器學習系統的廣泛應用,理解模型解讀數據的方式正變得越來越重要。但是,探索數據的一大主要難題是數據往往具有數百個乃至數千個維度,這意味著我們需要使用特別的工具才能調查清楚數據空間。為此,AI 前線整理了 Google 大腦團隊出品的 19 個開源數據可視化項目,分享給廣大讀者。
  • 機器學習項目模板:ML項目的6個基本步驟
    來源 | DeepHub IMBA每個機器學習項目都有自己獨特的形式。對於每個項目,都可以遵循一組預定義的步驟。儘管沒有嚴格的流程,但是可以提出一個通用模板。準備問題不僅是機器學習,任何項目的第一步都是簡單地定義當前的問題。您首先需要了解背景和需要解決的問題。
  • Matplotlib數據可視化方法總結
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • 機器學習開放課程(二):使用Python可視化數據
    在機器學習領域中,可視化並不僅僅用來製作漂亮的報表。項目的各個階段都大量使用可視化技術。在開始一項新任務時,通過可視化手段探索數據往往是任務的第一步。我們通過圖表匯總數據,放棄無關緊要的細節。相比直接閱讀許多行原始數據,可視化能更好地幫助人類把握數據的要點。令人驚嘆的是,僅僅通過可視化工具創建一些看上去再簡單不過的圖表,就能獲得大量洞見。
  • python機器學習預測分析核心算法.pdf
    AI項目體驗地址 https://loveai.tech《Python機器學習 預測分析核心算法》內容簡介  在學習和研究機器學習的時候,面臨令人眼花繚亂的算法,機器學習新手往往會不知所措。本書從算法和Python語言實現的角度,幫助讀者認識機器學習。
  • 2017年度盤點:15個最流行的GitHub機器學習項目
    項目地址:https://github.com/apple/turicreateTuriCreate 是蘋果最近貢獻的一個開源項目,它為機器學習模型提供易於使用的創建方法和部署方法你可以用編程的方式組織可視化空間,或者通過 UI 為實時數據創建儀錶盤,檢查實驗結果,或者調試實驗代碼。
  • 技術乾貨:人工智慧和機器學習領域中有趣的開源項目
    本文簡要介紹了10款 Quora上網友推薦的 人工智慧和機器學習領域方面的開源項目。
  • 【乾貨】去年最火的機器學習開源項目集錦(上)
    近日,Mybridge在Medium上公布了統計的2017年度最受歡迎的機器學習開源項目,包含了各類機器學習庫、開源數據集以及相關項目應用。
  • Python可視化展示各地交通擁堵情況
    而data為返回後的數據,它包括很多欄位,但是我們只需要提取其中的城市名和擁堵指數即可: 有了數據,接下來我們就可以將其可視化展示出來。 二、數據可視化 利用可視化神器pyecharts庫繪製地圖,並將城市以及對應的擁堵指數表示出來。
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    在接下來的一系列文章中,致力於讓大家能夠學習在項目中如何將機器學習的任務和Python有機地結合在一起,以便實現每一個機器學習問題的最佳實踐。通過各種實例來理解學到的預測模型的知識。儘量完善一套較為通用的機器學習建模過程,通過python的一系列方法,力求只是進行簡單的複製粘貼操作就可以啟動一個新的機器學習項目。
  • 手把手教您Python機器學習項目
    加載數據集並使用統計摘要和數據可視化理解它的結構。創建6個機器學習模型,選擇最好的,建立準確性可靠的信心。如果您是一個機器學習初學者,並希望最終開始使用Python,那麼本教程就是為您設計的。還有許多模塊和庫可供選擇,為完成每個任務提供了多種方法。它會讓人感到難以承受。開始使用Python進行機器學習的最佳方式是完成一個項目。它將迫使您安裝並啟動Python解釋器(至少如此)。它將給你一個鳥瞰如何逐步完成一個小項目。
  • 菌群數據的統計和可視化方法
    微生物組研究主要分為三步走,之前已經給大家講解了實驗設計與生信分析的方法(從樣本測序數據到生成物種和功能組成表),那麼接下來為大家介紹菌群測序數據下遊分析的統計和可視化方法,包括多樣性分析、物種組成分析、微生物差異分析、相關性分析、網絡分析、機器學習(構建疾病預測模型)、進化分析、來源分析以及常用可視化方法。
  • 2018 年度 GtiHub 開源項目 TOP 25:數據科學 & 機器學習
    ,致力於為使用機器學習和人工智慧推動人類進步找到新途徑。2018 這一年中,作者在每個月都會發布一份開源項目月度推薦榜單,而本文則是對全年開源項目的盤點和總結。雷鋒網 AI 科技評論編譯如下。前沿關於託管代碼、與團隊成員合作以及充當展示個人寫代碼技能的「在線簡歷」,最好的平臺是哪個?問及任何一位數據科學家,他們都會讓你去 GitHub。
  • 谷歌機器學習課程公開!Google AI 教育項目今起免費開放支持中文
    Learn with Google AI:適用於所有級別的人工智慧熱點谷歌一直在追求人工智慧教育的普及,包括開放了像TensorFlow這樣的高級項目,也有Doodles這樣的低門檻且有趣的項目,這些項目旨在以更實用的方式展示AI。