Zillion: 智能数据建模与分析的强大工具

RayRay
Zillion数据分析数据仓库SQLAlchemy自然语言处理Github开源项目

zillion

Zillion简介

Zillion是一款强大的数据建模和分析工具,它允许通过简单的API将多个数据源的数据结合起来进行分析。Zillion在您的数据之上充当语义层,为您编写SQL,并可以轻松地与现有的数据库基础设施集成。Zillion的NLP扩展还提供了实验性的AI支持的自然语言查询和仓库配置功能。

使用Zillion,您可以:

  • 定义包含各种SQL和/或文件数据源的数据仓库
  • 定义或反映数据中的指标、维度和关系
  • 运行多数据源报告并将结果合并到DataFrame中
  • 灵活地使用多级汇总和表格透视来聚合数据
  • 使用公式自定义或组合字段
  • 应用技术转换,包括滚动、累积和排名统计
  • 应用自动类型转换 - 例如,从"日期"列中获得免费的"年份"维度
  • 保存和共享报告规范
  • 利用临时或公共数据源、表格和字段来丰富报告
  • 使用自然语言查询您的数据仓库(NLP扩展)
  • 利用AI来引导您的仓库配置(NLP扩展)

Zillion Logo

安装

警告: 该项目处于alpha状态,可能会发生变化。请仔细测试生产使用并报告任何问题。

$ pip install zillion

$ pip install zillion[nlp]

Zillion基础知识

以下内容旨在快速概述Zillion中用于数据仓库的一些理论和术语,这对于该领域的新手来说会很有用。

简而言之:Zillion为您编写SQL,并通过非常简单的API使数据可访问:

result = warehouse.execute( metrics=["revenue", "leads"], dimensions=["date"], criteria=[ ("date", ">", "2020-01-01"), ("partner", "=", "Partner A") ] )

指标和维度

在Zillion中,报告请求中使用的主要有两种类型的字段:

  1. 维度:用于标记、分组和过滤的数据属性
  2. 指标:可以沿维度分解的事实和度量

字段封装了数据中列的概念。例如,您可能有一个名为"revenue"的字段。该字段可能出现在多个数据源中,或者可能出现在单个数据源内的多个表中。Zillion理解所有这些列代表相同的概念,它可以尝试使用其中任何一个来满足请求"revenue"的报告。

同样,用于构建仓库的主要有两种类型的表:

  1. 维度表:仅包含相关维度的参考/属性表
  2. 指标表:可能包含指标和一些相关维度/属性的事实表

维度表通常在行数方面是静态的或缓慢增长的,并且包含与主键相关的属性。一些常见的例子是美国邮政编码列表或公司/合作伙伴目录。

指标表通常更具事务性。一些常见的例子是Web请求记录、电子商务销售或股票市场价格历史。

仓库理论

如果您真的想深入了解Zillion采用的维度建模和钻取查询技术,我建议阅读Ralph Kimball关于数据仓库的

总之,钻取查询形成一个或多个查询,以满足对可能存在于多个数据源和/或表中特定维度粒度的指标的报告请求。

Zillion支持灵活的仓库设置,如雪花模式星型模式,尽管它并不挑剔。您可以通过父子血统指定表关系,Zillion还可以根据维度表主键的存在推断可接受的连接。Zillion目前不支持多对多关系,尽管大多数面向分析的场景应该能够通过在模型中添加视图来解决这个问题。

查询层

Zillion报告可以被认为在两个层次上运行:

  1. 数据源层:针对仓库数据源的SQL查询
  2. 组合层:针对数据源层组合数据的最终SQL查询

组合层只是另一个SQL数据库(默认为内存中的SQLite),用于将数据源数据联系在一起,并应用一些其他功能,如汇总、行过滤、行限制、排序、透视和技术计算。

仓库创建

有多种方法可以从本地或远程文件快速初始化仓库:

# 路径/链接到CSV、XLSX、XLS、JSON、HTML或Google表格 # 这将构建一个单表仓库,用于快速/临时分析。 url = "https://raw.githubusercontent.com/totalhack/zillion/master/tests/dma_zip.xlsx" wh = Warehouse.from_data_file(url, ["Zip_Code"]) # 第二个参数是主键 # 路径/链接到sqlite数据库 # 这可以构建单表或多表仓库 url = "https://github.com/totalhack/zillion/blob/master/tests/testdb1?raw=true" wh = Warehouse.from_db_file(url) # 路径/链接到WarehouseConfigSchema(或传递dict) # 这是推荐的生产方法! config = "https://raw.githubusercontent.com/totalhack/zillion/master/examples/example_wh_config.json" wh = Warehouse(config=config)

Zillion还提供了一个辅助脚本来为现有数据库引导DataSource配置文件。请参阅zillion.scripts.bootstrap_datasource_config.py。引导脚本需要连接/数据库url和输出文件作为参数。有关更多选项,请参阅--help输出,包括可选的--nlp标志,该标志利用OpenAI推断配置信息,如列类型、表类型和表关系。NLP功能需要安装NLP扩展,并在您的Zillion配置文件中设置以下内容:

  • OPENAI_MODEL
  • OPENAI_API_KEY

