24.基于四段式提示词框架的通用销量趋势分析流程

第一章、综述 在电商平台如淘宝和天猫中,销售数据是评估市场表现、预测未来趋势的重要依据。本文将探讨如何利用电商记插件与AI提示词框架来处理和分析淘宝天猫店铺的商品销量数据。该方法通过四个部分的AI提示词,结合Python、SQL和Vega-Lite工具,帮助企业家、电商从业者深入分析销量变化趋势,找出增长最显著的商品,并绘制趋势图。 电商记交互式文档 1. 电商记插件采集数据 …
24.基于四段式提示词框架的通用销量趋势分析流程

第一章、综述

在电商平台如淘宝和天猫中,销售数据是评估市场表现、预测未来趋势的重要依据。本文将探讨如何利用电商记插件与AI提示词框架来处理和分析淘宝天猫店铺的商品销量数据。该方法通过四个部分的AI提示词,结合Python、SQL和Vega-Lite工具,帮助企业家、电商从业者深入分析销量变化趋势,找出增长最显著的商品,并绘制趋势图。

电商记交互式文档

1. 电商记插件采集数据

首先,通过电商记插件,用户可以轻松地采集淘宝天猫店铺内的宝贝列表数据,包括商品标题、销量、价格、店铺信息等。在交互式文档的第一个HTML单元格,提供了一个链接,指向采集流程页面。这一链接的作用是指引用户如何使用电商记插件来抓取并整合数据,作为后续分析的基础。

Screenshot%20from%202025-04-29%2021-10-04

2. 数据清洗与转换

清洗数据是数据分析的关键步骤,尤其是在面对销量字段中多样化格式时。此部分代码使用Python来处理“销量”字段的数据,将其转换为统一的整数格式。这包括处理如“100+”、“5万”等不同形式的销量值。

假设每天采集数据的Excel文件都保存在同一个目录下。当下载任务结束后,我们需要在交互式文档中加载这个目录,运行Python代码进行清洗。

Untitled-2025-04-29-10

Untitled-2025-04-29-11

Untitled-2025-04-29-12

Untitled-2025-04-29-21

将整个内存目录保存到本地后,电脑上的Excel文件就完成了数据清洗步骤。

第1个AI提示词

第一个提示词的任务是生成Python代码用于数据进行清洗。比如,销量数据可能包含非标准格式的值(如“100+”、“5万”等),需要进行统一格式化。此外,商品ID和日期字段也需要进行标准化处理,以确保数据的一致性和准确性。提示词的详细解释参看前文

Excel文件中的“销量”字段包含多种格式的数据,诸如“100”、“100+”、“200”、“1300+”以及“5万”等。请编写Python代码,执行以下任务: 将“销量”字段中的所有数据转换为整数类型: 移除末尾的“+”字符; 将“5万”这样的格式转换为实际的数值(例如将“5万”转化为50000)。 将“宝贝ID”字段的类型转换为字符串。 将转换后的结果保存并覆盖原Excel文件。 请确保在处理过程中正确地识别并处理各种格式的数据。

在数据清洗过程中,我们使用了Python脚本,通过正则表达式来识别并处理这些非标准格式。对于包含“+”字符的销量数据,我们将其去除;对于表示“万”的格式,我们进行了转换,将其转化为实际的数值。这一过程确保了数据在后续分析中不会因格式问题而产生误差。

清洗过程的主要步骤:

  • 移除“+”字符。
  • 将“5万”转化为数字50000。
  • 确保“宝贝ID”字段转换为字符串类型,避免后续分析中因数据类型不匹配导致的错误。

生成Python代码

def convert_value(value):
    value_str = str(value)
    match = re.match(r"(\d+)([万])?", value_str)
    if match:
        number = int(match.group(1))
        unit = match.group(2)
        if unit == '万':
            return number * 10000
        else:
            return int(re.sub(r"[^\d]", "", value_str))
    return int(value)

此代码能够处理不同格式的销量数据并进行标准化,为后续的数据分析做好准备。

3. 数据的合并

由于我们拥有多天的采集数据,我们需要对这些数据进行合并,以便进行跨日期的比较和分析。在本框架中,我们利用DuckDB的SQL功能将不同日期的表格合并成一个“itemlist”视图。这一视图将包含所有采集数据,并方便后续的筛选、排序和分析操作。

初始化数据库

我们需要将所有Excel文件上传到在线分析处理的窗口。

Untitled-2025--04-29-01

Untitled-2025-04-29-02

Untitled-2025-04-29-03

Untitled-2025-04-29-04

验证Excel文件中的表格具有正确的数据结构

Untitled-2025-04-29-05

数据清洗之前的Excel表格结构

Untitled-2025-04-29-06

