网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

大数据文摘授权转载自数据派THU

作者:Stef Smeets

翻译:王闯(Chuck)

校对:欧阳锦

作为一名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 distributiomu, std = norm.fit(data)# Make some plotsst.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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
杨绛:一个家庭最大的悲哀,不是没钱,而是妈妈张口闭口这3句话

杨绛:一个家庭最大的悲哀,不是没钱,而是妈妈张口闭口这3句话

华人星光
2024-11-09 15:23:11
中央定调!退休新规正式实施,提前退休和延迟退休,该如何选择?

中央定调!退休新规正式实施,提前退休和延迟退休,该如何选择?

社保小达人
2024-12-02 11:45:02
45岁泰国王后跑马拉松,官员们跪马路上加油,“卑躬屈膝”惹争议

45岁泰国王后跑马拉松,官员们跪马路上加油,“卑躬屈膝”惹争议

译言
2024-12-02 07:32:12
歌星臧天朔涉黑案:砸那英的酒吧,殴打杨坤,问成龙索要保护费

歌星臧天朔涉黑案:砸那英的酒吧,殴打杨坤,问成龙索要保护费

一更历史
2023-10-07 22:38:33
场均34+9+6!登顶联盟第一,你再这样打下去,快船肯定给你1.5亿

场均34+9+6!登顶联盟第一,你再这样打下去,快船肯定给你1.5亿

巴叔GO聊体育
2024-12-02 14:30:42
英超一场2-0,让拜仁成笑柄!4000万放走中场大师:带队18战16胜

英超一场2-0,让拜仁成笑柄!4000万放走中场大师:带队18战16胜

球场没跑道
2024-12-02 08:07:05
第三个乌克兰出现?高呼“今夜即可开战”,50万士兵准备就绪

第三个乌克兰出现?高呼“今夜即可开战”,50万士兵准备就绪

猎火照狼山
2024-12-02 00:05:02
法国小伙马库斯确认捐赠日本侵华照片,并计划在全球出版

法国小伙马库斯确认捐赠日本侵华照片,并计划在全球出版

现代快报
2024-12-02 18:01:07
《蜀锦人家》开播告诉我们,女配别选太惊艳,不然女主上不了桌

《蜀锦人家》开播告诉我们,女配别选太惊艳,不然女主上不了桌

娱乐圈十三太保
2024-12-02 16:20:35
吴柳芳账号解禁,越挖越白,管晨晨失声,你们说这可咋整?

吴柳芳账号解禁,越挖越白,管晨晨失声,你们说这可咋整?

青青子衿
2024-12-02 20:00:16
33 岁女教师担心职称答辩不通过而跳楼身亡!留下两个年幼的孩子

33 岁女教师担心职称答辩不通过而跳楼身亡!留下两个年幼的孩子

教师吧
2024-12-02 19:33:24
“欢迎黄总,生死不辱使命”,广州一教培机构20多人趴地上迎接领导?机构回应:可能是同行恶搞

“欢迎黄总,生死不辱使命”,广州一教培机构20多人趴地上迎接领导?机构回应:可能是同行恶搞

鲁中晨报
2024-12-02 18:56:04
3-1,穆帅双手举拳蹦跳庆祝:率土超豪门5连胜,追到仅差榜首3分

3-1,穆帅双手举拳蹦跳庆祝:率土超豪门5连胜,追到仅差榜首3分

侧身凌空斩
2024-12-03 03:03:22
美媒公布照片,等待仁爱礁破船解体已不可能,但中国的打法又变了

美媒公布照片,等待仁爱礁破船解体已不可能,但中国的打法又变了

文昌每日谈
2024-12-02 10:25:47
鉴宝|累坏牛的那片田,是筱田悠的田!

鉴宝|累坏牛的那片田,是筱田悠的田!

贵圈真乱
2024-11-07 21:12:51
哈哈哈哈!李易峰被嘲太小不如普通人,穿内裤坐床上选妃照片曝光

哈哈哈哈!李易峰被嘲太小不如普通人,穿内裤坐床上选妃照片曝光

扒星人
2024-12-02 16:10:56
告别战!主帅遭驱逐,痛击上海男篮,CBA黑马关键战:4大外援爆发

告别战!主帅遭驱逐,痛击上海男篮,CBA黑马关键战:4大外援爆发

话体坛
2024-12-02 22:49:15
巴拉圭外长称不接受对台“断交” 我外交部:没有任何谈判空间和妥协余地

巴拉圭外长称不接受对台“断交” 我外交部:没有任何谈判空间和妥协余地

人民资讯
2024-12-02 19:07:44
NBA30队潜在交易名单出炉!湖人3将上榜 勇士火箭各有4人在列

NBA30队潜在交易名单出炉!湖人3将上榜 勇士火箭各有4人在列

罗说NBA
2024-12-03 06:18:07
“夜钓”时都遇到过哪些离奇的事?网友的分享简直一个比一个离奇

“夜钓”时都遇到过哪些离奇的事?网友的分享简直一个比一个离奇

美好客栈大掌柜
2024-10-30 02:30:50
2024-12-03 07:48:49
大数据文摘
大数据文摘
专注大数据,每日有分享!
6489文章数 94347关注度
往期回顾 全部

科技要闻

英特尔CEO基辛格“下课”,立即生效!

头条要闻

环球:优衣库董事长表态遭渲染后 BBC又"碰瓷"新疆番茄

头条要闻

环球:优衣库董事长表态遭渲染后 BBC又"碰瓷"新疆番茄

体育要闻

什么?滕哈格还在曼彻斯特?

娱乐要闻

黄子韬徐艺洋官宣结婚,超般配!

财经要闻

刘世锦:扩大消费需求要找准重点或痛点

汽车要闻

小米汽车:11月交付继续超2万辆 全年冲刺13万辆

态度原创

本地
家居
时尚
健康
军事航空

本地新闻

云游中国|来伦布夏果感受充满Passion的人生

家居要闻

动线自由开合 开放中的私密

今年最好看的5件大衣!

花18万治疗阿尔茨海默病,值不值?

军事要闻

古特雷斯就叙利亚局势发表声明

无障碍浏览 进入关怀版