23.分析淘宝天猫店铺新品销量趋势

基于DuckDB在线分析处理

在电商分析领域,销售数据是了解市场动态和优化运营决策的关键。对于淘宝和天猫店铺的运营者来说,能够深入了解新品宝贝在不同时间段内的销量变化趋势,显得尤为重要。这不仅帮助他们识别哪些宝贝正在增长,哪些则可能面临销量下降的风险,同时还能够优化库存、调整营销策略。 本文将基于一个数据分析项目,详细讲解如何通过SQL查询、数据转换与可视化,识别出淘宝天猫店铺中销量增长显著的宝贝,并使用Vega-Lite生成折线图来展示其销量趋势。 引言 我们将描述一个应用案例,基于从淘宝天猫店铺中采集的新品宝贝列表数据(参看前文),重点聚焦在近三天内每个宝贝的销量变化。通过SQL查询将来自不同天的数据连...…
23.分析淘宝天猫店铺新品销量趋势
分享此内容

在电商分析领域,销售数据是了解市场动态和优化运营决策的关键。对于淘宝和天猫店铺的运营者来说,能够深入了解新品宝贝在不同时间段内的销量变化趋势,显得尤为重要。这不仅帮助他们识别哪些宝贝正在增长,哪些则可能面临销量下降的风险,同时还能够优化库存、调整营销策略。

本文将基于一个数据分析项目,详细讲解如何通过SQL查询、数据转换与可视化,识别出淘宝天猫店铺中销量增长显著的宝贝,并使用Vega-Lite生成折线图来展示其销量趋势。

引言

我们将描述一个应用案例,基于从淘宝天猫店铺中采集的新品宝贝列表数据(参看前文),重点聚焦在近三天内每个宝贝的销量变化。通过SQL查询将来自不同天的数据连接起来,结合一定的筛选条件,提取出增长最为显著的前30个宝贝,并通过折线图展示这些宝贝的销量趋势。

电商记交互式文档

在浏览器中进行在线分析处理

随着现代Web技术的发展,数据分析不仅限于服务器端,越来越多的工具和框架开始支持在浏览器端进行数据处理和分析。基于DuckDB WASM技术,电商记交互式文档允许我们在浏览器中直接执行SQL查询和分析任务。开发者和数据分析师可以不依赖服务器,便捷地在用户的浏览器上进行高效的数据分析。

Untitled-2025-04-28-03

Untitled-2025-04-28-01

Untitled-2025-04-28-04

Screenshot%20from%202025-04-28%2021-04-18

1、什么是DuckDB Wasm?

DuckDB是一个开源的关系型数据库管理系统(RDBMS),它专为高效的数据分析设计。它支持标准的SQL查询,并能够处理大规模数据集。DuckDB本身被广泛应用于离线数据处理、分析任务以及数据科学工作流中。DuckDB Wasm是DuckDB数据库的WebAssembly版本,它能够在Web浏览器中运行,无需依赖后端服务器。

WebAssembly(简称Wasm)是一种新兴的技术,能够将其他语言(如C、C++、Rust等)编译为浏览器可以执行的二进制代码。通过WebAssembly,开发者可以在浏览器中运行高效的、接近原生性能的代码,这使得在浏览器中执行复杂的数据分析成为可能。

2、DuckDB Wasm的优势

  1. 无服务器部署: 使用DuckDB Wasm,用户可以直接在浏览器中执行数据查询,而无需将数据发送到远程服务器。这种方式降低了服务器负担,并且避免了数据在传输过程中的延迟和安全问题。

  2. 跨平台支持: DuckDB Wasm可以运行在任何现代浏览器中,包括Chrome、Firefox、Safari和Edge等。无论用户使用的是桌面、笔记本还是移动设备,都能享受到数据分析的便利。

  3. 高效的数据处理: DuckDB Wasm继承了DuckDB在大数据集上的高效查询处理能力,即使是在浏览器中运行,用户依然能够处理较大的数据集,并执行复杂的SQL查询。

  4. 增强的用户体验: 通过将数据分析功能集成到Web应用中,开发者可以为用户提供实时的交互式数据分析体验,而无需依赖后端服务。这种方式提升了数据交互的速度和流畅度,使得用户能够更迅速地获得数据分析结果。

  5. 无缝集成Web应用: DuckDB Wasm可以与现有的Web应用、数据可视化框架(如Vega-Lite、D3.js等)以及前端技术栈(如React、Vue等)无缝集成,提供一个高度灵活的数据分析平台。