数据清洗之后的Excel表格结构

Untitled-2025-04-29-09

查看数据样本

Untitled-2025-04-29-07

Untitled-2025-04-29-08

第二个AI提示词

我们编写第二个AI提示词,生成用于数据合并的SQL查询语句。

你是一个精通DuckDB SQL的分析师,你的任务是将《资料》中指定名称的所有表格合并为一个名为itemlist的视图(如果该表已存在,则先删除该表)。请根据表格名称生成一个SQL查询语句,并确保包含适当的连接条件(如有需要)。

生成SQL代码

以下是合并数据的SQL操作示例:

CREATE VIEW itemlist AS
SELECT * FROM rpa_20250426_161959
UNION ALL
SELECT * FROM rpa_20250427_152444
UNION ALL
SELECT * FROM rpa_20250428_140934
UNION ALL
SELECT * FROM rpa_20250429_143958;

通过使用UNION ALL语句,我们将来自不同日期的表格数据合并成一个名为“itemlist”的视图。这个视图包括了所有日期的数据,可以帮助我们更全面地分析商品在不同时间段的表现。UNION ALL操作会保留所有记录,不会去除重复数据,因此适用于需要保留全部数据的情况。

Untitled-2025-04-30-22

4. 筛选销量增长商品

在这个步骤中,AI提示词利用SQL的窗口函数和条件筛选,找出销量每天都在增加的商品,并根据其总销量增幅进行排序,最终筛选出前50个增长最快的商品。这些商品将被保存为“topitemlist”视图。

第三个AI提示词

你是一个精通DuckDB SQL的分析师,你的任务是筛选出每天销量都没有减少的商品,并根据销量增幅对这些商品进行排序,选出前30个商品的完整销量记录。假设你已经每天采集了一批指定淘宝商品的销量记录,并且已采集若干天数据,保存在表格itemlist中。请根据《资料》提供的表格结构生成SQL查询语句,确保输出的记录按照销量增幅排序,并且只包含前50个商品,最终查询结果保存在名为“topitemlist”的视图中(如果该表已存在,则先删除该表)。

生成SQL代码

DROP VIEW IF EXISTS topitemlist;
CREATE VIEW topitemlist AS (
WITH
-- 步骤1: 筛选出每日销量未减少的商品ID
非递减商品 AS (
    SELECT 宝贝ID
    FROM (
        SELECT 
            宝贝ID,
            销量,
            LAG(销量) OVER (PARTITION BY 宝贝ID ORDER BY 采集日期) AS 前日销量
        FROM itemlist
    )
    GROUP BY 宝贝ID
    HAVING BOOL_AND(COALESCE(销量 >= 前日销量, TRUE))
),

-- 步骤2: 计算每个商品的销量总增幅(最后一日 - 第一日)
增幅计算 AS (
    SELECT 
        宝贝ID,
        (MAX(CASE WHEN is_last THEN 销量 END) - 
         MIN(CASE WHEN is_first THEN 销量 END)) AS 总增幅
    FROM (
        SELECT 
            宝贝ID,
            销量,
            采集日期 = MAX(采集日期) OVER (PARTITION BY 宝贝ID) AS is_last,
            采集日期 = MIN(采集日期) OVER (PARTITION BY 宝贝ID) AS is_first
        FROM itemlist
        WHERE 宝贝ID IN (SELECT 宝贝ID FROM 非递减商品)
    )
    GROUP BY 宝贝ID
),

-- 步骤3: 按增幅排序并取前50名
TOP商品 AS (
    SELECT 
        宝贝ID,
        总增幅,
        ROW_NUMBER() OVER (ORDER BY 总增幅 DESC) AS 排名
    FROM 增幅计算
    WHERE 总增幅 >= 0  -- 确保非负增长
    QUALIFY 排名 <= 50
)

-- 最终输出:获取TOP商品的完整记录并按规则排序
SELECT 
    il.*,
    t.总增幅,
    t.排名
FROM itemlist il
JOIN TOP商品 t ON il.宝贝ID = t.宝贝ID
ORDER BY 
    t.排名,         -- 先按总增幅排名排序
    il.采集日期    -- 同商品内按日期排序
);

SELECT * FROM topitemlist LIMIT 8;

通过这一步骤,分析师能够从大量的商品中挑选出最具增长潜力的商品,进一步帮助商家调整营销策略。

Screenshot%20from%202025-04-30%2014-18-29

5. 数据可视化

通过Vega-Lite,AI提示词将数据可视化为折线图,展示每个商品随时间变化的销量趋势。X轴表示日期,Y轴表示销量,而不同的颜色则表示不同的商品ID,颜色深浅代表商品排名的高低。

第四个AI提示词

