
做原材料研究的朋友都有共识稀土下游的需求往往最先反映在矿产和分离产品的进出口数据里。稀土贸易虽然只出现在产业链的中间环节但当你要分析2018到2024年这段周期的全球稀土贸易数据时不同来源给出的数字可能相差百分之二三十。这不是某个数据库出错而是商品口径、统计边界和申报逻辑不统一造成的。我这次把七年周期的数据重新整理了一遍核心目标是得到一套字段一致、可追溯、在跨年度比较时不需要来回改口径的标准化数据集。这篇文章会把整个整理过程、字段设计、清洗时踩过的坑以及最后交付的格式都写清楚适合正在做大宗商品研究、行业分析或数据治理类项目的朋友参考。1. 为什么这套数据值得花精力去整理1.1 稀土贸易数据的真实使用场景稀土不是一个“单一商品”而是十七种元素及其化合物的总称。在实际贸易统计中你既能看到镧铈类混合化合物的大宗波动也能看到钕铁硼永磁成品的高单价交易。不同研究目标决定了数据整理侧重点完全不同做供应分析的人更关心矿石和冶炼分离产品的进出口数量做价格研究的人更关心每月成交单价和折算波动做下游需求预测的人则必须把永磁体、抛光粉、催化剂等延伸产品的数据拼进同一个分析框架。这套2018至2024年的数据在设计之初就是按“全链条相关商品”收口的。也就是说除了典型的稀土金属和氧化物还把合金、永磁体零件以及部分高纯化合物囊括进来。这样做最大的好处是可以用统一代码做不同环节的比例推算不需要每次分析前再临时查海关归类。缺点也很明显跨度七年不同年度之间同一商品在编码和品名上发生大量变动直接拼接会出现明显的断裂。1.2 公开数据与可分析数据之间差在哪公开渠道能找到的原始贸易数据通常是海关申报记录或统计机构发布的月度汇总。它本身是结构化的但离“可以分析”还有一定距离。常见问题包括同一批货物可能被甲地统计为出口到某中转口岸又在乙地统计为从某产地进口产生双向重复不同国家采用不同的商品细目还原方式品名字段写法不一诸如“rare earth oxide”和“REO”其实指向同一类商品部分月份缺失申报记录需要靠相邻月份趋势做插补计量单位混用吨、千克、公斤甚至“个”在同一张表里出现。如果不做处理直接用这种原始数据画折线图会出现很多解释不通的“异常波动”。所以所谓整理核心不是格式转换而是把不同统计制度之间的偏差尽量还原成可比较的物理量和金额。1.3 七年周期的隐含难度2018到2024落在两轮HS编码修订区间内。第一轮修订在2017年生效第二轮在2022年生效。对稀土类商品而言最大的影响来自部分稀土化合物、混合金属和永磁产品的细目拆分。有些在旧版本里归入“其他”项下的商品新版本被单独列目导致2022年前后的细分商品数据看起来断崖式减少或增加如果只盯着单一编码做趋势很容易得出错误结论。这也是我为什么坚持在清洗基础上增加“兼容编码体系”把所有年份统一映射到一套整理后的大分类标签上包括“稀土氧化物”“稀土金属及合金”“永磁材料”“催化/抛光材料”等。后续做趋势分析只需要基于大分类标签即可不必每次纠结年度编码差异。2. 数据整理流程从原始申报记录到标准化字段2.1 字段的最小业务语义在开始清洗前我先把目标字段确认清楚。工业级的贸易分析离不开几个基础维度字段名说明示例record_id单条记录唯一标识REE-2019-000873period申报发生的年月2019-07direction进出口方向export / imporths_code原始海关编码280530product_class映射后的大类分类稀土金属及合金product_desc标准品名稀土金属混合物source_region原产/出口地区编码REG-AL脱敏处理dest_region目的/进口地区编码REG-BH脱敏处理quantity_kg申报数量统一为千克1200000amount_usd申报金额统一折算美元8500000trade_term价格术语FOB / CIF / 未注明unit_price折算单公斤价格7.08remark备注或异常标记疑似转口这里我把地区字段做了脱敏编码主要是为方便做区域分析但不参与国家层面的直接评价。在实际研究里读者可以根据自己拿到的数据源把“REG-AL”这类编码替换成真实的ISO国家或地区代码。2.2 整表读取与记录合并规则原始申报记录往往分散在多个子系统中。我的做法是先用Python脚本批量读入所有历史文件统一解析日期格式。这个环节最需要注意的是不要急着去重。很多表看起来相同的两行记录一查单据类型一条是“直接出口”另一条是“转口复出口”语义上并不相同。直接去重会丢失重要的物流路径信息。因此我把去重逻辑设计成三个层级完全重复连申报编号和时间都相同可以安全删除不同申报编号但商品和数量高度相似保留两条但标记为待核验记录同一张贸易单据在时间维度上跨月两次出现属于申报期调整只保留最后实际申报月。实际跑下来第三类问题的比例大概在总记录数的0.5%左右但对月度颗粒度的分析影响不容忽视。少量几千条记录的错位可能让某个月的同比数据偏差超过10%。2.3 品名标准化并非简单替换稀土贸易来源数据里的品名写法五花八门。即使英文品名相对统一也会出现诸如“cerium oxide”氧化铈和“ceria”同时存在的情况。中文数据源里更常见同一个产品会在不同时期被翻译成“铈土”“氧化亚铈”“硝酸铈”等不同名称。如果只做简单字符串匹配一个氧化物会被拆成几十个分类分析时噪声极大。我的映射思路是建立一张“别名词典表”把所有同义表述收敛到一个标准名称上再在这个标准名称之上对应到前文提到的product_class大分类。这项工作不复杂但需要反复查看上下文偶尔还要回到原始能源和贸易年鉴去确认某一家统计机构口径。整个过程大约占整体整理工时的40%。3. 清洗阶段最容易忽略的四个“坑”3.1 单位不统一不只是千克与吨海关申报的法定计量单位通常是千克但在实际原始数据里经常能看到以吨计量的汇总表。更要小心的是部分稀土永磁产品按“个”“件”或“套”申报这些产品的单件重量并不固定如果不参考申报金额就简单换算成千克误差会非常大。我试过的可靠做法是先识别“数值量级”的真实单位再用同一记录中的单价进行合理性校验。例如一票氧化铈申报数量是1000申报金额是30万美元如果按吨计算单价是300美元每吨明显偏离市场行情而按千克计算是3美元每千克才比较正常。通过这样的交叉校验可以确定记录正确的物理数量。3.2 FOB与CIF价格口径混用FOB指离岸价格出口方在货物越过船舷后就完成了主要费用义务CIF则在价格基础上包含运费和保险费。整理全球贸易数据时既存在FOB报出口、CIF报进口的常规状态也存在转口贸易中出口方也报CIF的特殊情况。如果直接拿FOB金额和CIF金额做比较运费比例在稀土类产品中往往能达到总价的5%到10%不能装作没看到。我的处理方式是保留trade_term原始值不强行把FOB和CIF全部换算到同一个基准。后续做金额建模时可以按方向筛选研究出口用FOB子集研究进口到岸成本用CIF子集。这样虽然损失了一部分“直接可比性”却避免了引入错误的换算假设。3.3 商品编码修订造成的“假波动”前面提到HS编码2022年做过一轮大调整。稀土永磁材料和相关制品是调整比较明显的区域。实际操作中我增加了“bridge_table”映射桥表把旧编码、新编码和标准大分类放在同一张表里。当某一年某个细分项的数据突然从几百吨变成几十吨不要去怀疑真实贸易崩盘而是去查对应编码是否被拆开。检查方法是简单的把上一年的“旧编码全组合”和当年的“新编码全组合”拉到同一时间维度分别算总吨位如果总量在年度间依然平滑就说明拆分不影响整体口径。这也提醒我们所有分析必须同时跑“原始编码口径”和“标准化分类口径”两套曲线互相呼应。3.4 镜像贸易记录之间的不一致镜像贸易是指一批货从出口地看记录为出口到某地从进口地看记录为从某地进口。理论上两种记录最终应该接近一致但现实永远是出口序列和进口序列差异不小。原因可能是一段时间内的运输在途未完成海关申报也可能是进口方采用更细分的商品归类而出口方用一个大类合并记录。一个典型的例子出口国申报“稀土永磁毛坯件”进口国则可能按“已充磁的永磁零件”申报两者金额对应但数量折算方法不一致。整理时我把这类互为镜像的记录单独放入一张“镜像关联表”可以查互相抵减后的净物流量而不是简单取两者平均值。实际经验是“取平均”在不少月份会产生约8%的系统性偏差而“以进口方向为主记录、以出口方向为复核”会稳定很多。4. 校验逻辑与异常值处理4.1 异动点先区分“真异动”和“统计异动”清洗完成不等于数据可信。为了让2018至2024年的数据在交付后被信任我设计了多层校验规则。第一步是跑月度汇总观察每个大分类的进出口总量曲线是否存在尖峰或断崖。如果某个产品在某个月份出口量增加四倍不要随手视为异常点剔除。要回到原始记录里看新增的量来自哪些申报编码。如果是因为一笔大额项目交付产生的真实订单应该在数据里保留并在remark字段标记为“大宗订单驱动”。如果异动来自某个常规编码最后一年退场前的规则性清空就属于统计异动可以正常修正。4.2 单价异常自动筛选加人工复核单位价格是最能暴露数据质量问题的指标之一。稀土氧化物在不同年份价格波动相当大稀土金属和永磁体则相对温和。我把每种产品的单公斤价格按年度绘制箱线图凡是超出四分位间距三倍以上的记录都拉出来人工复核。曾经遇到过一个很有意思的情况某条记录显示某种混合稀土金属的单价只有市场均价的十分之一。检查发现原始申报把数量单位写成“件”而每件实际重量是十公斤导致分母量级错误。修正单位后单格价格回到正常区间。如果没有单价校验这种错误完全发现不了。4.3 为什么要用“总量校验”兜底商品细目做得再细也难免有漏掉的数据。为了把握整体体量我会在月度维度做一个总量校验先把当月所有细目产品的进出口金额汇总再与宏观口径的行业月度贸易额进行对比。两者之间通常允许10%以内的偏差因为统计边界不完全重叠超过10%就说明当月细目记录存在缺失或错填。这套兜底思路看起来朴素但很实用。整理后的数据集如果只关注内部一致性忽略外部锚点很容易在整体结构性偏差上走偏。外部锚点也不需要太复杂一些产业年鉴和行业统计月报足以用来做量级核对。5. 从整理后的数据能看到什么5.1 趋势观察的三种口径我建议在分析时至少保留三种口径重量总量口径适合看产业链物流规模变化金额口径适合结合价格周期判断市场活跃度折算稀土氧化物当量口径适合横向比较不同含稀土产品的实际资源规模。以永磁材料为例一批钕铁硼成品和一批钐钴磁体的物理重量差异不大但它们所含稀土元素类别完全不同。如果只比较重量会漏掉产品结构差异带来的需求变化。通过把特定元素含量比例折算成当量再统一汇总可以更真实地还原不同元素在出口端的分布。5.2 用区域流向交叉判断产业转移虽然生产端往往高度集中在少数地区但从贸易数据上能清楚看到加工贸易的分散化趋势。2018年时大部分氧化物从原产地向传统加工基地流动流向相对清晰。到2022年以后随着多个海外工厂陆续投产区域流向开始出现更多元的组合不再只是传统的“产地—加工中心—消费市场”单向路线而是出现半成品多次跨国流转的情况。具体来看某些消费地区开始直接进口未申明的半成品再由本地工厂完成分离或后加工。贸易数据里对应的表现是中间品“进料加工再出口”的比重上升。通过跟踪source_region和dest_region的多段路径可以拼出产业转移的大致轮廓。这类判断不适合直接作为“单一国家贸易政策”的证据更适合用来参考供应链环节在区域间的时间滞后。5.3 价格中枢的波动区间估算把金额和数量放在同一张表后用“金额除以数量”即可得到类似平均单价的指标。稀土类商品价格波动本身具有明显的周期性分年度做中位数和四分位间距会比简单算年度均价更稳定可以不受少数高价订单的干扰。举例而言某类轻稀土氧化物在2018至2020年间单公斤价格长期处于较低区间2020年底开始持续抬升2022年上半年到达高点随后逐步回落。这种曲线放到延长周期来看更像一个完整的库存周期上行和调整过程。数据处理上我并不需要做任何预测只需要保证价格序列在“月度颗粒度”上不出现缺口就能还原出清晰的摆动轨迹。6. 数据集交付格式与后续维护思路6.1 文件结构与目标使用对象这套整理后的数据集最终保留成Parquet和CSV两种格式。Parquet适合在Python和数据分析平台里快速读取CSV则方便业务同事用Excel抽查原始明细。主表结构尽量长表化每一行代表一条独立的月度进出口记录把地区和商品维度拆成编码避免用几十个字段堆成宽表。窄表的一个明显优点是新记录接入时不会频繁改动表结构。文件内容典型行数main_trade_data.csv标准化的商品进出口明细超过十万行region_code.csv地区脱敏编码对照几十行product_class.csv商品标准映射表几百行bridge_hs_code.csvHS年度编码兼容桥表几百行anomaly_note.csv异动记录及备注视情况而定字段命名刻意沿用snake_case和常见Python数据分析库习惯保持一致。null值统一以NaN形式保留不对缺失值做智能填埋因为贸易数据的缺失原因各不相同留空比猜测后填一个“看似合理”的值更负责任。6.2 更新与维护的建议对于这类数据通常以季度更新为最优频率。稀土贸易的月度数据波动较大经常受船期和大宗订单节奏影响季度更新既能及时反映趋势又不会过度放大单月随机波动。每次更新时除了把新月份追加到主表还要重新跑一遍前一个月的数据因为部分申报记录存在延迟更新。维护上还可以考虑引入一条“规则日志”。每次遇到编码修订、新增别名、修正计量单位等问题就顺手记录一条日志。时间久了这套日志会产生非常有价值的隐性知识尤其是帮助新接手的数据分析人员快速理解某些历史曲线为什么在特定时间点出现拐点。6.3 延伸使用的几点提醒如果你打算基于这套数据结构继续做研究有三点提醒可以参考。第一做进出口对比时建议保持“进口侧用CIF、出口侧用FOB”的默认逻辑除非你有足够的运费数据支撑统一换算。第二不要只关注年度总量也关注12个月滚动求和它能自然平滑贸易周期的季节波动。第三稀土贸易数据仅能反映“申报的跨境物流”不能等同于实际消费量因为二次出口和库存调节都会影响某特定年份的表观规模。从2018到2024年这七年稀土贸易数据背后的商品结构和统计口径都发生了明显演变。把一套数据整理到可以放心做模型测试的程度并不是靠某个神奇工具而是靠对商品归类的耐心、对镜像记录的多源交叉验证以及每次不一致之处不绕过、逐条查清的习惯。希望这份复盘能给你正在做的贸易数据整理项目提供一些可复用的思路。