博客專欄

        EEPW首頁 > 博客 > 放棄Jupyter Notebooks吧,教你如何用儀表板展示研究成果

        放棄Jupyter Notebooks吧,教你如何用儀表板展示研究成果

        發布人:數據派THU 時間:2022-09-26 來源:工程師 發布文章

        作為一名Python 愛好者,我幾乎用 Jupyter Notebooks (https://jupyter.org/)處理一切工作。Notebooks集成了markdown標記語言、代碼和inline模式繪圖,使其成為探索性數據分析的絕佳工具。我使用這些Notebooks來開發和共享代碼、開發原型、探索程序庫、玩轉數據以及繪圖和可視化。Notebooks可以呈現為靜態html和pdf,因此也非常適合用來編寫報告、文檔和教程……特別是當你想要同時共享數據和代碼的時候。


        然而,作為一名研究人員,我發現代碼有時會妨礙我想要顯示的數據。那么問題來了,當我們要與非技術受眾分享數據時,有哪些選擇?有比Notebooks更好的選擇嗎?


        Notebooks的槽點


        在我們繼續往下之前,不妨退后一步,看看Jupyter Notebooks存在的一些問題。


        不可否認,利用Jupyter notebooks來展示研究結果在過去的幾年中已蔚然成風。這意味著Jupyter Notebooks 的問題也是眾所周知的。我必須要吐槽的是:


        1. 非線性執行模式。Notebooks通常包含難以名狀的隱藏狀態。這對初學者來說非常不友好。

        2. Notebooks很難與非技術人員共享。他們需要知道如何設置 Python、安裝庫、管理環境和修改代碼。


        Notebooks可以托管在諸如binder之類的地方,從而使代碼立即可復現。只有理解代碼以及如何運行筆記本,才能復現。在這里,inline模式代碼可能會給自己埋坑。我看到很多notebooks在頂部說明了每個變量的作用以及如何運行代碼。你需要了解代碼的工作原理才能使用notebooks。


        儀表板


        是時候請儀表板登場了。


        儀表板是一個從數據科學世界引入的相對較新的概念,它利用了現代web的優點。從本質上講,儀表板是用于快速瀏覽某些數據的簡單web應用程序。就像一個用來呈現數據的迷你圖形界面。


        在荷蘭eScience中心,我們喜歡使用儀表板來展示我們的數據

        (https://blog.esciencecenter.nl/https-blog-esciencecenter-nl-spot-visual-scientific-data-analytics-made-easy-62e03a895bae)。


        如果你是 Python用戶,你可以試試下面這些儀表板工具:


        • Dash(https://plotly.com/dash/,2017 年,每月 88.3 萬次下載)

        • Panel(https://panel.holoviz.org/, 2018 年,每月 38.7 萬次下載)

        • Streamlit(https://streamlit.io/, 2019 年,每月 93 萬次下載)

        • voila(https://voila.readthedocs.io/en/stable/, 2019 年,每月 5.6 萬次下載)


        以上都是非常棒的選擇。如果你需要詳細地比較他們之間的優缺點,請查看博客文章(https://medium.datadriveninvestor.com/streamlit-vs-dash-vs-voil%C3%A0-vs-panel-battle-of-the-python-dashboarding-giants-177c40b9ea57)。


        Streamlit


        在這四個儀表板工具中,Streamlit最讓我印象深刻,因為它簡單易用。我有一個項目一直在用Streamlit開發出的簡單的數據處理GUI。以下是我整理的早先的使用心得:


        1. 使用一周后,我發現它非常容易上手。

        2. 線性執行模式使得對代碼的理解變得容易(稍后會詳細介紹)。

        3. 無需了解任何web開發,因為該庫的目的之一就是開箱即用(劇透警告:確實如此)。

        4. API設計得非常好,易于管理,Python風格明顯。你可以在一天內掌握全部 API。有人會說 API 提供得選項很有限,但在我看來恰好,剛好適合我的大腦容量。它的文檔結構也不錯,提供了清晰的解釋和示例。

        5. Streamlit開發人員聲稱這是用Python構建數據應用程序的最快方法。這聽起來像是一種推銷,但它可能是真的。你可以在幾分鐘內將任何Python腳本變成交互式儀表板。


        從一個正常的繪圖過程......


        讓我們來看一個例子。作為一名研究人員,我有很多Python腳本或notebooks,它們在做如下事情:


        1. 加載或生成數據

        2. 數據處理

        3. 繪圖


        我會無休止地調整參數并重新運行腳本以獲得正確的繪圖。這對我來說不是問題。但是,當與不太精通軟件的同事共享腳本時,這意味著我就要扮演技術支持的角色。想想就頭痛,需要幫忙設置 Python、管理環境、修復錯誤、滿足功能需求等……


        聽起來很耳熟?


        下面的代碼片段生成一些數據(正態分布),對其進行擬合,并從中創建一個 matplotlib圖。它需要三個參數,mu_in、std_in 和 size。































        import numpy as npfrom scipy.stats import normimport matplotlib.pyplot as plt
        mu_in = 5std_in = 5.0size = 100
        def norm_dist(mu, std, size=100):"""Generate normal distribution."""return norm.rvs(mu, std, size=size)
        data = norm_dist(mu_in, std_in, size=size)
        # Fit the normal distributionmu, std = norm.fit(data)
        # Make some plotsx = np.linspace(-40, 40, 100)y = norm.pdf(x, mu, std)
        title = f"Fit results: {mu=:.2f},  {std=:.2f}"
        fig, ax = plt.subplots()ax.hist(data, bins=50, density=True)ax.plot(x, y, 'k', linewidth=2)ax.set_title(title)
        plt.show()


        我酷斃了的Python腳本。


        圖片圖片 正態分布圖


        …再到酷炫的儀表板 


        讓我們通過四個簡單的步驟將其變成交互式儀表板:


        1. import streamlist as st

        2. 用st.title添加標題

        3. 用st.slider將輸入參數轉換為交互式滑塊

        4. 用st.pyplot繪圖


        注意,此時我們不必更改任何數據生成、擬合或繪圖相關的代碼!

























        import numpy as npfrom scipy.stats import normimport matplotlib.pyplot as pltimport streamlit as st
        st.title('Normal distribution')
        mu_in = st.slider('Mean', value=5, min_value=-10, max_value=10)std_in = st.slider('Standard deviation', value=5.0, min_value=0.0, max_value=10.0)size = st.slider('Number of samples', value=100, max_value=500)
        def norm_dist(mu, std, size=100):  """Generate normal distribution.""" return norm.rvs(mu, std, size=size)  data = norm_dist(mu_in, std_in, size=size)  # Fit the normal distributio mu, std = norm.fit(data)  # Make some plots  st.pyplot(fig)

        現在變成儀表板了


        運行儀表板程序,輸入如下命令行:



        streamlit run my_dashboard.py


        這會開啟一個服務器端,然后利用瀏覽器就可以訪問儀表板了(就像用Jupyter Notebook一樣)

        圖片

        圖片

        酷炫的儀表板


        Streamlit是如何工作的的?


        Streamlit 的工作方式非常有趣。每次移動滑塊、選中一個框或按下一個按鈕時,Streamlit 都會觸發腳本的重新運行。每當輸入值被更新,javascript 后端都會跟蹤這些值。


        這意味著代碼本身是線性執行的。在我看來,這種簡單性是它與眾不同的地方。不需要任何回調或復雜的流控制。你的python腳本從上到下運行。這使得理解代碼變得容易。python代碼只需經過最少的修改,任何代碼腳本都可以變成儀表板。


        有什么缺點嗎?當然。因為streamlit在每次更新時都會重新運行整個腳本,所以感覺有點慢,尤其是在更新大量繪圖時,它也可能卡在長時間運行的函數上。Streamlit提供了一些選項來緩存中間結果,從而優化性能。

        (https://docs.streamlit.io/library/apireference/performance)


        繪圖庫


        上面的示例使用matplotlib進行繪圖。Matplotlib一直是Python的首選繪圖庫。它已經存在了近二十年,并且緊密集成在Python科學計算技術棧中。


        如果你熟悉matplotlib,你就知道它適合繪制達到出版刊物質量的圖,但與此同時,交互式繪圖可能很麻煩。


        Streamlit 支持以下庫:


        • matplotlib

        • altair

        • bokeh

        • plotly

        • seaborn

        • PyDeck

        • GraphViz


        更加現代的繪圖庫,如 plotly(https://plotly.com/python/)、bokeh(https://bokeh.org) 和 altair(https://altair-viz.github.io)可以直接渲染到 javascript。這意味著它們天然是為Web而生的,并且內置了交互性。這使它們更適合web應用程序。如果你要制作儀表板,我建議你嘗試下這些可替代方案。


        共享儀表板


        好的,現在我們已經制作了一個外觀精美的儀表板,以便任何人都可以上手把玩數據。那么如何部署呢?


        Streamlit 使用主機/服務器模型,這意味著你可以在自己的服務器上運行它。


        更簡單的辦法是使用streamlit云(https://streamlit.io/cloud)來托管你的儀表板(對學生和開源項目免費)。我發現這也很容易設置。我所要做的就是在 github上創建一個包含代碼和需求文檔的repository。


        然后我使用Github SSO登錄到streamlit云,并啟動了一個指向我的repo和代碼的新應用程序。


        點擊這里

        (https://share.streamlit.io/stefsmeets/dashboard_blog/main)查看結果!  


        尾聲


        在這篇博文中,我介紹了streamlit ,并展示了如何利用它將python腳本轉換為儀表板,以及如何在線托管。在我看來,這是向非技術受眾展示研究成果的絕佳方式。線性執行模式會讓調整現有腳本變得簡單。代碼不會成為阻礙,結果看起來也很棒。


        因此,下次當你想在notebook中顯示一些數據時,請考慮改用儀表板。


        這篇博文中的所有代碼都可以從Github獲得(https://github.com/stefsmeets/dashboard_blog)


        原文標題:

        Forget about Jupyter Notebooks — showcase your research using Dashboards 

        原文鏈接:

        https://medium.com/escience-center/forget-about-jupyter-notebooks-showcase-your-research-using-dashboards-5d13451ba374



        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        c++相關文章:c++教程


        通信相關文章:通信原理


        藍牙技術相關文章:藍牙技術原理


        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 惠州市| 尼勒克县| 屯留县| 平潭县| 凉山| 义乌市| 吉首市| 冕宁县| 鲁山县| 金山区| 井陉县| 布尔津县| 屏山县| 双城市| 涞源县| 淅川县| 泽库县| 鹤壁市| 舒兰市| 临清市| 裕民县| 津市市| 新巴尔虎右旗| 丰台区| 庐江县| 池州市| 清流县| 卢湾区| 滨州市| 湖州市| 肥西县| 南通市| 天台县| 灵丘县| 军事| 江北区| 福清市| 大埔区| 文登市| 南开区| 邹城市|