你是精通Vega-Lite的可视化专家,你的任务是生成Vega-Lite JSON代码,用于绘制折线图。具体要求如下: X轴:使用“采集日期”字段。 Y轴:使用“销量”字段。 颜色:不同颜色的折线表示不同的“宝贝ID”,排名越前面的颜色越深。 数据源:表格名为“topitemlist”,包含“宝贝ID”、“采集日期”和“销量”字段,描述参看《资料》。 生成的Vega-Lite JSON代码应该能够清晰地展示每个宝贝ID随时间变化的销量趋势,使用颜色区分宝贝ID的排名。在工具提示中显示宝贝的所有信息。

生成VegaLite代码

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "width": 1000,
  "height": 1000,
  "data": {
    "name": "topitemlist"
  },
  "transform": [
    {
      "calculate": "toDate(datum['采集日期'])",
      "as": "采集日期"
    }
  ],
  "mark": {
    "type": "line",
    "tooltip": true
  },
  "encoding": {
    "x": {
      "field": "采集日期",
      "type": "temporal",
      "axis": {
        "title": "采集日期",
        "labelAngle": 45
      }
    },
    "y": {
      "field": "销量",
      "type": "quantitative",
      "axis": {
        "title": "销量"
      }
    },
    "color": {
      "field": "宝贝ID",
      "type": "nominal",
      "scale": {
        "domain": {
          "data": "topitemlist",
          "field": "宝贝ID",
          "sort": {
            "field": "排名",
            "op": "min",
            "order": "ascending"
          }
        },
        "scheme": "viridis"
      },
      "legend": {
        "titleFontSize": 14,
        "labelFontSize": 12,
        "orient": "right",
        "columns": 2
      }
    },
    "tooltip": [
      {"field": "宝贝ID", "type": "nominal", "title": "商品ID"},
      {"field": "标题", "type": "ordinal", "title": "标题"},
      {"field": "采集日期", "type": "temporal", "title": "日期", "format": "%Y-%m-%d"},
      {"field": "排名", "type": "ordinal", "title": "当前排名"},
      {"field": "销量", "type": "quantitative", "title": "销量"},
      {"field": "总增幅", "type": "ordinal", "title": "总增幅"}
    ]
  },
  "config": {
    "view": {
      "stroke": "transparent"
    }
  }
}

生成的折线图能清晰地显示出每个商品在不同日期的销量变化,帮助电商从业者了解哪些商品的销量增长迅速,哪些商品的销量稳定,哪些商品可能面临销量下降的风险。

visualization%20%2819%29

6. 总结

我们展示了一个基于四段式AI提示词的销量趋势分析框架,能够帮助电商从业者在淘宝和天猫平台上识别出销量增长最显著的商品,并将其转化为可操作的商业决策。这一框架结合了数据清洗、SQL查询、增幅分析和数据可视化等多个关键技术,能够为商家提供有效的市场洞察。

如果你是电商从业者,正面临销量分析和数据驱动决策的挑战,不妨立即尝试这一框架,开始深度挖掘你的店铺数据,找到那些值得关注和投资的产品!

Untitled-2025-04-29-20

第二章、数据上传与管理

在电商数据分析的过程中,有效的数据管理与处理是确保分析结果准确性和实时性的关键。为了从多个采集日期的淘宝天猫店铺数据中提取有价值的商业洞察,我们使用了基于DuckDB的在线分析处理窗口来上传和管理数据。DuckDB是一种高性能的列式数据库,特别适合进行复杂的查询操作与大数据处理,其内存高效性和快速的分析能力使其成为电商数据分析的理想选择。

1. 数据表的上传与结构

在本次分析框架中,我们首先上传了来自不同日期的数据集,分别对应2025年4月26日到4月29日的淘宝天猫店铺销量数据。这些数据是通过电商记插件从淘宝平台上采集的,并被转换为Excel文件格式。通过DuckDB,我们能够将这些Excel文件直接上传至数据库中,并在在线分析处理窗口中进行高效的数据操作与查询。

上传后的数据表分别命名为:

  1. rpa_20250426_161959
  2. rpa_20250427_152444
  3. rpa_20250428_140934
  4. rpa_20250429_143958

这些表格名称的命名规则反映了数据采集的日期与时间,例如“rpa_20250426_161959”表示的是2025年4月26日16:19:59采集的数据。每个表格对应一份来自淘宝店铺的销量记录,包含了商品的详细信息,包括宝贝ID、标题、销量、店铺域名、采集日期、价格等关键字段。

2. 数据管理与查询操作

上传到DuckDB的表格一旦成功导入,就可以通过SQL查询语言进行灵活的数据管理与操作。DuckDB的优势之一就是它提供了丰富的SQL支持,使得用户可以非常方便地对上传的表格进行数据的查询、清洗和分析操作。在上述代码中,我们首先通过以下SQL命令展示了当前数据库中的所有表格:

