色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專(zhuān)欄

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

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

          發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2022-09-26 來(lái)源:工程師 發(fā)布文章

          作為一名Python 愛(ài)好者,我?guī)缀跤?Jupyter Notebooks (https://jupyter.org/)處理一切工作。Notebooks集成了markdown標(biāo)記語(yǔ)言、代碼和inline模式繪圖,使其成為探索性數(shù)據(jù)分析的絕佳工具。我使用這些Notebooks來(lái)開(kāi)發(fā)和共享代碼、開(kāi)發(fā)原型、探索程序庫(kù)、玩轉(zhuǎn)數(shù)據(jù)以及繪圖和可視化。Notebooks可以呈現(xiàn)為靜態(tài)html和pdf,因此也非常適合用來(lái)編寫(xiě)報(bào)告、文檔和教程……特別是當(dāng)你想要同時(shí)共享數(shù)據(jù)和代碼的時(shí)候。


          然而,作為一名研究人員,我發(fā)現(xiàn)代碼有時(shí)會(huì)妨礙我想要顯示的數(shù)據(jù)。那么問(wèn)題來(lái)了,當(dāng)我們要與非技術(shù)受眾分享數(shù)據(jù)時(shí),有哪些選擇?有比Notebooks更好的選擇嗎?


          Notebooks的槽點(diǎn)


          在我們繼續(xù)往下之前,不妨退后一步,看看Jupyter Notebooks存在的一些問(wèn)題。


          不可否認(rèn),利用Jupyter notebooks來(lái)展示研究結(jié)果在過(guò)去的幾年中已蔚然成風(fēng)。這意味著Jupyter Notebooks 的問(wèn)題也是眾所周知的。我必須要吐槽的是:


          1. 非線性執(zhí)行模式。Notebooks通常包含難以名狀的隱藏狀態(tài)。這對(duì)初學(xué)者來(lái)說(shuō)非常不友好。

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


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


          儀表板


          是時(shí)候請(qǐng)儀表板登場(chǎng)了。


          儀表板是一個(gè)從數(shù)據(jù)科學(xué)世界引入的相對(duì)較新的概念,它利用了現(xiàn)代web的優(yōu)點(diǎn)。從本質(zhì)上講,儀表板是用于快速瀏覽某些數(shù)據(jù)的簡(jiǎn)單web應(yīng)用程序。就像一個(gè)用來(lái)呈現(xiàn)數(shù)據(jù)的迷你圖形界面。


          在荷蘭eScience中心,我們喜歡使用儀表板來(lái)展示我們的數(shù)據(jù)

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


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


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

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

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

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


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


          Streamlit


          在這四個(gè)儀表板工具中,Streamlit最讓我印象深刻,因?yàn)樗?jiǎn)單易用。我有一個(gè)項(xiàng)目一直在用Streamlit開(kāi)發(fā)出的簡(jiǎn)單的數(shù)據(jù)處理GUI。以下是我整理的早先的使用心得:


          1. 使用一周后,我發(fā)現(xiàn)它非常容易上手。

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

          3. 無(wú)需了解任何web開(kāi)發(fā),因?yàn)樵搸?kù)的目的之一就是開(kāi)箱即用(劇透警告:確實(shí)如此)。

          4. API設(shè)計(jì)得非常好,易于管理,Python風(fēng)格明顯。你可以在一天內(nèi)掌握全部 API。有人會(huì)說(shuō) API 提供得選項(xiàng)很有限,但在我看來(lái)恰好,剛好適合我的大腦容量。它的文檔結(jié)構(gòu)也不錯(cuò),提供了清晰的解釋和示例。

          5. Streamlit開(kāi)發(fā)人員聲稱(chēng)這是用Python構(gòu)建數(shù)據(jù)應(yīng)用程序的最快方法。這聽(tīng)起來(lái)像是一種推銷(xiāo),但它可能是真的。你可以在幾分鐘內(nèi)將任何Python腳本變成交互式儀表板。


          從一個(gè)正常的繪圖過(guò)程......


          讓我們來(lái)看一個(gè)例子。作為一名研究人員,我有很多Python腳本或notebooks,它們?cè)谧鋈缦率虑椋?/span>


          1. 加載或生成數(shù)據(jù)

          2. 數(shù)據(jù)處理

          3. 繪圖


          我會(huì)無(wú)休止地調(diào)整參數(shù)并重新運(yùn)行腳本以獲得正確的繪圖。這對(duì)我來(lái)說(shuō)不是問(wèn)題。但是,當(dāng)與不太精通軟件的同事共享腳本時(shí),這意味著我就要扮演技術(shù)支持的角色。想想就頭痛,需要幫忙設(shè)置 Python、管理環(huán)境、修復(fù)錯(cuò)誤、滿(mǎn)足功能需求等……


          聽(tīng)起來(lái)很耳熟?


          下面的代碼片段生成一些數(shù)據(jù)(正態(tài)分布),對(duì)其進(jìn)行擬合,并從中創(chuàng)建一個(gè) matplotlib圖。它需要三個(gè)參數(shù),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腳本。


          圖片圖片 正態(tài)分布圖


          …再到酷炫的儀表板 


          讓我們通過(guò)四個(gè)簡(jiǎn)單的步驟將其變成交互式儀表板:


          1. import streamlist as st

          2. 用st.title添加標(biāo)題

          3. 用st.slider將輸入?yún)?shù)轉(zhuǎn)換為交互式滑塊

          4. 用st.pyplot繪圖


          注意,此時(shí)我們不必更改任何數(shù)據(jù)生成、擬合或繪圖相關(guān)的代碼!

























          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)

          現(xiàn)在變成儀表板了


          運(yùn)行儀表板程序,輸入如下命令行:



          streamlit run my_dashboard.py


          這會(huì)開(kāi)啟一個(gè)服務(wù)器端,然后利用瀏覽器就可以訪問(wèn)儀表板了(就像用Jupyter Notebook一樣)

          圖片

          圖片

          酷炫的儀表板


          Streamlit是如何工作的的?


          Streamlit 的工作方式非常有趣。每次移動(dòng)滑塊、選中一個(gè)框或按下一個(gè)按鈕時(shí),Streamlit 都會(huì)觸發(fā)腳本的重新運(yùn)行。每當(dāng)輸入值被更新,javascript 后端都會(huì)跟蹤這些值。


          這意味著代碼本身是線性執(zhí)行的。在我看來(lái),這種簡(jiǎn)單性是它與眾不同的地方。不需要任何回調(diào)或復(fù)雜的流控制。你的python腳本從上到下運(yùn)行。這使得理解代碼變得容易。python代碼只需經(jīng)過(guò)最少的修改,任何代碼腳本都可以變成儀表板。


          有什么缺點(diǎn)嗎?當(dāng)然。因?yàn)閟treamlit在每次更新時(shí)都會(huì)重新運(yùn)行整個(gè)腳本,所以感覺(jué)有點(diǎn)慢,尤其是在更新大量繪圖時(shí),它也可能卡在長(zhǎng)時(shí)間運(yùn)行的函數(shù)上。Streamlit提供了一些選項(xiàng)來(lái)緩存中間結(jié)果,從而優(yōu)化性能。

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


          繪圖庫(kù)


          上面的示例使用matplotlib進(jìn)行繪圖。Matplotlib一直是Python的首選繪圖庫(kù)。它已經(jīng)存在了近二十年,并且緊密集成在Python科學(xué)計(jì)算技術(shù)棧中。


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


          Streamlit 支持以下庫(kù):


          • matplotlib

          • altair

          • bokeh

          • plotly

          • seaborn

          • PyDeck

          • GraphViz


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


          共享儀表板


          好的,現(xiàn)在我們已經(jīng)制作了一個(gè)外觀精美的儀表板,以便任何人都可以上手把玩數(shù)據(jù)。那么如何部署呢?


          Streamlit 使用主機(jī)/服務(wù)器模型,這意味著你可以在自己的服務(wù)器上運(yùn)行它。


          更簡(jiǎn)單的辦法是使用streamlit云(https://streamlit.io/cloud)來(lái)托管你的儀表板(對(duì)學(xué)生和開(kāi)源項(xiàng)目免費(fèi))。我發(fā)現(xiàn)這也很容易設(shè)置。我所要做的就是在 github上創(chuàng)建一個(gè)包含代碼和需求文檔的repository。


          然后我使用Github SSO登錄到streamlit云,并啟動(dòng)了一個(gè)指向我的repo和代碼的新應(yīng)用程序。


          點(diǎn)擊這里

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


          尾聲


          在這篇博文中,我介紹了streamlit ,并展示了如何利用它將python腳本轉(zhuǎn)換為儀表板,以及如何在線托管。在我看來(lái),這是向非技術(shù)受眾展示研究成果的絕佳方式。線性執(zhí)行模式會(huì)讓調(diào)整現(xiàn)有腳本變得簡(jiǎn)單。代碼不會(huì)成為阻礙,結(jié)果看起來(lái)也很棒。


          因此,下次當(dāng)你想在notebook中顯示一些數(shù)據(jù)時(shí),請(qǐng)考慮改用儀表板。


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


          原文標(biāo)題:

          Forget about Jupyter Notebooks — showcase your research using Dashboards 

          原文鏈接:

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



          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

          c++相關(guān)文章:c++教程


          通信相關(guān)文章:通信原理


          藍(lán)牙技術(shù)相關(guān)文章:藍(lán)牙技術(shù)原理


          關(guān)鍵詞: AI

          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