数据分析数据可视化大数据数据科学【免费下载链接】vaexOut-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 项目地址https://gitcode.com/gh_mirrors/va/vaex点击查看免费下载Vaex 是一个高性能 Python 库提供惰性求值的Out-of-Core DataFrame与 Pandas 定位相似但面向超大表格数据可在单机上以每秒超过 10 亿行10^9的速度计算均值、求和、计数、标准差等统计量并通过直方图、密度图和 3D 体积渲染实现大数据集的交互式可视化。本文以仓库根目录README.md为主线结合vaex-core、vaex-hdf5、vaex-arrow等包的源码实现系统讲解 Vaex 的安装方式、内存映射打开大文件、惰性表达式系统、groupby/聚合与 join 的底层原理帮助读者在单机内存受限的场景下直接上手亿级表格数据分析。Vaex 是什么Vaex 的核心定位是一套高性能的惰性 Out-of-Core DataFrame方案。与把全部数据加载进内存的 Pandas 不同Vaex 采用三种关键策略保证性能内存映射memory mapping数据文件HDF5、Apache Arrow 等通过操作系统内存映射打开不会整体读入内存零拷贝策略zero memory copy policy过滤、求值过程不复制数据数据始终保留在磁盘上仅在需要时按需流式读取惰性计算lazy computations表达式按需求值不浪费内存。可视化方面Vaex 基于直方图histograms、密度图density plots与3D 体积渲染volume rendering构建能够支撑大规模数据的交互式探索。README 声称其在 N 维网格上计算统计量可达到每秒超过 10 亿10^9样本/行的吞吐这是其宣传的核心性能指标仓库中benchmarks/目录如 aggregates.py、groupby.py、sort.py即用于对这些操作做基准跟踪。从源码结构看Vaex 采用分包架构核心引擎位于 packages/vaex-core/vaex/dataframe.py 与 packages/vaex-core/vaex/dataset.py文件格式支持分散在vaex-hdf5、vaex-arrow、vaex-astro等独立包中vaex元包见 packages/vaex/setup.py负责聚合这些组件。这种核心 插件的布局意味着你可以只安装需要的功能模块。安装 Vaex使用 pip 安装README 提供的最简安装方式$ pip install vaex使用 conda 安装$ conda install -c conda-forge vaex从 packages/vaex/setup.py 可以看到元包vaex的安装会自动拉起一组组件依赖vaex-core~4.19.0核心 DataFrame 引擎vaex-astro0.9.3,0.11天文数据格式FITS、VOTable 等vaex-hdf50.13.0,0.16HDF5 内存映射支持vaex-viz0.6.0,0.7可视化matplotlib 等vaex-server~0.10.0远程 DataFrame / 服务器支持vaex-jupyter0.8.2,0.10Jupyter 交互组件vaex-ml0.18.3,0.20机器学习功能。而vaex-core自身的运行依赖见 packages/vaex-core/setup.py包括numpy1.19.3,3、pandas1.0,3、pyarrow5.0.0Windows 上限定pyarrow21.0.0、cloudpickle、pydantic1.8.0等另有allextra 提供h5py、fsspec、s3fs2024、gcsfs0.6.2、diskcache等云存储与缓存能力。安装后的快速验证打开自带示例数据集vaex.example()在源码测试中表现为 330000 行规模的表格执行最简单的统计 import vaex df vaex.example() df.count() 330000 df.count(*, binby[x], shape4) array([ 10925., 155427., 152007., 10748.])上述计数示例取自 packages/vaex-core/vaex/dataframe.py 的 docstring可在安装后直接复现。即时打开海量数据文件内存映射支持的文件格式与打开方式README 强调 HDF5 与 Apache Arrow 两种格式的内存映射支持。vaex.open()是统一入口定义在 packages/vaex-core/vaex/init.py df vaex.open(sometable.hdf5) df vaex.open(somedata*.csv, convertbigdata.hdf5)其签名open(path, convertFalse, progressNone, shuffleFalse, fs_options{}, fsNone, *args, **kwargs)支持path本地或绝对路径、glob 通配串如*.hdf5、路径列表convert传入输出路径时调用dataframe.export做格式转换传True等价于convertpath.hdf5转换在输入文件或转换参数未变化时会跳过结合文件指纹fingerprint见 packages/vaex-core/vaex/file/init.pyshuffle转换时是否打乱数据fs_options/fs云存储文件系统参数后文详述。从版本 4.14.0 起vaex.open()会惰性读取 CSV 文件如需一次性读入内存应改用vaex.from_csv()或vaex.from_csv_arrow()。打开机制的源码实现vaex.open()最终委托给 packages/vaex-core/vaex/dataset.py 的open()。其核心是基于 entry point 的opener 插件注册机制首次调用时扫描entry_points(groupvaex.dataset.opener)把各文件格式的 opener 类加载进opener_classes先走快速路径对每个 opener 调用quick_test(path, ...)做扩展名等廉价判断再对通过快速测试的 opener 调用can_open(...)确认最后调用其open(...)返回 DataFrame全部失败时抛出IOError并汇总各 opener 的失败原因。以 Arrow 家族为例packages/vaex-core/vaex/arrow/opener.py 定义了ArrowOpenerquick_test检查扩展名为.arrowFeatherOpener检查.featherParquetOpener检查.parquet或空扩展名。实际读取时packages/vaex-core/vaex/arrow/dataset.py 会读取文件头 6 字节判断是 Arrow IPC File签名ARROW1还是 IPC Stream再选择对应的 Dataset 类Parquet 则走open_parquet支持partitioninghive分区参数。HDF5 一侧由 packages/vaex-hdf5/vaex/hdf5/dataset.py 的Hdf5MemoryMapped实现构造参数nommap默认值为(not vaex.file.memory_mappable(path)) or fs is not None即本地文件默认启用内存映射云文件或显式传入fs时则关闭。memory_mappable的实现packages/vaex-core/vaex/file/init.py很简单——只要路径没有scheme://前缀即为可内存映射的本地路径。而vaex.file.open同文件第 285 行起在mmapTrue时使用pa.memory_map(path, mode)打开这正是零拷贝的底层保证。S3 / GCS 云存储惰性流式读取README 提到惰性流式 内存映射的 S3 支持。vaex.open()的 docstringpackages/vaex-core/vaex/init.py给出了完整参数Amazon S3 的fs_options参数含义默认/取值anon/anonymous匿名访问false可取值true,True,1,false,False,0cache磁盘缓存true仅当数据只访问一次时才设 falseaccess_keyAWS 访问密钥缺省时读环境变量或~/.aws/credentialssecret_keyAWS 密钥同上profile从~/.aws/credentials中选择 profile默认defaultregionAWS 区域如us-east-1缺省自动确定endpoint_override自定义端点如localhost:9000minio所有fs_options也支持编码进路径的 query string 中 df vaex.open(s3://vaex/taxi/nyc_taxi_2015_mini.hdf5?anontrue) df vaex.open(s3://mybucket/path/to/file.hdf5, fs_options{access_key: my_key, secret_key: my_secret_key}) df vaex.open(s3://mybucket/path/to/file.hdf5?access_keyxxxsecret_keyyyy) df vaex.open(s3://mybucket/path/to/file.hdf5?profilemyproject)Google Cloud StorageGCS的fs_optionstoken认证方式使用anon表示匿名访问project等其余参数透传给gcsfs.core.GCSFileSystemcache磁盘缓存开关同上取值规则。 df vaex.open(gs://vaex-data/airlines/us_airline_data_1988_2019.hdf5, fs_options{token: None}) df vaex.open(gs://vaex-data/airlines/us_airline_data_1988_2019.hdf5?tokenanoncacheFalse)云文件默认缓存在$HOME/.vaex/file-cache/(s3|gs)下因此重复访问接近本地磁盘速度。路径中的?keyvalue解析由 packages/vaex-core/vaex/file/init.py 的split_options完成S3 profile 读取~/.aws/credentials的逻辑见 packages/vaex-core/vaex/file/s3.py。惰性表达式系统不浪费内存的特征工程README 强调不要为特征工程浪费内存或时间我们在需要时才惰性地转换数据。Vaex 的表达式系统构建在 packages/vaex-core/vaex/expression.py 之上expression_namespace第 49-51 行预置了np与nan因此np.sqrt(x)、np.log(y)这类 numpy 函数可以直接用于表达式_binary_ops第 53-83 行定义了完整的二元运算映射、-、*、/、//、、|、**、比较运算等含矩阵乘_unary_ops第 87-91 行覆盖~、-、一元运算这些运算符通过Meta元类动态注入到Expression类使表达式对象可以像普通 Python 对象一样组合运算。虚拟列把表达式变成新列DataFrame.add_virtual_column(name, expression, uniqueFalse)packages/vaex-core/vaex/dataframe.py可以把一个表达式注册为虚拟列之后可以像普通列一样引用但不会物化存储只在求值瞬间计算 df vaex.example() df.add_virtual_column(r, np.sqrt(df.x**2 df.y**2)) df.r.mean()这正是零内存浪费的体现。配合选择selection与过滤使用可以做到先定义、后按需计算。Out-of-Core DataFrame数据留在磁盘上README 明确过滤和表达式求值不会通过拷贝浪费内存数据保持不动仅在需要时流式读取从而推迟你需要集群的时间。这背后的实现是分块chunk流式处理。在 packages/vaex-core/vaex/dataframe.py 中定义了default_shape 128默认 bin 数量与default_chunk_size 1024**2默认块大小vaex.dataset侧packages/vaex-core/vaex/dataset.py同样默认chunk_size 1024**2行即每次流式处理约一百万行内存占用始终有界与总数据量无关。统计计算通过任务系统提交给执行器vaex.execution.Executor与多线程池见 packages/vaex-core/vaex/dataframe.py以count、mean、sum等 API同文件第 944、1049、1109 行为例它们统一走_compute_agg把计算拆成可并行、可分块的统计任务。stat.pypackages/vaex-core/vaex/stat.py还提供了count、sum、mean、std、covar等可组合的统计表达式对象支持延迟求值delayTrue返回 Promise之后再.get()。快速 groupby 与聚合README 宣称 Vaex 实现了并行化、高性能的groupby操作尤其是在使用类别categories列时吞吐超过 10 亿/秒。groupby入口位于 packages/vaex-core/vaex/dataframe.pydef groupby(self, byNone, aggNone, sortFalse, ascendingTrue, assume_sparseauto, row_limitNone, copyTrue, progressNone, delayFalse):对应的GroupBy、Grouper、BinnerTime类定义在 packages/vaex-core/vaex/groupby.py。底层分箱器binner包括_binner_scalar等宽分箱、_binner_ordinal序数分箱等packages/vaex-core/vaex/dataframe.py其 C 实现位于 packages/vaex-core/src如binner_ordinal.cpp、binner_hash.cpp、agg_count.cpp等这正是高性能的来源。BinnerTime支持按时间分辨率聚合其 docstringpackages/vaex-core/vaex/groupby.py给出了可直接运行的示例 import vaex import numpy as np t np.arange(2015-01-01, 2015-02-01, dtypenp.datetime64) y np.arange(len(t)) df vaex.from_arrays(tt, yy) df.groupby(vaex.BinnerTime.per_week(df.t)).agg({y: sum}) # t y 0 2015-01-01 21 1 2015-01-08 70 2 2015-01-15 119 3 2015-01-22 168 4 2015-01-29 87注意与普通Grouper的区别BinnerTime会补全最小到最大时间范围内所有缺失的时间桶而普通 groupby 只包含原数据中出现过的值。from_arrayspackages/vaex-core/vaex/init.py用于从内存 numpy 数组直接构造 DataFrame适合小数据演示from_pandas、from_dict等构造入口也都在同一模块中。快速 join不物化右表README 强调join 时不会拷贝/物化右表可节省数 GB 内存在 10 亿行上实现亚秒级 join。DataFrame.join的完整签名packages/vaex-core/vaex/dataframe.pydef join(self, other, onNone, left_onNone, right_onNone, lprefix, rprefix, lsuffix, rsuffix, howleft, allow_duplicationFalse, prime_growthFalse, cardinality_otherNone, inplaceFalse):底层由 packages/vaex-core/vaex/join.py 的DatasetJoin数据集实现支撑它继承DatasetDecorator只维护左右表的引用与连接键信息不复制数据序列化_encode时也只保存左右 DataFrame 的引用与 join 参数因此远程/序列化场景同样轻量。allow_duplication控制是否允许连接键重复导致的放大prime_growth与cardinality_other则用于优化大基数场景下的哈希构建策略。更多特性README 的 More features 部分列出了以下扩展能力均可由对应子包提供远程 DataFrame通过vaex-server包提供vaex.open()支持http://、ws://、vaexwss://等协议前缀直接连接远程服务见 packages/vaex-core/vaex/init.py服务端实现见 packages/vaex-server/vaex/serverJupyter / Voila 交互式 notebook 与仪表盘vaex-jupyter包提供bqplot、ipyvolume、ipympl、ipyleaflet等 widget 组件见 packages/vaex-jupyter/vaex/jupyter对应教程见 docs/source/tutorial_jupyter.ipynb无显式pipeline 的机器学习vaex-ml包把 scikit-learn、xgboost、lightgbm、catboost 等模型直接与 DataFrame 集成见 packages/vaex-ml/vaex/ml教程见 docs/source/tutorial_ml.ipynb。性能基准测试仓库benchmarks/目录使用 Airspeed VelocityASV管理基准测试见 benchmarks/README.rst覆盖聚合aggregates.py、groupbygroupby.py、过滤filter.py、排序sort.py、字符串strings.py、从 CSV 读取from_csv.py等关键路径。本地开发时可以这样跑conda install -c conda-forge asv asv dev --bench Strings # 在当前环境快速跑一遍每个测试只重复一次 asv run --python$(which python) # 完整跑一遍CI 侧由 ci/ 目录的脚本编排包括环境创建02-create-vaex-dev-env.sh、安装03-install-vaex.sh、测试套件04-run-test-suite.sh与 notebook 测试05-run-notebooks.sh可作为复现构建与测试流程的参考。入门路径与更多资源数据转换如何从 CSV、Pandas DataFrame 等高效转换数据见 docs/source/guides/io.ipynb完整教程从零开始的系列教程见 docs/source/tutorial.ipynb更系统的索引在 docs/source/tutorials.rst安装细节见 docs/source/installing.rst各数据格式的官方测试如 Arrow 相关测试在 tests/arrow、HDF5 测试在 tests/hdf5_test.py、groupby 测试在 tests/groupby_test.py是理解行为细节的第一手材料参与贡献请阅读 CONTRIBUTING.md。小结Vaex 通过内存映射 零拷贝 惰性计算三件套把亿级行表格数据的打开、统计、聚合、join 与可视化压缩到单机可完成的程度vaex.open()统一处理本地与云存储S3/GCS文件并自动选择 opener表达式系统与虚拟列让特征工程零内存开销分块流式执行器让过滤与统计始终内存有界groupby 与 join 在源码层面以不物化数据的方式换取吞吐。对于数据太大、Pandas 装不下、又不想马上引入集群的场景这套方案是直接可行的第一步。赞分享数据分析数据可视化大数据数据科学【免费下载链接】vaexOut-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 项目地址https://gitcode.com/gh_mirrors/va/vaex点击查看免费下载相关推荐Vaex Out-of-Core DataFrame从 pip 安装到内存映射打开、惰性表达式、Groupby 与 Join 的深入解析Vaex Out of Core DataFrame从 pip 安装到内存映射打开、惰性表达式、Groupby 与 Join 的深入解析 本文基于 packa数据分析数据可视化大数据数据科学V 语言实现一亿行挑战1BRC零拷贝内存映射与多线程分块聚合实战解析V 语言实现一亿行挑战1BRC零拷贝内存映射与多线程分块聚合实战解析 导读 本仓库 examples/1brc https://link.gitcode.编程语言编译器语言运行时标准库MLX Smart Quantize (MSQ)技术深度解析Gemma-4-12B-coder-fable5-composer2.5-v1的量化奥秘MLX Smart Quantize MSQ 技术深度解析Gemma 4 12B coder fable5 composer2.5 v1的量化奥秘 Gemma上一篇3步让旧款Mac免费运行最新macOSOpenCore Legacy Patcher完整上手指南下一篇图像跟踪技术揭秘AR Foundation Samples如何识别和追踪现实世界图像创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