SHOW TABLES

该命令返回了数据库中已存在的表格列表,包括“rpa_20250426_161959”、“rpa_20250427_152444”等,显示了当前存储在DuckDB中的各个数据集。通过此操作,我们能够快速确认数据是否已成功上传,以及每个数据集的名称与采集日期。

[
  {"name": "rpa_20250426_161959"},
  {"name": "rpa_20250427_152444"},
  {"name": "rpa_20250428_140934"},
  {"name": "rpa_20250429_143958"}
]

数据表的结构

每个表格都包含多个字段,这些字段代表了每个商品的详细信息,以下是每个表格可能包含的主要字段:

  • 宝贝ID(Item ID):每个商品的唯一标识符。
  • 标题(Title):商品的名称或描述,通常包含关键词。
  • 销量(Sales Volume):商品在指定日期的销量记录。
  • 店铺域名(Shop URL):商品所属的淘宝店铺网址。
  • 采集日期(Collection Date):数据采集的具体日期。
  • 价格(Price):商品的售价。

这些表格结构使得商家能够针对不同日期的数据进行详细分析,并可以根据这些关键字段对商品的销量、价格和其他特性进行交叉分析。例如,商家可以查询某一日期或某一店铺内所有商品的销量数据,或者对比不同日期间的销量变化。

3. 第二个AI提示词:数据表合并与视图创建

在电商数据分析中,尤其是处理跨多个日期的销量数据时,我们常常需要将不同的表格合并为一个统一的数据集。这个过程不仅有助于简化后续的分析,还能确保我们能够从整体上把握商品销量的变化趋势。在这个环节中,AI提示词的任务是通过DuckDB SQL语言,将多个日期采集的数据表合并为一个名为“itemlist”的视图,并确保如果该视图已存在则进行删除操作。

AI提示词

我们编写第二个AI提示词,生成用于数据合并的SQL查询语句。

你是一个精通DuckDB SQL的分析师,你的任务是将《资料》中指定名称的所有表格合并为一个名为itemlist的视图(如果该表已存在,则先删除该表)。请根据表格名称生成一个SQL查询语句,并确保包含适当的连接条件(如有需要)。

任务目标

AI提示词的核心任务是将多个独立的数据表合并为一个单一的视图,命名为“itemlist”。通过这个视图,所有的数据将被统一在一个虚拟表格中,便于进行后续的数据筛选、排序和分析。具体任务如下:

  1. 删除已有的“itemlist”视图:如果数据库中已经存在名为“itemlist”的视图,则首先删除它,确保创建新视图时不会发生冲突。
  2. 合并多个表格:将《资料》中指定的所有表格合并为一个视图。这里,表格名称根据实际数据采集的日期不同而不同,通常格式为“rpa_年月日_时间”。
  3. 适当的连接条件:确保在合并过程中,数据表之间能够正确匹配并合并,避免数据错位或重复。

4. SQL查询语句生成

为了实现这个任务,我们首先需要使用SQL语句删除现有的视图,然后通过合并操作将多个表格数据整合为一个新的视图。以下是详细的SQL查询语句:

-- 删除已存在的视图 itemlist,避免冲突
DROP VIEW IF EXISTS itemlist;

-- 创建新的视图 itemlist,并将不同日期的表格合并
CREATE VIEW itemlist AS
SELECT * FROM rpa_20250426_161959
UNION ALL
SELECT * FROM rpa_20250427_152444
UNION ALL
SELECT * FROM rpa_20250428_140934
UNION ALL
SELECT * FROM rpa_20250429_143958;

DROP VIEW IF EXISTS 语句

在执行任何创建视图或表格的操作之前,我们首先要确保目标视图(此处为itemlist)如果已存在,则将其删除。使用DROP VIEW IF EXISTS语句,能够安全地删除数据库中的“itemlist”视图。如果该视图不存在,SQL引擎会忽略错误,不会影响后续的操作。

  • DROP VIEW:表示删除视图。
  • IF EXISTS:在删除前检查视图是否存在。如果不存在,则跳过删除操作,避免报错。

CREATE VIEW 语句

在删除现有视图之后,使用CREATE VIEW语句来创建新的“itemlist”视图。该视图将通过合并来自不同日期的数据表来完成,合并操作通过UNION ALL实现。

  • CREATE VIEW itemlist AS:创建一个名为“itemlist”的视图。视图本质上是一个虚拟表格,它并不实际存储数据,而是保存一个查询定义,查询结果将即时计算。
  • *`SELECT FROM**:从指定的表格中选择所有字段数据。此处选择了不同日期的表格:rpa_20250426_161959rpa_20250427_152444rpa_20250428_140934rpa_20250429_143958`。

