【发布时间】: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)但具有稀疏表示的本机实现?
标签: python python-3.x pandas python-xarray