3、在线分析处理的应用场景

  1. 数据仪表盘: 在线分析处理非常适合构建数据仪表盘,用户可以在浏览器中实时查询数据并获得可视化分析结果。企业可以将DuckDB Wasm集成到内部数据分析平台或客户报告工具中,让数据分析更加高效和灵活。

  2. 实时数据分析: 对于需要进行实时数据分析的应用场景,在线分析处理可以大大提升响应速度。用户无需等待服务器返回结果,所有的计算都在本地浏览器中完成,减少了延迟。

  3. 教育与培训: 在线分析处理也适用于教育和培训领域,通过在浏览器中直接进行数据分析,学员可以快速上手SQL查询和数据分析,体验更为直观。

4、总结

在线分析处理为在浏览器中进行数据查询应用提供了强大的支持,使得数据分析从后台迁移到了前端。无论是简单的SQL查询,还是复杂的数据可视化,用户都可以在浏览器中实现高效、灵活的在线数据处理。这种技术使得Web应用能够处理更复杂的数据任务,为用户提供更加实时、互动的分析体验,极大地提高了Web应用的性能和可用性。

工作流程

下面是本文研究工作流程中使用的交互式文档。

Untitled-2025-04-28-02

visualization%20%2817%29

一. 数据清洗与转换

数据来源于多个Excel文件,其中包含了每个宝贝的销量信息。由于销量字段的表示方式并不统一(如“100+”、 “200”,或“5万”这样的数据),需要通过Python代码进行统一转换。

提示词1. 数据清洗(Excel字段转换)

Excel文件中的“销量”字段包含多种格式的数据,诸如“100”、“100+”、“200”、“1300+”以及“5万”等。请编写Python代码,执行以下任务:

将“销量”字段中的所有数据转换为整数类型:

   移除末尾的“+”字符;

   将“5万”这样的格式转换为实际的数值(例如将“5万”转化为50000)。

将“宝贝ID”字段的类型转换为字符串。

将转换后的结果保存并覆盖原Excel文件。

请确保在处理过程中正确地识别并处理各种格式的数据。

这个提示词对应的部分是Python代码,用于处理“销量”字段和“宝贝ID”字段的类型转换。具体任务是:

  • 将“销量”字段中表示为“100+”、“5万”等的字符串转化为整数类型,规范化表示方式。
  • 将“宝贝ID”字段从其原始类型转换为字符串类型。

DeepSeek提示词指引这个部分的代码是基于正则表达式和字符串处理来进行转换,使得数据能够更加统一和标准化。这里的提示词指示了任务的核心需求,即清洗和规范化数据。

生成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))
    else:
        # 如果不匹配任何已知模式,尝试直接转换为整数
        return int(value)

该函数的主要功能是:

  • 去掉销量字段中的“+”符号。
  • 将“万”字转化为实际的销量数值(例如,“5万”转化为50000)。
  • 将“宝贝ID”字段转为字符串类型以便于后续操作。

二. DuckDB SQL查询:连接与筛选

在处理完数据之后,接下来是使用SQL查询将不同日期的数据表按照“宝贝ID”字段连接起来。我们将多个表格(如2025年4月26日、27日和28日的销量数据)合并,并根据条件筛选出销量增长显著的宝贝。

提示词2. 数据库操作(DuckDB SQL查询)

