【问题标题】:Best data structure for sparse data with multiple dimensions多维稀疏数据的最佳数据结构
【发布时间】:2018-08-13 19:32:30
【问题描述】:

我想对我的数据进行结构化(类似于pandas),以便轻松进行数据探索。我尝试在此任务中使用xarray.DataArray(在pandashttp://pandas.pydata.org/pandas-docs/stable/dsintro.html#panel4d-and-panelnd-deprecated 中表示n 维数据的推荐方法),但鉴于我的数据稀疏,它似乎效率低下。 有没有更好的方法在 xarray.DataArray 或其他 Python 数据结构下构建我的数据,以便轻松进行数据探索?

数据说明

我的数据包含给患者的处方。每个条目包括:

  • 日期 (datetime64)
  • 患者 ID(整数)
  • 药物名称(字符串)
  • 药物类型(字符串)
  • 药物类别(字符串)
  • 预定剂量(实际值)
  • 按需剂量(实际值)

对于不同的患者,同一日期可能会有多个处方。患者还可以同时使用“强制”剂量和“可选/根据需要”剂量开出几种药物(例如,2-3 种药物)。我的数据集目前包含 397 个不同的患者、1520 个不同的日期和 161 种不同的药物。在 397*1520*161*2 条目中,我只有 21790 个非空条目(即 0.01%)。

初始代码

我的数据目前组织如下xarray.DataArray

drugs = xarray.DataArray(dosages, coords={'patient': patients, 'time': dates, 
                                          'drug': drug_names, 'timing': timings, 
                                          'drug_type': ('drug', drug_types), 
                                          'drug_class': ('drug', drug_classes)},
                         dims=['patient', 'time', 'drug', 'timing'])

在哪里dosages.shape = (len(patients), len(dates), len(drug_names), 2)timing 轴对应于“计划”与“按需”剂量。所有缺失/零条目都设置为numpy.nan

【问题讨论】:

  • 假设每个项目约 8 个字节,这将只有约 1.5 GB(例如397*1520*161*2*8 / 2 ** 30)。这应该适合几乎任何家用 PC、笔记本电脑等的内存,并且在工作/研究/学术计算资源上应该是微不足道的。是内存问题,还是您还想要一套关系数据算法(如 pandas API)但具有稀疏表示的本机实现?
  • 你可以看看h5pyPyTables;在 SO 上有一个很好的比较 here

标签: python python-3.x pandas python-xarray


【解决方案1】:

目前(从 0.10.2 版开始)xarray 仅支持密集数组,但有一个 Github 问题 https://github.com/pydata/xarray/issues/1375 要求支持稀疏数组。对该问题的快速检查表明,通过启用 xarray 以支持 sparse 模块,正在积极解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多