python - 如何在大型数据集上创建交互式图形?
问题描述
我正在尝试在大型数据集上使用全息视图创建交互式图形。下面是一个名为trackData.cvs的数据文件示例
Event Time ID Venue
Javeline 11:25:21:012345 JVL Dome
Shot pot 11:25:22:778929 SPT Dome
4x4 11:25:21:993831 FOR Track
4x4 11:25:22:874293 FOR Track
Shot pot 11:25:21:087822 SPT Dome
Javeline 11:25:23:878792 JVL Dome
Long Jump 11:25:21:892902 LJP Aquatic
Long Jump 11:25:22:799422 LJP Aquatic
这就是我读取数据并绘制散点图的方式。
trackData = pd.read_csv('trackData.csv')
scatter = hv.Scatter(trackData, 'Time', 'ID')
scatter
因为这个数据集非常大,散点图的放大和缩小非常慢,希望加快这个过程。我研究并发现了在大型数据集上推荐的全息视图抽取,但我不知道如何在上面的代码中使用。我尝试过的大多数情况似乎都会引发错误。另外,有没有办法确保将时间列转换为微量?在此先感谢您的帮助
解决方案
Datashader 确实不处理此处使用的分类轴,但这与其说是软件的限制,不如说是我的想象——它应该如何处理它们?Datashader 散点图 (Canvas.points) 适用于位于连续索引 2D 平面上的大量点。这样的图近似于 2D 概率分布函数,累积每个像素的点以显示该区域的密度,并揭示像素之间的空间模式。
分类轴不具有与连续数值轴相同的属性,因为相邻值之间没有空间关系。特别是在这种情况下,ID 字段的排序没有明显的意义(它似乎是体育赛事类型的字母代码),所以我看不出像 Datashader 那样累积每个像素的 ID 值有任何意义设计做的。即使您将 ID 转换为数字,您也只会得到看似随机的噪声(如果 ID 值比垂直像素多),或者会出现一系列参差不齐的线条(如果 ID 值比像素少)。
在这里,也许只有几十个左右的唯一 ID 值,但有很多很多次测量?在这种情况下,大多数人会使用每个 ID 的框、小提琴、直方图或脊图来查看每个 ID 值的值分布。Datashader 点图是一个 2D 直方图,但如果一个轴是分类的,那么您实际上是在处理一组 1D 直方图,而不是单个组合的 2D 直方图,所以如果您想要的话,只需使用直方图。
如果您确实想尝试将每个 ID 的所有点绘制为原始点,您可以使用https://examples.pyviz.org/iex_trading/IEX_stocks.html中的垂直尖峰事件来做到这一点。您还可以添加一些垂直抖动,然后使用 Datashader,但这不是目前直接支持的东西,并且它没有普通 Datashader 绘图所做的明确数学解释(就近似密度函数而言)。
推荐阅读
- unreal-engine4 - 文件移动位置后虚幻引擎蓝图演员丢失参数
- python - 使用 OpenCV 从 Websocket 流中捕获图像
- android - Volley 错误响应字节不会从字节转换为字符串
- javascript - 将 JS 横幅添加到 WP 侧边栏
- mysql - 数据透视表 MySQL?
- rxjs - rxjs/redux-observable 基于不同payload的动态过滤
- amazon-web-services - terraform中的depends_on可以设置为文件路径吗?
- mysql - 有没有更好的方法在 laravel eloquent 中加入查询?
- python - 是否可以将列表的值划分为一定的次数
- python - Pylint 在 VScode 中无法识别 PYTHONPATH