UNION ALL 操作

UNION ALL用于将多个表格的数据合并成一个集合。在这个例子中,我们使用了四个UNION ALL操作来合并来自不同日期的数据表:

  • UNION ALL:表示将多个查询的结果合并,UNION ALL不会去除重复记录,确保所有的数据都被保留。这是因为我们希望保留不同日期的所有记录,进行完整的趋势分析。

通过UNION ALL,我们能够将不同表格中的数据垂直堆叠成一个统一的视图,每个表格的数据都会被追加到合并结果的末尾。

合并后的视图

执行这些SQL语句后,所有表格的数据将合并成一个“itemlist”视图,该视图包括所有日期的数据。这个视图将成为后续数据分析和趋势计算的基础,便于在同一数据集中进行操作,如筛选、排序、聚合等。

5. 合并数据的实际效果

通过将多个日期的表格合并为一个视图,我们获得了一个包含所有采集数据的大表。在这个大表中,我们可以对每个商品的销量、价格、标题等字段进行横向对比,分析不同日期间的销量变化趋势。对于电商商家来说,能够通过这种合并后的视图,便于快速评估哪些商品的销量在多个日期中都有显著的增长,从而为后续的营销策略提供数据支持。

适用场景与数据优化

此操作特别适用于以下场景:

  1. 跨日期分析:商家希望在多个日期之间对同一商品的销量进行比较。通过合并这些数据,我们可以分析某个商品在多个日期的销量增长趋势,及时发现哪些商品表现最佳。

  2. 数据集中管理:在多个表格间进行合并后,商家可以通过一个统一的视图进行数据分析,避免在查询中切换多个表格,提高工作效率。

  3. 实时更新:每当新的数据表上传时,只需通过CREATE VIEW语句重新生成“itemlist”视图,便可实时查看最新的数据,而无需重复创建新的表格。

总结

通过这个AI提示词,我们成功地将多个日期采集的表格数据合并为一个名为“itemlist”的视图。这个合并操作不仅帮助商家统一管理来自不同日期的数据,还为后续的数据分析提供了便捷的操作平台。商家可以利用这个视图进行更深层次的销量趋势分析,进一步优化库存管理和营销策略。

6 DuckDB的优势

通过使用DuckDB进行数据上传和管理,商家能够利用其高效的查询性能来处理大规模电商数据。DuckDB是为列式存储优化的,因此在处理大数据集时,尤其是涉及到复杂的SQL查询和多表连接时,能够提供显著的性能优势。此外,DuckDB的内存高效性使得商家能够在本地快速处理数据,而无需依赖远程数据库或服务器。

DuckDB的高性能查询能力使得商家可以在短时间内获得数据的深入洞察,进一步提高市场决策的速度和准确性。这对于需要实时监控商品销量和市场趋势的电商商家来说,具有极大的价值。

7 总结

通过基于DuckDB的在线分析处理窗口上传和管理数据,商家可以轻松地将不同日期的销量数据合并成一个统一的数据集,进行进一步的分析。数据的清洗、整理和合并过程为后续的销量趋势分析打下了坚实的基础。同时,DuckDB提供的高效查询和数据处理能力,使得商家能够快速响应市场变化,做出及时的商业决策。在现代电商环境中,这种数据驱动的分析方法无疑是提升竞争力的关键。

第三章、筛选销量持续增长商品并排序

1. 任务概述

在这一部分,我们的目标是筛选出每天销量都没有减少的商品,并根据销量增幅对这些商品进行排序,选出前30个商品的完整销量记录。我们假设已将数据采集并存储在名为itemlist的表格中,该表格包含了不同日期的商品销量数据。最终,我们将根据销量增幅的排序,提取出前50个商品,并将结果保存为一个名为topitemlist的视图。如果该视图已存在,先删除它再创建。

为此,使用DuckDB SQL进行数据处理,包括以下几个步骤:

  1. 筛选出销量始终没有减少的商品
  2. 计算每个商品的总销量增幅
  3. 按照销量增幅对商品进行排序,并选出前50个商品
  4. 输出最终结果,并创建视图

第三个AI提示词

你是一个精通DuckDB SQL的分析师,你的任务是筛选出每天销量都没有减少的商品,并根据销量增幅对这些商品进行排序,选出前30个商品的完整销量记录。假设你已经每天采集了一批指定淘宝商品的销量记录,并且已采集若干天数据,保存在表格itemlist中。请根据《资料》提供的表格结构生成SQL查询语句,确保输出的记录按照销量增幅排序,并且只包含前50个商品,最终查询结果保存在名为“topitemlist”的视图中(如果该表已存在,则先删除该表)。