执行报告

Zillion的主要目的是针对Warehouse执行报告。在高层次上,您将按照以下方式制作报告:

result = warehouse.execute( metrics=["revenue", "leads"], dimensions=["date"], criteria=[ ("date", ">", "2020-01-01"), ("partner", "=", "Partner A") ] ) print(result.df) # Pandas DataFrame

与编写SQL相比,将维度视为group by SQL语句的目标列会有所帮助。将指标视为您正在聚合的列。将条件视为where子句。您的条件在数据源层SQL查询中应用。

ReportResult有一个Pandas DataFrame,其中维度作为索引,指标作为列。

据说Report有一个粒度,它定义了每个指标必须能够加入的维度,以满足Report要求。粒度所有维度的组合,包括在条件或指标公式中引用的维度。在上面的例子中,粒度将是{date, partner}。"revenue"和"leads"都必须能够加入这些维度,才能实现这个报告。

这些概念可能需要一些时间才能理解,显然会随着数据模型的具体情况而变化,但当您开始针对数据仓库制作报告时,您会变得更加熟悉它们。

自然语言查询

通过NLP扩展,Zillion对数据仓库的自然语言查询提供了实验性支持。例如:

result = warehouse.execute_text("revenue and leads by date last month") print(result.df) # Pandas DataFrame

此NLP功能需要运行Qdrant(向量数据库)实例,并在Zillion配置文件中设置以下值:

  • QDRANT_HOST
  • OPENAI_API_KEY

嵌入将在Qdrant和本地缓存中生成和存储。向量数据库将在您首次尝试使用它时通过分析仓库中的所有字段进行初始化。在此repo的根目录中提供了运行Qdrant的示例docker文件。

您可以控制字段的嵌入方式。特别是在任何字段的配置中,您可以选择是否从嵌入中排除字段或覆盖哪些嵌入映射到该字段。默认情况下,包括所有字段。以下示例将从嵌入中排除net_revenue字段,并将revenue指标请求映射到gross_revenue字段。

{ "name": "gross_revenue", "type": "numeric(10,2)", "aggregation": "sum", "rounding": 2, "meta": { "nlp": { // enabled defaults to true "embedding_text": "revenue" // str or list of str } } }, { "name": "net_revenue", "type": "numeric(10,2)", "aggregation": "sum", "rounding": 2, "meta": { "nlp": { "enabled": false } } },

此外,您还可以通过以下仓库级配置设置排除字段:

{ "meta": { "nlp": { "field_disabled_patterns": [ // list of regex patterns to exclude "rpl_ma_5" ], "field_disabled_groups": [ // list of "groups" to exclude, assuming you have // set group value in the field's meta dict. "No NLP" ] } }, ... }

如果在上述任何级别禁用了字段,它将被忽略。随着数据模型变得更加复杂,当您想在可能混淆类似命名字段的情况下指导NLP逻辑时,这种类型的控制会变得有用。每当您调整要排除的字段时,您都需要使用Warehouse.init_embeddings上的force_recreate标志强制重新创建嵌入集合。

注意: 这个功能还处于初级阶段。它的有用性将取决于输入查询和数据模型(即良好的字段名称)的质量!

Zillion配置

除了配置Warehouse的结构(将在下面进一步讨论)之外,Zillion还有一个全局配置来控制一些基本设置。ZILLION_CONFIG环境变量可以指向yaml配置文件。有关可以设置的值的更多详细信息,请参阅examples/sample_config.yaml。以ZILLION_前缀的环境变量可以覆盖配置设置(即ZILLION_DB_URL将覆盖DB_URL)。

用于存储Zillion报告规范的数据库可以通过在Zillion配置中将DB_URL值设置为有效的数据库连接字符串来配置。默认情况下,使用/tmp中的SQLite数据库。

示例 - 销售分析

下面我们将介绍一个简单的假设销售数据模型,演示基本的DataSourceWarehouse配置,然后展示一些示例报告。数据是Zillion测试代码的一部分的简单SQLite数据库。作为参考,架构如下:

CREATE TABLE partners ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE campaigns ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL UNIQUE, category VARCHAR NOT NULL, partner_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE leads ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL, campaign_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE sales ( id INTEGER PRIMARY KEY, item VARCHAR NOT NULL, quantity INTEGER NOT NULL, revenue DECIMAL(10, 2), lead_id INTEGER NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

仓库配置

可以从定义其字段、数据源和表的JSON或YAML配置创建Warehouse。下面的代码显示了如何在一行代码中完成,如果您有指向JSON/YAML Warehouse配置的指针:

from zillion import Warehouse wh = Warehouse(config="https://raw.githubusercontent.com/totalhack/zillion/master/examples/example_wh_config.json")

此示例配置在其DataSource connect信息中使用data_url,告诉Zillion动态下载该数据并将其连接为SQLite数据库。这对于快速示例或分析很有用,尽管在大

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多