提示词单元格之前,放置一个资料单元格,指定表格名称:

《淘宝天猫店铺内宝贝列表》

rpa_20250428_140934

rpa_20250427_152444

rpa_20250426_161959

在这个部分,DeepSeek提示词的作用是:

  • 生成SQL语句来连接不同的表格,确保每个表格都能通过“宝贝ID”进行匹配。
  • 使得销量字段按日期重命名,确保后续处理时可以清楚地了解每个时间点的销量数据。
  • 创建并描述临时表“itemlist”,作为接下来分析的基础。

你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将结构相同的若干张表(表名参见《淘宝天猫店铺内宝贝列表》)按照相同的字段“宝贝ID”连接在一起。只返回那些在两个表中都有匹配的行,并且保留“标题”字段。对于每个表的“销量”字段,分别命名为“销量1”、“销量2”、“销量3”等等。最终,将连接的结果保存到一个临时表“itemlist”中(如果该表已存在,则先删除该表)。

请确保在编写查询时,遵循以下要求:

表格的结构相同,且可以通过字段“宝贝ID”进行连接。

在返回结果中,每一张表的“销量”字段分别重命名为“销量1”、“销量2”、“销量3”等等。

在连接的结果中,确保只包含那些在两个表中都有匹配的行。

如果临时表“itemlist”已存在,首先删除该表,然后重新创建并插入数据。

请确保SQL语句在执行时,不会引发性能瓶颈,且能够处理较大数据量。

此提示词对应的是DuckDB的SQL查询语句,目的是将不同日期的表(如2025年4月26日、27日和28日的销量数据)按“宝贝ID”连接起来,并将不同日期的销量字段分别命名为“销量1”、“销量2”、“销量3”等,最后生成一个临时表“itemlist”。

生成SQL查询语句

SQL代码如下:

-- 删除已存在的临时表
DROP TABLE IF EXISTS itemlist;

-- 创建包含三表交集且保留销量别名的临时表
CREATE TEMP TABLE itemlist AS
SELECT
    t1.宝贝ID,
    t1.标题,
    t1.销量 AS 销量1,
    t2.销量 AS 销量2,
    t3.销量 AS 销量3
FROM rpa_20250426_161959 t1
INNER JOIN rpa_20250427_152444 t2 
    ON t1.宝贝ID = t2.宝贝ID
INNER JOIN rpa_20250428_140934 t3 
    ON t1.宝贝ID = t3.宝贝ID;

在此SQL查询中,使用了INNER JOIN将三个表格连接,且每个表格的“销量”字段被重命名为“销量1”、“销量2”和“销量3”。这一步骤能够确保我们获得每个宝贝在三个时间点的销量数据。

Screenshot%20from%202025-04-28%2021-14-15

三. 筛选数据:去除销量无增长的记录

为了聚焦于销量增长明显的宝贝,我们筛选出在各时间点销量都有所增长的记录,并去除销量大于等于1000的宝贝(这些宝贝的销量可能已经趋于饱和,不再需要关注)。

提示词3. 筛选数据(销量增长筛选)

DeepSeek提示词的任务是:

  • 编写SQL语句以筛选出销量逐步增长(即销量1 ≥ 销量2 且 销量2 ≥ 销量3)的记录。
  • 排除销量大于1000的记录,以避免选择那些销量已接近饱和的商品。
  • 按照销量的增幅(销量1 - 销量2 + 销量2 - 销量3)进行排序,选出销量增长最显著的前30个宝贝。

你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将表格 itemlist 包含多个“销量”字段(如“销量1”、“销量2”、“销量3”等,描述参看《资料》)筛选,从中去掉几个“销量”字段没有增长的记录,去掉销量大于等于1000的记录,结果另存为临时表itemlistgood中(如果该表已存在,则先删除该表)。

此提示词用于生成一个SQL查询语句,从“itemlist”表中筛选出销量逐步增长且销量小于1000的宝贝,最终保留销量增长最显著的前30个宝贝,保存到“itemlistgood”表中。