2. SQL查询语句解析

该查询语句通过多个步骤实现了任务的目标。首先,它通过窗口函数筛选出销量始终不减少的商品,然后计算每个商品的销量增幅,最后按照增幅排序并输出前50个商品的销量记录。以下是详细的SQL查询语句和各个步骤的解释:

DROP VIEW IF EXISTS topitemlist;
CREATE VIEW topitemlist AS (
WITH
-- 步骤1: 筛选出每日销量未减少的商品ID
非递减商品 AS (
    SELECT 宝贝ID
    FROM (
        SELECT 
            宝贝ID,
            销量,
            LAG(销量) OVER (PARTITION BY 宝贝ID ORDER BY 采集日期) AS 前日销量
        FROM itemlist
    )
    GROUP BY 宝贝ID
    HAVING BOOL_AND(COALESCE(销量 >= 前日销量, TRUE))
),

-- 步骤2: 计算每个商品的销量总增幅(最后一日 - 第一日)
增幅计算 AS (
    SELECT 
        宝贝ID,
        (MAX(CASE WHEN is_last THEN 销量 END) - 
         MIN(CASE WHEN is_first THEN 销量 END)) AS 总增幅
    FROM (
        SELECT 
            宝贝ID,
            销量,
            采集日期 = MAX(采集日期) OVER (PARTITION BY 宝贝ID) AS is_last,
            采集日期 = MIN(采集日期) OVER (PARTITION BY 宝贝ID) AS is_first
        FROM itemlist
        WHERE 宝贝ID IN (SELECT 宝贝ID FROM 非递减商品)
    )
    GROUP BY 宝贝ID
),

-- 步骤3: 按增幅排序并取前50名
TOP商品 AS (
    SELECT 
        宝贝ID,
        总增幅,
        ROW_NUMBER() OVER (ORDER BY 总增幅 DESC) AS 排名
    FROM 增幅计算
    WHERE 总增幅 >= 0  -- 确保非负增长
    QUALIFY 排名 <= 50
)

-- 最终输出:获取TOP商品的完整记录并按规则排序
SELECT 
    il.*,
    t.总增幅,
    t.排名
FROM itemlist il
JOIN TOP商品 t ON il.宝贝ID = t.宝贝ID
ORDER BY 
    t.排名,         -- 先按总增幅排名排序
    il.采集日期    -- 同商品内按日期排序
);

SELECT * FROM topitemlist LIMIT 8;

3. 查询步骤解析

步骤1:筛选销量不减少的商品

在这一步中,使用了窗口函数LAG)来比较每个商品在不同日期的销量数据,并筛选出销量始终未减少的商品。

  • LAG(销量):这个窗口函数允许我们查看每一行的前一行数据,即前一天的销量。PARTITION BY 宝贝ID确保每个商品的销量数据在同一组内处理。ORDER BY 采集日期确保按日期顺序对数据进行排列。

  • HAVING BOOL_AND(COALESCE(销量 >= 前日销量, TRUE)):通过BOOL_AND函数,确保每个商品的销量数据在所有日期中没有减少。COALESCE用来处理缺失值(例如首次记录的商品没有前日销量),默认将其视为“没有销量减少”。只有当所有日期的销量都大于或等于前一天的销量时,商品才会被选中。

步骤2:计算每个商品的销量总增幅

在这一部分,通过计算每个商品的总销量增幅来衡量该商品在所有采集日期中的表现。

  • MAX(CASE WHEN is_last THEN 销量 END):找到每个商品的最新销量(即最大日期的销量)。

  • MIN(CASE WHEN is_first THEN 销量 END):找到每个商品的最早销量(即最早采集日期的销量)。

通过这两个值的差值,计算出每个商品的总销量增幅。

  • GROUP BY 宝贝ID:按商品ID分组,确保每个商品的销量增幅是单独计算的。

步骤3:根据增幅排序并选取前50个商品

在这一步,我们根据每个商品的总增幅进行排序,并选出前50个销量增幅最大的商品。

  • ROW_NUMBER() OVER (ORDER BY 总增幅 DESC):为每个商品分配一个基于增幅的排名。DESC确保增幅最大的商品排在前面。

  • WHERE 总增幅 >= 0:只选取增幅为正的商品,避免选择销量下降的商品。

  • QUALIFY 排名 <= 50:选取增幅排名前50的商品。

最终输出:生成topitemlist视图

在最终的查询中,JOIN操作将topitemlist视图与itemlist表格连接,输出所有符合条件的商品的完整记录,并按照增幅排名和日期排序:

  • JOIN TOP商品 t ON il.宝贝ID = t.宝贝ID:通过商品ID连接商品的详细信息和销量增幅数据。

  • ORDER BY t.排名, il.采集日期:首先根据增幅排名排序,随后根据采集日期排序,以便查看每个商品的逐日变化。

