基于 Python 的数据可视化(无需安装)
基于 Python 的数据可视化(无需安装)
用 Python 为非计算用户编写交互式应用程序,而无需运行服务器
无论您在哪种类型的组织中工作,从事数据科学工作的人都存在各种计算技能和背景。对于精通计算的研究人员来说,最大的挑战之一是如何最有效地向计算能力较低的同事提供有用的工具。虽然 Python 是一种非常强大的数据分析和可视化工具,但对于非计算研究人员来说,在他们自己的计算机上安装和运行基于 Python 的应用程序并非易事。
然而,最近的创新 WebAssembly 使直接在 Web 浏览器中运行 Python 代码成为可能。您现在无需让 Python 服务器保持运行,只需设置一个静态网页,该网页直接在用户的机器上执行所有需要的计算。在本教程中,我将引导您完成几个简单的步骤来设置基于 Python 的 Web 应用程序(使用 流光 ) 由用户启动 无需安装任何东西 .
权衡数据科学的收益和成本
作为一名生物信息学家,我一直在寻找可以帮助我为我的合作者执行真正有用的分析的新工具。但采用新工具的决定并不仅仅基于它可以提供什么——我还必须权衡学习它的难度。很长一段时间以来,Web 开发的世界感觉就像我遥不可及,纯粹是因为学习 JavaScript 和 HTML/CSS 的明显困难。
虽然 Python(和 R)确实都可以用于设置交互式 Web 应用程序,但这些库( 烧瓶 , 短跑 , 流光 , 和 闪亮的 ) 旨在在活动服务器上运行,这些服务器在后端执行计算,然后将结果发送到用户浏览器上的前端。以这种方式运行 Web 应用程序本质上要困难得多,因为保持机器持续运行的成本以及提供受保护的网络连接的复杂性。有一些很棒的托管解决方案可用于共享基于 R 和 Python 的应用程序,但它足够复杂,我并不特别倾向于设置自己的版本。
它是如何成为可能的
深刻改变软件开发格局的转型工具 WebAssembly ,这使得编译 Python 代码成为可能,以便可以直接在 Web 浏览器中运行。编写在 Web 浏览器中运行的代码非常棒,因为您不再需要要求用户安装任何依赖项——他们几乎肯定已经有了 Web 浏览器。
在 JS 中实现 Python 的项目称为 吡咯烷酮 .使用这个框架, 橘由一郎 已经移植了 Python GUI 库 流光 叫 stlite .使用 stlite 可以编写完全在 Web 浏览器中运行的 Python 代码,这意味着用户不需要安装任何东西来运行它。
如果我还不是它的忠实粉丝,我可能不会对此感到兴奋 流光 .这个 Python 库使得构建一个简单的 GUI 变得非常容易,它可以驱动你喜欢的任何类型的数据可视化。与多个强大的绘图库( pyplot , 牵牛星 , 维加精简版 , 情节 , 散景 , pydeck , 和 图形可视化 ),以及灵活的控制 用户输入 , 页面布局 , 和 媒体展示 .
最重要的是,大脑空间开销很低——你不需要学习太多就可以启动和运行。如果您已经在使用 Python 并希望快速构建和部署交互式 Web 应用程序的原型,那么绝对值得您花时间探索 Streamlit。
现在,这些 Streamlit 应用程序可以提供给用户并直接在浏览器中运行。
预期用途和限制
你可以使用 Python 和 stlite 制作一个有效的 GUI,只要你记得它是直接在用户的浏览器中运行的。
- 加载需要一分钟——您的用户将从耐心中受益;
- 需要大量内存、CPU 或 I/O 的操作可能会导致问题 - 尽量保持计算尽可能轻量级;
- 您需要读取的任何文件也必须对用户的浏览器可用,方法是 (1) 自己托管它们,(2) 通过公共 URL 访问它们,或者 (3) 当用户将它们“上传”到浏览器中时;
- 访问控制很重要——任何有权访问该网页的人都可以运行该应用程序 和 阅读其来源。
入门
本指南将引导您完成:
- 在 GitHub 上复制模板存储库
- 添加您的 Streamlit 应用程序
- 本地测试
- 使用 GitHub Pages 公开部署到 Web
要使用本指南,您应该熟悉 (1) 在 GitHub 上操作软件存储库和 (2) 在本地运行 Streamlit。
要了解如何将 GitHub 存储库转换为交互式数据可视化应用程序,您可以看到此模板存储库 ( FredHutch/stlite-模板 ) 已托管在 https://fredhutch.github.io/stlite-template/ .
模板中的示例应用程序读取一组 RNAseq 计数(数据来自 BRITE-REU 编程研讨会 ),通过 CLR 或比例丰度对数据进行归一化,对行和列进行链接聚类,并向用户显示交互式热图。
1. fork 模板仓库
导航到 FredHutch/stlite-模板 存储库和 叉它 进入您自己的帐户或组织。确保更改名称和描述,因为您将制作全新的东西。
2. 添加您的 Streamlit 应用程序
运行您的应用程序所需的所有代码都应放在存储库中。根据您的应用程序的功能,您可能还需要采取一些额外的步骤:
- 将所有 Python/streamlit 代码放在文件中
应用程序.py
; - 在第 25 行添加应用程序导入的任何库
索引.html
(例如要求:[“点击”,“scipy”,“情节”],
); - 如果你有任何
@st.cache
在您的流光应用程序中添加装饰器,添加参数show_spinner=假
(考虑到 stlite 中的一个已知错误 )
2a。读入数据
我遇到的这个过程中最棘手的部分是如何读取外部数据源(例如 CSV 文件)。幸运的是,解决方案最终并没有变得太复杂。
核心问题是 要求
Pyodide 目前不支持库。这在使用有用的功能时会导致错误,例如 pd.read_csv
, 使用 要求
在幕后。相反,从浏览器内部读取远程文件的最佳方式(请记住,所有文件对于您的用户来说都是远程的,即使是您在存储库中设置的任何其他文件)是使用 pyodide.http
图书馆。
但是,那 吡咯烷酮
在 Python 中进行本地测试时,库不可用,就像 要求
在浏览器中运行时库不可用。
为了解决这个问题,我制作了一个小型辅助函数,它使用适合执行上下文的任何库从 URL 读取 CSV:
导入 streamlit 作为 st
导入导入库
导入请求
从 io 导入 StringIO
如果 importlib.util.find_spec("pyodide") 不是无:
从 pyodide.http 导入 open_url @st.cache(show_spinner=False)
def read_url(url:str, **kwargs):
"""从 URL 读取 CSV 内容""" # 如果pyodide可用
如果 importlib.util.find_spec("pyodide") 不是无:
url_contents = open_url(url)
别的:
r = requests.get(url)
url_contents = StringIO(r.text) 返回 pd.read_csv(
网址内容,
**夸格
)
随意复制或修改此代码,以读取您的应用程序可能需要的数据文件。
2b。暂存数据
最有趣和最有用的应用程序以某种方式处理和转换数据以显示并与用户交互。在考虑如何将数据导入您的应用程序时,有三个主要选项:
- 使用在公共 URL 上可用的数据(如 示例存储库 );
- 要求用户直接使用 streamlit 文件上传器实用程序 ;
- 自己托管数据,将其上传到应用程序可以访问的位置的网络上。
虽然自己托管数据(选项 3)可能看起来令人生畏,但实际上使用下面列出的使用 GitHub Pages 发布应用程序的步骤非常容易。将应用程序发布到特定 URL 后,您添加到存储库的任何其他文件也将在该 URL 上可用,并且可以由应用程序读取。因此,如果您想添加一些应用程序可以读取的数据文件,请按照本教程直到最后确定它可用的 URL,然后更新您的应用程序以从该 URL 读取。
3. 本地测试
在部署您的应用程序之前,在本地对其进行测试非常有帮助。首先,您可以使用本地 Python 副本(安装 streamlit)启动应用程序:
流式运行 app.py
在调试您发现的任何错误后,下一步是启动本地 Web 服务器以直接在浏览器中测试您的代码:
python3 -m http.server
在浏览器中检查错误时,最好打开 JavaScript 控制台(在 Chrome 中显示):
4. 使用 GitHub Pages 公开部署到 Web
虽然部署网站的方法有很多,但我发现 GitHub Pages 是将代码存储库转变为公共网页的最简单方法。为企业级帐户付费的用户也可以创建私人网站,但任何人都可以创建面向公众的页面。
需要明确的是,即使您的存储库是私有的,发布的网页仍然是公开的——您已被警告过。
部署到网络:
- 导航到您的存储库的网页(
www.github.com/<ORG> /<REPO>
); - 点击“设置”;
- 点击“页面”(在“代码和自动化”下);
- 在“Branch”下选择“main”(或者你想设置的repo的任何一个分支);
- 而已!
您很快就能在基于您的组织和存储库名称的 URL 上找到您的网页(尽管有自定义域名的选项)。例如 https://<ORG> .github.io/<REPO> /
.
例如,模板存储库[ https://github.com/FredHutch/stlite-template](https://github.com/FredHutch/stlite-template)
作为网页托管在[ https://fredhutch.github.io/stlite-template/](https://fredhutch.github.io/stlite-template/)
.
回到上传静态数据文件的解释,添加到模板存储库的任何文件都可以由具有该 URL 的应用程序读取,例如[ https://fredhutch.github.io/stlite-template/data_file.csv](https://fredhutch.github.io/stlite-template/data_file.csv.)
.
包起来
既然您已经成功构建了您的第一个无服务器 Web 应用程序,那么可能值得考虑一下 GUI 在您的工作中可能扮演什么角色(如果有的话)。虽然将工具直接交到用户/客户/合作者手中非常有吸引力,但也很明显,并非所有工具 应该 交到他们手中。
数据科学中的许多任务需要大量的计算资源,要么在笔记本电脑上运行需要很长时间,要么需要通过强大的授权和身份验证控制访问远程资源。其他任务由复杂的参数输入驱动,这些参数输入可能不容易向非专业用户解释,或者可能返回难以解释的结果。
Web 应用程序的理想 GUI 将提供 反应灵敏 和 内容丰富 允许用户以静态图像无法实现的方式探索和发现的可视化。值得探索鼠标悬停数据、交互式小部件以及可以展示数据的丰富功能和复杂性的任何其他方式的机会。如果你是 真的 成功,有人会从你的数据中找出一些你甚至没有意识到的东西。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明