# %% [python] cell-025b1bc6d0ab import pyodide, os, requests, js, json, micropip, xlrd, pandas as pd await micropip.install('et_xmlfile-2.0.0-py3-none-any.whl') await micropip.install('openpyxl-3.1.5-py2.py3-none-any.whl') await micropip.install('shuyouqi-0.0.0-py3-none-any.whl') from shuyouqi import profiling # %% [prompt] cell-08c16d096eb4 Excel文件中的“销量”字段包含多种格式的数据,诸如“100”、“100+”、“200”、“1300+”以及“5万”等。请编写Python代码,执行以下任务: 将“销量”字段中的所有数据转换为整数类型: 移除末尾的“+”字符; 将“5万”这样的格式转换为实际的数值(例如将“5万”转化为50000)。 将“宝贝ID”字段的类型转换为字符串。 将转换后的结果保存并覆盖原Excel文件。 请确保在处理过程中正确地识别并处理各种格式的数据。 # %% [python] cell-a0c85df413a1 # 读取原始Excel文件 input_file = '/RPA_20250426_161959.xlsx' # 输入文件路径 import pandas as pd import re 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) # 读取原始Excel文件 output_file = input_file # 输出文件路径 # 假设目标列名为 'YourColumnName' df = pd.read_excel(input_file) # 处理目标列,应用convert_value函数 df['销量'] = df['销量'].apply(convert_value) df['宝贝ID'] = df['宝贝ID'].astype(str) # 将结果写入新的Excel文件 df.to_excel(output_file, index=False) # %% [plaintext] cell-c59b25cab165 《淘宝天猫店铺内宝贝列表》 rpa_20250428_140934 rpa_20250427_152444 rpa_20250426_161959 # %% [prompt] cell-071e5fb2e392 你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将结构相同的若干张表(表名参见《淘宝天猫店铺内宝贝列表》)按照相同的字段“宝贝ID”连接在一起。只返回那些在两个表中都有匹配的行,并且保留“标题”字段。对于每个表的“销量”字段,分别命名为“销量1”、“销量2”、“销量3”等等。最终,将连接的结果保存到一个临时表“itemlist”中(如果该表已存在,则先删除该表)。 请确保在编写查询时,遵循以下要求: 表格的结构相同,且可以通过字段“宝贝ID”进行连接。 在返回结果中,每一张表的“销量”字段分别重命名为“销量1”、“销量2”、“销量3”等等。 在连接的结果中,确保只包含那些在两个表中都有匹配的行。 如果临时表“itemlist”已存在,首先删除该表,然后重新创建并插入数据。 请确保SQL语句在执行时,不会引发性能瓶颈,且能够处理较大数据量。 # %% [sql] cell-bcb4eb3031f4 -- 删除已存在的临时表 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; DESCRIBE itemlist; # %% [plaintext] cell-bf6f1d23e028 [ {"column_name": "宝贝ID", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "标题", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量1", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量2", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量3", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null} ] # %% [prompt] cell-52cbb153fa2 你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将表格 itemlist 包含多个“销量”字段(如“销量1”、“销量2”、“销量3”等,描述参看《资料》)筛选,从中去掉几个“销量”字段没有增长的记录,去掉销量大于等于1000的记录,结果另存为临时表itemlistgood中(如果该表已存在,则先删除该表)。 # %% [sql] cell-af5b37a78962 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; DESCRIBE itemlistgood; # %% [plaintext] cell-d52d98b3f2ed [ {"column_name": "宝贝ID", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "标题", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量1", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量2", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量3", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null} ] # %% [prompt] cell-f3e49c808934 你是精通DuckDB SQL的分析师,你的任务是编写SQL语句,将表格 itemlistgood 从宽结构转换为长结构。表格 itemlistgood 包含多个“销量”字段(如“销量1”、“销量2”、“销量3”等),描述参看《资料》,然后转化为包含以下字段的长结构表,结果保存在一个临时表itemsold中(如果该表已存在,则先删除该表)。 宝贝ID:保留原表中的“宝贝ID”字段。 标题:保留原表中的“标题”字段。 几天前:根据不同“销量”字段的顺序,为每个“销量”分配相应的值: 对于“销量1”,值为0。 对于“销量2”,值为-1。 对于“销量3”,值为-2。 销量:将每个“销量”字段的值放入新的“销量”字段中。 确保转换后的结果符合以下要求: 如果临时表“itemsold”已存在,首先删除该表,然后重新创建并插入数据。 每个“销量”字段都对应一个独立的记录,且“几天前”字段反映销量的时间差。 生成的长结构表应包含所有转换后的记录,并保留原始“宝贝ID”和“标题”信息。 请确保SQL语句在执行时,不会引发性能瓶颈,且能够处理较大数据量。 # %% [sql] cell-a17bd6a17d71 -- 删除已存在的临时表 DROP TABLE IF EXISTS itemsold; -- 创建临时表并通过UNPIVOT转换结构 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) ); DESCRIBE itemsold; # %% [plaintext] cell-baecde1493f2 [ {"column_name": "宝贝ID", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "标题", "column_type": "VARCHAR", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "几天前", "column_type": "INTEGER", "null": "YES", "key": null, "default": null, "extra": null}, {"column_name": "销量", "column_type": "DOUBLE", "null": "YES", "key": null, "default": null, "extra": null} ] # %% [prompt] cell-04ac192dfbce 你是精通Vega-Lite的可视化专家,你的任务是生成Vega-Lite JSON代码,用于绘制折线图。具体要求如下: X轴:使用“几天前”字段。 Y轴:使用“销量”字段。 颜色:不同颜色的折线表示不同的“宝贝ID”。 数据源:表格名为“itemsold”,包含“宝贝ID”、“几天前”和“销量”字段,描述参看《资料》。 生成的Vega-Lite JSON代码应该能够清晰地展示每个宝贝ID随时间变化的销量趋势,使用不同颜色区分不同的宝贝ID。在工具提示中,显示一个由“https://item.taobao.com/item.htm?id=”加上“宝贝ID”两部分合并的宝贝链接。 # %% [vegalite] cell-caee721bda41 { "$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"}, // 20色分类方案 "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" // 中文字体适配 } }