4 结果与视图展示

最终,我们得到了一个包含前50个销量增幅最大商品的视图topitemlist。每个商品的记录包括商品ID、标题、销量、增幅、排名等信息,并按增幅和日期排序。这将帮助商家快速识别销量表现最好的商品,并为进一步的营销决策提供支持。

以下是部分示例输出(仅展示前8个商品):

[
  {"店铺域名": "https://shop332388057.taobao.com", "采集日期": "2025-04-26", "宝贝ID": "861839485931", "标题": "高颜值保温杯女ins2024新款316不锈钢水杯男生大容量学生专用杯子", "销量": 2000, "图片": "https://gw.alicdn.com/imgextra/O1CN01reQcYn1sX0IX2N89q_!!4611686018427380639-0-item_pic.jpg", "总增幅": 1000, "排名": 1},
  {"店铺域名": "https://shop332388057.taobao.com", "采集日期": "2025-04-27", "宝贝ID": "861839485931", "标题": "高颜值保温杯女ins2024新款316不锈钢水杯男生大容量学生专用杯子", "销量": 3000, "图片": "https://gw.alicdn.com/imgextra/O1CN01reQcYn1sX0IX2N89q_!!4611686018427380639-0-item_pic.jpg", "总增幅": 1000, "排名": 1},
  {"店铺域名": "https://shop332388057.taobao.com", "采集日期": "2025-04-28", "宝贝ID": "861839485931", "标题": "高颜值保温杯女ins2024新款316不锈钢水杯男生大容量学生专用杯子", "销量": 3000, "图片": "https://gw.alicdn.com/imgextra/O1CN01reQcYn1sX0IX2N89q_!!4611686018427380639-0-item_pic.jpg", "总增幅": 1000, "排名": 1}
]

5 总结

通过此查询,我们能够成功筛选出销量增长稳定的商品,并根据销量增幅对其进行排序。这不仅帮助商家识别出销量增速最快的商品,还能够为库存管理、推广策略以及供应链优化提供数据支持。

第四章:销量趋势可视化

1. 任务概述

在这部分任务中,我们将生成一个Vega-Lite JSON代码,以便绘制一个折线图,展示每个商品(通过宝贝ID标识)随时间变化的销量趋势。这个图表不仅能够清晰地展示商品的销量变化,还通过不同颜色的折线区分商品,同时提供工具提示,显示商品的所有关键信息。具体要求如下:

  1. X轴:使用“采集日期”字段,展示商品销量随时间的变化。
  2. Y轴:使用“销量”字段,展示每个商品在不同日期的销量。
  3. 颜色:每条折线代表一个商品,使用不同颜色区分不同的“宝贝ID”,排名越靠前的商品颜色越深。
  4. 数据源:数据来自“topitemlist”表格,该表格包含商品ID、采集日期和销量字段。

第四个AI提示词

你是精通Vega-Lite的可视化专家,你的任务是生成Vega-Lite JSON代码,用于绘制折线图。具体要求如下: X轴:使用“采集日期”字段。 Y轴:使用“销量”字段。 颜色:不同颜色的折线表示不同的“宝贝ID”,排名越前面的颜色越深。 数据源:表格名为“topitemlist”,包含“宝贝ID”、“采集日期”和“销量”字段,描述参看《资料》。 生成的Vega-Lite JSON代码应该能够清晰地展示每个宝贝ID随时间变化的销量趋势,使用颜色区分宝贝ID的排名。在工具提示中显示宝贝的所有信息。

2. Vega-Lite JSON代码解析

在本任务中,我们将使用Vega-Lite生成一个互动折线图,以便展示每个商品随时间变化的销量趋势。以下是生成的Vega-Lite JSON代码,并对各个部分进行详细解释:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "width": 1000,
  "height": 1000,
  "data": {
    "name": "topitemlist"
  },
  "transform": [
    {
      "calculate": "toDate(datum['采集日期'])",
      "as": "采集日期"
    }
  ],
  "mark": {
    "type": "line",
    "tooltip": true
  },
  "encoding": {
    "x": {
      "field": "采集日期",
      "type": "temporal",
      "axis": {
        "title": "采集日期",
        "labelAngle": 45
      }
    },
    "y": {
      "field": "销量",
      "type": "quantitative",
      "axis": {
        "title": "销量"
      }
    },
    "color": {
      "field": "宝贝ID",
      "type": "nominal",
      "scale": {
        "domain": {
          "data": "topitemlist",
          "field": "宝贝ID",
          "sort": {
            "field": "排名",
            "op": "min",
            "order": "ascending"
          }
        },
        "scheme": "viridis"
      },
      "legend": {
        "titleFontSize": 14,
        "labelFontSize": 12,
        "orient": "right",
        "columns": 2
      }
    },
    "tooltip": [
      {"field": "宝贝ID", "type": "nominal", "title": "商品ID"},
      {"field": "标题", "type": "ordinal", "title": "标题"},
      {"field": "采集日期", "type": "temporal", "title": "日期", "format": "%Y-%m-%d"},
      {"field": "排名", "type": "ordinal", "title": "当前排名"},
      {"field": "销量", "type": "quantitative", "title": "销量"},
      {"field": "总增幅", "type": "ordinal", "title": "总增幅"}
    ]
  },
  "config": {
    "view": {
      "stroke": "transparent"
    }
  }
}