生成SQL查询语句

下面是筛选的SQL代码:

DROP TABLE IF EXISTS itemlistgood;

CREATE TEMP TABLE itemlistgood AS
SELECT 宝贝ID, 标题, 销量1, 销量2, 销量3
    FROM itemlist
    WHERE 销量1 >= 销量2 AND 销量2 >= 销量3 AND 销量1 < 1000 AND 销量2 < 1000 AND 销量3 < 1000 ORDER BY 销量1 - 销量2 + 销量2 - 销量3 DESC  LIMIT 30;

此查询确保我们只保留销量逐步增长并且销量未达到1000的前30个宝贝,进一步筛选出值得关注的宝贝。

四. 数据结构转换:从宽结构到长结构

提示词4. 数据结构转换(宽结构转长结构)

DeepSeek提示词在这里的任务是:

  • 将宽结构数据(多个“销量”字段)转换为长结构数据,使得每个销量记录对应一个独立的行,并带有相应的日期信息(几天前)。
  • 确保“几天前”字段按照不同销量时间点的顺序(销量1为0,销量2为-1,销量3为-2)进行填充。
  • 生成一个新的临时表“itemsold”,为后续可视化提供合适的数据结构。

你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将表格 itemlistgood 从宽结构转换为长结构。表格 itemlistgood 包含多个“销量”字段(如“销量1”、“销量2”、“销量3”等),描述参看《资料》,然后转化为包含以下字段的长结构表,结果保存在一个临时表itemsold中(如果该表已存在,则先删除该表)。

宝贝ID:保留原表中的“宝贝ID”字段。

标题:保留原表中的“标题”字段。

几天前:根据不同“销量”字段的顺序,为每个“销量”分配相应的值:

   对于“销量1”,值为0。

   对于“销量2”,值为-1。

   对于“销量3”,值为-2。

销量:将每个“销量”字段的值放入新的“销量”字段中。

确保转换后的结果符合以下要求:

如果临时表“itemsold”已存在,首先删除该表,然后重新创建并插入数据。

每个“销量”字段都对应一个独立的记录,且“几天前”字段反映销量的时间差。

生成的长结构表应包含所有转换后的记录,并保留原始“宝贝ID”和“标题”信息。

请确保SQL语句在执行时,不会引发性能瓶颈,且能够处理较大数据量。

这个提示词对应SQL查询语句,用于将表格“itemlistgood”中的多个销量字段(如销量1、销量2、销量3)转化为长结构表格。这一步骤会为每个“销量”字段分配一个“几天前”的值(0、-1、-2),并且将“销量”字段值提取到一个统一的字段中。

生成SQL查询语句

将数据从宽结构转换为长结构是为了更好地进行可视化展示。在转换后,每个“销量”字段将对应一行数据,并且“几天前”字段反映出每个时间点的相对天数。以下是转换的SQL代码:

DROP TABLE IF EXISTS itemsold;

CREATE TEMP TABLE itemsold AS
SELECT 
    宝贝ID,
    标题,
    CASE 
        WHEN sales_column = '销量1' THEN 0
        WHEN sales_column = '销量2' THEN -1
        WHEN sales_column = '销量3' THEN -2
    END AS 几天前,
    sales_value AS 销量
FROM itemlistgood
UNPIVOT (
    sales_value 
    FOR sales_column IN (销量1, 销量2, 销量3)
);

该查询通过UNPIVOT操作,将宽结构的数据转换为长结构,便于后续的时间序列可视化。

Screenshot%20from%202025-04-28%2021-15-31

五、数据可视化:折线图展示销量趋势

最后,使用Vega-Lite生成折线图,展示每个宝贝ID在不同时间点的销量变化趋势。

提示词5. 数据可视化(折线图)

