快速加载常用数据集
快速加载常用数据集
通常情况下,我们会针对不同的数据格式采用不同的数据读取方式,例如使用 json 来读取 .json 文件,使用 jsonlines 来读取 .jsonl 文件,使用 pandas 或者 Python 的文件读取方式来获取 .csv 文件。但这些方法的读取时间各不相同,有快有慢,具体可参考《Python 数据读取方式以及时间比对》。
本文主要介绍如何快速加载常用的数据集。
jsonlines 读取数据集
此时,我们有一个 13G jsonlines 格式的数据集,我们使用 jsonlines 包进行读取。
- 读取代码:
1 | %%time |
- 所需时间:
1 | CPU times: user 2min 7s, sys: 10.2 s, total: 2min 17s |
需要花费较长的时间(2分20秒)才能够将数据全部读入,如果需要经常读取该数据,但又不想等这么久时间该怎么办呢?
转换为 HDF5
我们借助 vaex 包将数据转换为 HDF5 格式,关于 vaex 包的内容可以参考 GitHub。
- 首先,将数据组织成 pandas.DataFrame 格式。
1 | df_dataset = pd.DataFrame(data=datasets_redbook) |
- 然后,调用 vaex 的 from_pandas(),将其转换为 vaex 的 DataFrame 对象。
1 | df_vaex = vaex.from_pandas(df_dataset) |
- 导出成 HDF5 格式的数据集。
1 | %%time |
可以看到,光导出成 HDF5 格式的数据集就需要 2 分 21 秒了。虽然数据转换工作也需要大量的时间,但为了后续快速读取数据,这都是值得的,马上就是见证奇迹的时刻了!
读取 HDF5 格式数据集
使用 vaex 的 open() 函数,我们可以加载 HDF5 格式的数据集。
- 读取代码:
1 | %%time |
- 所需时间:
1 | CPU times: user 20 ms, sys: 728 ms, total: 748 ms |
仅需要 885 毫秒!我们再把它转换为 Python 的列表。
1 | %%time |
也就是说,后续每次打开 + 转换为列表操作总共不超过 14 秒!这快了近乎 10 倍!对于频繁使用的大规模数据集,我们都可以尝试将其转换为 HDF5 格式存储。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 clvsit 个人博客!