作者:Stef Smeets翻译:王闯(Chuck)校对:欧阳锦
本文约2500字,建议阅读5分钟本文介绍了streamlit ,并展示了如何利用它将 python 脚本转换为仪表板,以及如何在线托管。相比于Jupyter Notebooks,仪表板更有利于向非技术受众展示研究成果。

标签:数据科学、可视化、仪表板、JupyterNotebook、Dashboard

 图片源自Unsplash,由Arie Wubben上传

作为一名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 np
from scipy.stats import norm
import matplotlib.pyplot as pltmu_in = 5
std_in = 5.0
size = 100def 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 distribution
mu, std = norm.fit(data)# Make some plots
x = 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 np
from scipy.stats import norm
import matplotlib.pyplot as plt
import streamlit as stst.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

编辑:于腾凯

校对:林亦霖

译者简介

王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 放弃Jupyter Notebooks吧,教你如何用仪表板展示研究成果相关推荐

  1. 独家|手把手教你赋能Jupyter Notebooks!(附代码)

    作者:Pranjal Chaubey 翻译:宋文伯 校对:丁楠雅 本文约1700字,建议阅读5分钟. 本文将通过介绍Jupyter Notebook的附加扩展组件和指令,为Jupyter Notebo ...

  2. 第02章 Python语法基础,IPython和Jupyter Notebooks

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  3. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  4. 《利用Python进行数据分析·第2版》第2章 Python语法基础,IPython和Jupyter Notebooks

    第 1 章 准备工作 第 2 章 Python 语法基础,IPython 和 Jupyter Notebooks 第 3 章 Python 的数据结构.函数和文件 第 4 章 NumPy 基础:数组和 ...

  5. 《利用Python进行数据分析·第2版》第2章 Python语法基础,IPython和Jupyter Notebooks...

    第1章 准备工作 第2章 Python语法基础,IPython和Jupyter Notebooks 第3章 Python的数据结构.函数和文件 第4章 NumPy基础:数组和矢量计算 第5章 pand ...

  6. RUNNING JUPYTER NOTEBOOKS ON A REMOTE SERVER VIA SSH

    My roommate, Monica, introduced me to Jupyter Notebooks last year. And since then, I've been addicte ...

  7. 萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks...

    Python Language Basics, IPython, and Jupyter Notebooks In [5]: import numpy as np #导入numpy np.random ...

  8. jupyter 写sql_了解适用于SQL Server的Jupyter Notebooks

    jupyter 写sql 介绍 (Introduction) The Jupyter notebook is a powerful and interactive tool that supports ...

  9. Jupyter Notebooks的安装和使用介绍

    最近又开始重新学习Python,学习中使用到了一款编辑器Jupyter Notebooks ,非常想安利给初学python的同学. 注:本文内容仅针对windows环境下安装和配置Jupyter No ...

最新文章

  1. 试读angular源码第三章:初始化zone
  2. python编程入门经典实例-总算明了python编程入门经典实例
  3. jdbc在项目中的应用
  4. 思考:Linux Kernel的中断处理函数中是否会被其它程序(中断/异常)打断?
  5. 【SQL语句】MySql、SqlServer查询近期记录
  6. 《VMware Virtual SAN权威指南(原书第2版)》一1.5 什么是Virtual SAN
  7. 【转载】分布式系统的理解
  8. python3 一 线程与互斥锁详解
  9. curl查看swift状态命令_微服务之——docker高级命令
  10. 【matlab】三维曲面(矩形网格---meshgrid)
  11. STM32F103mini教程学习总结与心得(三)---->中断
  12. 通过高德开放平台用出租车数据找出乘客上下车最频繁区域
  13. 嵌入式软件测试怎么实现自动化测试?
  14. c语言制作文字画面剧情游戏(摸索课设
  15. 办公小技巧:excel纸张大小设置
  16. 如何将PlayStation 4恢复出厂设置
  17. 【浅析华容道之一】华容道的前世今生
  18. excel下划线转换成驼峰命名形式
  19. 原装linux系统装win7系统,网购本自带Linux系统,要重装win7旗舰要到店里去吗?
  20. 线性表之顺序表的基本操作

热门文章

  1. 文件系统大目录下的操作性能效率提升
  2. 倾斜摄影行业背景知识介绍
  3. IntelliJ配置jenkins服务的Crumb Data
  4. 机器学习(一):概述
  5. JAVA 导出Excel 带有多个公式函数
  6. 移动互联网感言(董烨/Joven.Dong)
  7. 《肖申克的救赎》观后感
  8. kodi android 卡顿,解决KODI v17/16在电视上不能打开4K播放卡顿的问题
  9. excel如何用超链接直接打开文件
  10. 一个可以免费下载表情包的小程序