3. Vega-Lite JSON结构与组件解释

$schema 与数据源定义

"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
  "name": "topitemlist"
}
  • $schema:指定Vega-Lite的版本和结构。这个属性帮助Vega-Lite正确解析和渲染可视化内容。
  • data:指定数据源为topitemlist,即从数据库中提取的数据表。它包含了宝贝ID、采集日期和销量等字段,用于后续的分析和绘图。

数据转换

"transform": [
  {
    "calculate": "toDate(datum['采集日期'])",
    "as": "采集日期"
  }
]
  • transform:使用calculate函数将“采集日期”字段转换为日期格式,确保其能在X轴上正确显示。datum['采集日期']获取数据中的“采集日期”值,toDate()将其转换为日期类型,以便绘图时按时间排序。

折线图定义与工具提示

"mark": {
  "type": "line",
  "tooltip": true
}
  • mark:指定可视化的类型为折线图(line)。每个商品在不同日期的销量数据将作为折线展示。
  • tooltip:启用工具提示,允许用户在鼠标悬停在某一折线点时查看该商品的详细信息,如宝贝ID、标题、销量等。

X轴与Y轴编码

"encoding": {
  "x": {
    "field": "采集日期",
    "type": "temporal",
    "axis": {
      "title": "采集日期",
      "labelAngle": 45
    }
  },
  "y": {
    "field": "销量",
    "type": "quantitative",
    "axis": {
      "title": "销量"
    }
  }
}
  • x:X轴使用“采集日期”字段,并指定类型为temporal(时间类型)。labelAngle设置为45度,确保日期标签在轴上有合适的显示角度,避免重叠。
  • y:Y轴使用“销量”字段,并指定类型为quantitative(数量类型)。这将展示每个商品在不同日期的销量。

颜色编码

"color": {
  "field": "宝贝ID",
  "type": "nominal",
  "scale": {
    "domain": {
      "data": "topitemlist",
      "field": "宝贝ID",
      "sort": {
        "field": "排名",
        "op": "min",
        "order": "ascending"
      }
    },
    "scheme": "viridis"
  },
  "legend": {
    "titleFontSize": 14,
    "labelFontSize": 12,
    "orient": "right",
    "columns": 2
  }
}
  • color:根据每个商品的宝贝ID为折线图着色。不同的宝贝ID将有不同的颜色,颜色深浅表示商品的排名,排名靠前的商品颜色越深。scheme使用了“viridis”配色方案,具有良好的可读性。
  • legend:为颜色编码添加图例,显示宝贝ID的不同颜色对应的排名。columns设置为2,确保图例分布合理,避免过多的颜色信息堆积。

工具提示

"tooltip": [
  {"field": "宝贝ID", "type": "nominal", "title": "商品ID"},
  {"field": "标题", "type": "ordinal", "title": "标题"},
  {"field": "采集日期", "type": "temporal", "title": "日期", "format": "%Y-%m-%d"},
  {"field": "排名", "type": "ordinal", "title": "当前排名"},
  {"field": "销量", "type": "quantitative", "title": "销量"},
  {"field": "总增幅", "type": "ordinal", "title": "总增幅"}
]
  • tooltip:配置折线图的工具提示。在用户将鼠标悬停在某条折线或某个数据点时,显示商品的详细信息,如宝贝ID、标题、采集日期、当前排名、销量和总增幅等。

配置视图样式

"config": {
  "view": {
    "stroke": "transparent"
  }
}
  • config:定义视图的样式设置。此处设置视图的边框透明(stroke: transparent),确保图表区域看起来更加干净和简洁。

4.总结

通过Vega-Lite JSON代码,我们可以清晰地展示每个商品的销量趋势,并根据宝贝ID的排名使用不同的颜色区分商品。通过这种方式,商家能够一目了然地看到哪些商品在特定日期间的销量变化,帮助他们在数据驱动的决策中更好地做出调整。同时,图表的工具提示功能提供了详细的商品信息,进一步增强了图表的可读性和实用性。