DeepSeek提示词的任务是:

  • 生成Vega-Lite的JSON代码来可视化“itemsold”表中的数据。
  • 使用“几天前”字段作为X轴,展示每个宝贝在不同时间点的销量数据。
  • 使用不同颜色的折线代表不同的“宝贝ID”,通过“宝贝链接”字段在鼠标悬停时显示商品的链接。
  • 定制图表的外观,如调整X轴显示的范围,设置工具提示内容等。

你是精通Vega-Lite的可视化专家,你的任务是生成Vega-Lite JSON代码,用于绘制折线图。具体要求如下:

X轴:使用“几天前”字段。

Y轴:使用“销量”字段。

颜色:不同颜色的折线表示不同的“宝贝ID”。

数据源:表格名为“itemsold”,包含“宝贝ID”、“几天前”和“销量”字段,描述参看《资料》。

生成的Vega-Lite JSON代码应该能够清晰地展示每个宝贝ID随时间变化的销量趋势,使用不同颜色区分不同的宝贝ID。在工具提示中,显示一个由“https://item.taobao.com/item.htm?id=”加上“宝贝ID”两部分合并的宝贝链接。 这是Vega-Lite生成折线图的部分,用于根据“几天前”和“销量”字段绘制折线图,展示每个宝贝ID在不同时间点的销量变化趋势。

生成VegaLite代码

以下是生成折线图的Vega-Lite JSON代码:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "description": "多商品销量趋势折线图",
  "data": {"name": "itemsold"},
  "width": 800,
  "height": 500,
  "mark": {
    "type": "line",
    "interpolate": "monotone",
    "strokeWidth": 4
  },
  "transform": [{
    "calculate": "'https://item.taobao.com/item.htm?id=' + datum.宝贝ID",
    "as": "宝贝链接"
  }],
  "encoding": {
    "x": {
      "field": "几天前",
      "type": "quantitative",
      "title": "相对天数(0=当天)",
      "scale": {"domain": [-2.5, 0.5]},  
      "axis": {
        "tickCount": 3,
        "values": [-2, -1, 0],
        "labelExpr": "datum.value + '天前'"
      }
    },
    "y": {
      "field": "销量",
      "type": "quantitative",
      "title": "销量(单位)",
      "axis": {"grid": false}
    },
    "color": {
      "field": "宝贝ID",
      "type": "nominal",
      "title": "商品ID",
      "scale": {"scheme": "category20"},
      "legend": {
        "titleFontSize": 14,
        "labelFontSize": 12,
        "orient": "right",
        "columns": 2
      }
    },
    "tooltip": [
      {"field": "宝贝ID", "type": "nominal", "title": "商品"},
      {"field": "标题", "type": "nominal", "title": "名称"},
      {"field": "几天前", "type": "quantitative", "title": "天数", "format": "+,d"},
      {"field": "销量", "type": "quantitative", "title": "销量", "format": ",.0f"},
      {
       "field": "宝贝链接", 
       "type": "nominal",        
       "title": "宝贝链接"
      }
    ]
  },
  "config": {
    "view": {"stroke": "transparent"},
    "axis": {"domainWidth": 1},
    "font": "Microsoft YaHei"
  }
}

此Vega-Lite代码将每个宝贝的销量变化趋势绘制成折线图,并通过颜色区分不同的宝贝ID,同时为每个宝贝添加链接,便于查看其详细信息。

visualization%20%2817%29

六、总结

通过这一系列的数据清洗、SQL查询和可视化步骤,我们能够有效地分析并展示淘宝天猫店铺宝贝销量的变化趋势。这不仅帮助电商从业者识别出哪些宝贝正在迅速增长,还能够为库存管理、广告投放和营销策略的调整提供数据支持。

如果你正在经营电商业务,切勿错过这一分析方法。通过定期分析销量数据,及时发现潜力宝贝并进行针对性的运营策略调整,助力你在竞争激烈的市场中脱颖而出。

立即行动,开始实施您的数据驱动决策!