简介:《数据要素流通指数:理论框架与行业实践探索》2025版聚焦数据“看得见、流不动、用不好”的落地难题,面向数据交易机构、企业数据治理与合规团队及研究者,提供可量化的流通效能评估框架。压缩包共1个PDF文件,约2.82MB,完整收录指数体系的理论章节、分级方法与行业案例,便于按基础指数、高级指数和治理工具逐层查阅。已有80人学习,适合希望理解数据零件化、跨境合规预警、电力数据定价与数据资产质押等场景的读者。内容覆盖DLI、CPI、VSI、DFI、CCI、PRI等基础指数,以及CRI、VTI、DEI等高级指数,并讨论区块链审计存证、开源治理引擎和DECI-X工具包;读者可据此建立从开发、评估、交易到增值的全链路量化思路,对照长三角工业数据、跨境支付避损、车企供应链协同和医疗数据质押等案例理解指标应用。
1. 数据要素流通指数不是排行榜:它真正要定位的是「卡在哪一段」
某公司的数据管理团队接到一个任务:给集团内部五个业务板块做数据流通评估,出一套能横向比较的分数。第一版做出来是一张排行榜,第一名和第五名差 30 分,会上第一个问题就把人问住了——“差这 30 分,是接口不通,还是根本没人调用?”排行榜回答不了这个问题,指数就变成了一次性的汇报材料。数据要素流通指数真正有价值的地方,不在于谁排第一,而在于把“流通”这个模糊词拆成供给、撮合、交付、使用四段可观测环节,让每一分的差距都能追到具体字段、具体系统和具体责任岗。做这件事的人,通常是手里有台账、有调用日志、又需要对资源投放做判断的数据管理岗与产业研究岗;如果只是想出一张排名图交差,不必费这个劲。
2. 把「流通」拆成四段可测量环节:指标体系怎么立得住
2.1 供给、撮合、交付、使用:四段拆维度的理由
流通这个词最大的问题是它听起来像一个动作,实际却是一条链。数据从“有”到“被用起来”,中间至少经过四次形态变化:资源盘点与权属确认、需求与供给的撮合、物理或接口层面的交付、使用方的二次加工。每一次形态变化都可能断掉,而断点位置决定了该补什么。所以维度设计不按“数据管理成熟度”那套常规框架走,而是按链条走,一段一个一级指标。
供给段量的是“有多少东西是能拿出来的”。可流通资源量、目录完整率、权属标注覆盖率、更新及时率,这四个指标里前两个是规模,后两个是质量。只算规模会得出“资源很多所以流通很好”的假结论,而实际场景里常见的是目录里挂了几万个表,权属标注覆盖不到三成,谁都不敢用。
撮合段量的是“供需有没有对上”。挂牌量与需求量的比值、匹配成功率、从需求提出到首次对接的时长、议价轮次。这一段最容易被忽略,因为很多团队把“上架”当成流通过程的终点,实际上上架只完成了供给侧的自我表达,需求侧根本没进来。匹配成功率这个指标尤其能暴露问题:分子是成功对接的需求数,分母是有效需求数,两个口径必须写死,否则各板块报上来的数没法比。
交付段量的是“能不能真的拿到”。接口可用率、交付时效达标率、履约完成率、交付后返工率。这一段是指数里最硬的,因为全部来自系统日志和工单系统,几乎没有解释空间。我一般会把接口可用率的统计窗定成“自然月内按小时采样”,而不是“按调用次数加权”,后者会被少数高频接口拉高,掩盖长尾接口长期不可用的情况。
使用段量的是“拿到之后有没有产生价值”。调用频次、去重后的使用方数量、复用深度(同一份资源被不同场景引用的次数)、二次开发产出数。调用频次是典型的容易虚高的指标,一个定时任务每天刷十万次也能把数拉爆,所以要配一个去重使用方数量和场景数做交叉约束,单看频次就是给自己找麻烦。
四段之间不是并列关系,而是串联关系:供给段的分低,后面三段再漂亮也说明不了流通好。合成时我倾向于用乘法约束而不是简单加权,或者至少给串联瓶颈设一个惩罚项,具体做法在下一章展开。
2.2 指标可观测性分级:哪些字段能直接采,哪些只能代理
指标设计最常见的失败不是算错,而是根本采不到。做指标体系时我会强制给每个候选指标打一个可观测性等级,只保留 A、B 两级进主指数,C 级进观察层,D 级直接砍掉。
| 等级 | 数据形态 | 典型来源 | 是否进主指数 | 采集成本 |
|---|---|---|---|---|
| A | 系统自动落库,字段级可追溯 | 接口网关日志、工单系统、调度平台 | 进 | 低,一次对接长期可用 |
| B | 有台账但需人工导出汇总 | 资源目录、权属登记表、需求登记簿 | 进,但需校验 | 中,按月导出并做勾稽 |
| C | 只能靠抽样或问卷代理 | 使用方满意度、场景价值自评 | 进观察层,不进主分 | 高,且稳定性差 |
| D | 无数据源,只能定性描述 | 数据文化、组织意愿 | 不进 | — |
这张表的价值在于把“想测什么”和“能测什么”摆到一张纸面上。实际推进时,C 级指标最容易引发争议:业务方觉得重要,技术方拿不到数。我的处理办法是把它放进观察层单独展示,不参与主分合成,同时约定一个季度的验证期,如果代理指标和 A 级指标的相关性能稳定在 0.6 以上,再考虑提升权重,否则就长期挂在观察层。
代理指标的效度检验不能省。曾经见过一个项目用“部门自评数据使用活跃度”当使用段的核心指标,结果和网关日志的实际调用量相关系数不到 0.2,等于在主指数里塞了一个噪声项。这类问题的排查成本极高,因为分数出来之后没人知道是哪一项在捣鬼。
2.3 口径写死的三个动作:定义卡、单位表、时间窗
指数能不能跨板块、跨期比较,取决于口径是否被写死。做过一轮跨部门取数的人都清楚,同一句“月度调用量”,五个部门能报出五种东西:有的含测试环境,有的含内部重试,有的按自然月,有的按滚动 30 天。
第一个动作是定义卡。每个指标一张,写清业务含义、计算公式、分子分母、排除项。排除项这一栏最容易被跳过,但恰恰最关键:测试环境流量排不排、内部重试算不算、失败调用计不计入分母,这三条不写清楚,后面所有比较都是白做。
第二个动作是单位表。计数类指标必须固定单位,是“万条”还是“条”,是“次”还是“万次”。听上去是小事,实际翻车的案例不少:某板块把单位从万条改成条上报,指数直接跳了两个数量级,清洗时才发现。单位表要和字段一起进元数据,不能只写在文档里。
第三个动作是时间窗。每个指标标注统计窗类型(自然月、滚动 30 天、季度累计)和截止时点(月末 24 点、次月 3 日冻结)。时间窗不一致会导致同一年度的两个季度之间出现“数据穿越”,尤其是涉及跨月工单的履约率,很容易把上个月的交付算到本月。
提示:这三件事必须在第一轮取数之前完成,事后补口径的代价是重跑全部历史数据,比重做一遍指数还费时间。
3. 无量纲化与赋权:三层指标怎么合成才不被极端值带偏
3.1 极差法、Z-score、分位数法在流通指数里的取舍
指标算出来单位五花八门,先要无量纲化。这一步看着像纯技术活,实际上决定了指数的脾气。常见四种方法各有各的适用范围,也各有各的翻车点。
| 方法 | 计算式 | 优点 | 典型翻车点 |
|---|---|---|---|
| 极差法 | (x−min)/(max−min) | 直观,结果落在 [0,1] | 单个极端值会压缩其余样本,且每年重算基准导致跨年不可比 |
| Z-score | (x−μ)/σ | 保留分布形态,适合近似正态 | 出现负值,指数不直观;对异常值敏感 |
| 3σ 截尾 + 极差 | 先截尾再极差 | 抗极端值,结果仍在 [0,1] | 截尾阈值必须固定,不能随年调整 |
| 百分位秩 | rank(pct=True) | 最稳健,不受量纲影响 | 丢失幅度信息,头尾区分度差 |
| 对数 + 极差 | log(1+x) 后极差 | 适合调用量这类长尾计数 | 0 值多时区分度明显下降 |
流通指数里我会分指标类型用法:接口可用率、履约率这类天然有界的比率型指标,直接用极差法,基准锁定在基期;调用量、资源量这类长尾计数,先 log(1+x) 再极差;使用方数量这种分布极不均匀的,用百分位秩更稳。全表统一用一种方法看着整齐,实际是给自己埋雷。
跨期可比是无量纲化里最容易被牺牲掉的属性。第一年做指数时很自然地拿当年最大最小值做基准,第二年重算时基准变了,同一个业务板块什么都没干,分数却涨了 10 分。解决办法只有一个:把基期的 min/max 或 μ/σ 冻结下来存档,后续所有期都用这份冻结基准做变换,超出 [0,1] 的值截断并打标记。
注意:截断值要单独出一列计数。某一期出现大量截断,说明业务发生了结构性变化,这时候该做的是复核指标体系,而不是继续沿用旧基准硬算。
3.2 熵权与 AHP 组合赋权的参数设置
赋权这件事,纯主观会被质疑拍脑袋,纯客观会被质疑脱离业务。我的做法是组合赋权:AHP 定业务判断,熵权定数据说话的差异度,两者按系数 α 加权。
AHP 部分的关键参数是一致性比率 CR。判断矩阵由业务专家两两比较给出,1 到 9 标度,算出最大特征根 λmax 后,CI=(λmax−n)/(n−1),CR=CI/RI。CR 控制在 0.1 以内,超过就说明专家的两两判断自相矛盾(A 比 B 重要、B 比 C 重要、C 又比 A 重要),必须回炉重问,不能靠算法硬修。实际做的时候,一级指标四个维度做一轮,每个维度内部的二级指标各做一轮,四轮矩阵比一次性做十几个指标的两两比较现实得多。
熵权部分的公式是 e_j = −k·Σ p_ij·ln(p_ij),其中 k=1/ln(n),n 是样本数(这里是板块数或期数),p_ij 是第 j 个指标下第 i 个样本的比重。差异系数 d_j = 1 − e_j,权重 w_j = d_j/Σd_j。有一个坑必须提前处理:p_ij 里出现 0 会让 ln 无定义,标准做法是平移一个极小量,但平移量的大小会影响结果。我一般用 (x+1e-6) 再归一,且在报告里注明,避免换个人重算对不上。
组合系数 α 的取值没有理论最优解,实际项目里按数据质量和专家可信度定:数据源以 A 级为主的,α 取 0.4 到 0.5,让数据多说话;以 B 级台账为主的,α 提到 0.6 到 0.7,压一压数据噪声。这个参数必须写进方法说明,否则第二年换人接手,权重风格会突变。
还有一个边界要交代清楚:熵权依赖样本间的差异度,如果某个指标在所有板块上数值几乎一样,熵权会给出接近 0 的权重。这在统计上合理,在业务上可能是灾难——某个指标全员都做得差,恰恰是最需要关注的地方,结果权重被压没了。处理办法是给每个进主指数的指标设一个权重下限(比如 3%),在归一化之后强制截断再重归一。这是个非标准做法,但不设这条线,指标体系的短板永远暴露不出来。
3.3 一次完整的合成计算与敏感性扰动
把前面的步骤串起来,从标准化到组合赋权再到扰动检验,代码量不大,关键是每一步的中间结果都要留档,方便事后追责。
import numpy as np import pandas as pd from scipy.stats import spearmanr def normalize(df, base=None, method="minmax", clip_sigma=3.0): """无量纲化。base 传入冻结的基期基准,保证跨期可比; base=None 只用于探索性计算,结果不可用于跨年比较。""" ref = base if base is not None else df out = pd.DataFrame(index=df.index, columns=df.columns, dtype=float) for c in df.columns: s = df[c].astype(float) if method == "minmax": lo, hi = ref[c].min(), ref[c].max() out[c] = (s - lo) / (hi - lo + 1e-9) elif method == "log_minmax": # 长尾计数类 s = np.log1p(s.clip(lower=0)) lo, hi = np.log1p(ref[c].clip(lower=0)).min(), np.log1p(ref[c].clip(lower=0)).max() out[c] = (s - lo) / (hi - lo + 1e-9) elif method == "zscore_clip": # 先 3σ 截尾再极差 mu, sd = ref[c].mean(), ref[c].std(ddof=0) lo_b, hi_b = mu - clip_sigma * sd, mu + clip_sigma * sd sr = ref[c].clip(lo_b, hi_b) s = s.clip(lo_b, hi_b) out[c] = (s - sr.min()) / (sr.max() - sr.min() + 1e-9) elif method == "rank": out[c] = s.rank(pct=True) return out.clip(0.0, 1.0) def entropy_weight(x): """熵权。x 为已归一化的一列,平移 1e-6 避免 ln(0)。""" v = x.astype(float) + 1e-6 p = v / v.sum() n = len(v) e = -(p * np.log(p)).sum() / np.log(n) # 信息熵,n>1 才有意义 d = 1 - e # 差异系数 return d def composite(x, w_ahp, alpha=0.5, w_floor=0.03): """组合赋权并合成。w_ahp 为 AHP 权重 Series,alpha 为主观权重占比。""" d = pd.Series({c: entropy_weight(x[c]) for c in x.columns}) w_ent = d / d.sum() w = alpha * w_ahp + (1 - alpha) * w_ent w = w / w.sum() w = w.clip(lower=w_floor) # 权重下限,保住短板指标 w = w / w.sum() return (x * w).sum(axis=1), w def sensitivity(x, w, rounds=200, amp=0.2, seed=7): """权重 ±amp 随机扰动,看排名稳定性;返回与基准排名的 Spearman 均值。""" rng = np.random.default_rng(seed) base_score = (x * w).sum(axis=1) base_rank = base_score.rank() rhos = [] for _ in range(rounds): noise = rng.uniform(1 - amp, 1 + amp, size=len(w)) wp = pd.Series(w.values * noise, index=w.index) wp = wp / wp.sum() rhos.append(spearmanr(base_rank, (x * wp).sum(axis=1).rank()).statistic) return float(np.mean(rhos)), float(np.min(rhos))调用顺序是 normalize → composite → sensitivity。几个参数的含义需要说清楚:alpha是主观权重占比,0.5 表示 AHP 和熵权各占一半;w_floor是权重下限,0.03 表示任何进主指数的指标至少拿 3% 权重;amp=0.2表示每个权重在正负 20% 区间内随机抖动,rounds=200是重抽样次数。
敏感性结果怎么看:Spearman 均值在 0.9 以上、最小值在 0.8 以上,说明排序对权重不敏感,指数可以拿去用;均值低于 0.8 就要回头查,通常是某两三个指标权重过高且彼此高度相关,导致排名被单一维度绑架。这个检验花费不到十行代码,却能提前挡掉会上最难回答的那个问题——“你这个权重随便改改,排名是不是就变了?”
4. 从台账到可用面板:采集、清洗与口径漂移的处理路径
4.1 采集清单与字段口径表
采集阶段最容易失控的地方是“先要数,再想口径”。正确的顺序反过来:先把字段清单和口径固定下来,再去找系统对接。清单至少要覆盖六列,缺一列就会在清洗阶段返工。
| 字段名 | 来源系统 | 更新频率 | 单位 | 统计窗 | 校验规则 |
|---|---|---|---|---|---|
| 可流通资源数 | 资源目录 | 月 | 个 | 自然月末 | 与上期比波动超过 30% 需说明 |
| 权属标注覆盖率 | 权属登记表 | 月 | % | 自然月末 | 必须落在 0 到 100 之间 |
| 需求登记数 | 需求登记簿 | 月 | 条 | 自然月 | 去重后计数,主键为需求编号 |
| 匹配成功数 | 需求登记簿 | 月 | 条 | 自然月 | 必须小于等于需求登记数 |
| 接口可用率 | 网关日志 | 日聚合月 | % | 按小时采样 | 分母为应采样小时数,非调用次数 |
| 交付时效达标率 | 工单系统 | 月 | % | 自然月 | 剔除客户主动延期工单 |
| 去重使用方数 | 调用日志 | 月 | 个 | 自然月 | 按应用 ID 去重,排除测试应用 |
这张表在项目里的作用类似合同。对接方按表提供,清洗方按表校验,出现争议时看表。校验规则那一列尤其值得较真,“必须小于等于”这种约束看着幼稚,实际能挡掉大量逻辑错误的数据——分子大于分母的比率类错误在跨部门取数里出现的频率比想象中高得多。
4.2 缺失、重复、量纲漂移的三类处理规则
缺失值处理先判断机制。某个板块连续三个月缺接口可用率,多半是网关日志没接入(结构性缺失),插值毫无意义,只能标为缺失并说明;某个月随机缺了几个小时,属于随机缺失,用同板块前后月均值补或者用同期其他板块均值补都可以。判断方法很朴素:看缺失是否和板块、时间、指标类型相关。相关的就不许插值。
重复数据主要来自主键不统一。需求登记簿里同一条需求被不同渠道录了两次,编号不同但内容一致,直接按编号去重是无效的。我一般用“需求方 + 资源标识 + 提出日期(±3 天)”做模糊主键,命中后保留最早一条,其余标记为合并。模糊主键的容差天数要写进规则,不能凭手感。
量纲漂移是最隐蔽的一类。典型场景是统计口径从“自然月”改成“滚动 30 天”,或者单位从“万条”改成“条”,改的时候没人通知,数据直接断层。
import pandas as pd def detect_shift(series, z_thresh=4.0, ratio_thresh=10.0): """检测单指标序列的口径漂移:突变点 + 量级跳变。 series: 以时间为索引的数值序列(已按板块分组调用)。""" s = series.astype(float).sort_index() report = [] # 1) 量级跳变:相邻两期比值异常,多为单位变更 ratio = (s / s.shift(1)).replace([float("inf"), -float("inf")], pd.NA) for t, r in ratio.items(): if pd.notna(r) and (r > ratio_thresh or r < 1 / ratio_thresh): report.append({"time": t, "type": "magnitude", "ratio": round(float(r), 3)}) # 2) 突变点:基于一阶差分的稳健 z 分数 d = s.diff() med, mad = d.median(), (d - d.median()).abs().median() if mad and mad > 0: z = 0.6745 * (d - med) / mad for t, v in z.items(): if pd.notna(v) and abs(v) > z_thresh: report.append({"time": t, "type": "break", "z": round(float(v), 2)}) return pd.DataFrame(report)这段代码做两件事:一是抓相邻期比值超过 10 倍的点,这类基本可以确定是单位或统计周期变了;二是用中位数绝对偏差(MAD)构造稳健 z 分数抓突变点,比直接用标准差稳,因为突变点本身会把标准差带偏。z_thresh=4.0和ratio_thresh=10.0是经验值,指标本身波动大(比如调用量)可以放宽到 5 和 20,比率型指标(可用率、达标率)要收紧到 3 和 1.5。
检出漂移之后不要急着修数据。正确顺序是先确认口径变更的事实,在序列上打一个断点标记,再做前后可比性调整(比如把月度值折算成日均值再乘 30)。没有断点标记就做平滑,等于把一次真实的口径变化当成噪声抹平,后面所有同比分析都是错的。
4.3 面板校验:用三个交叉检查提前发现脏数据
数据进模型之前必须过三道检查,这三道能把大部分脏数据挡在门外。
总量守恒检查。凡是存在汇总关系的指标,分项之和必须等于总量。资源数按类型分项加起来和目录总数对不上,说明有类型缺失或者有重复计数。这条检查的实现成本极低,但能抓出跨系统同步不完整的问题。
时间连续性检查。某指标相邻两期变化超过阈值(比率型 20%、计数型 50%)就要人工说明。注意是“要说明”而不是“自动修正”,因为真实的业务变化也会触发这条规则,自动改会把真实信号改掉。
跨源一致性检查。同一个业务事实如果两个系统都有记录(比如需求登记簿和工单系统都有需求数),偏差超过 5% 就报警。这类偏差通常来自一边做了去重一边没做,或者统计窗不一致。查出原因后要统一到单一数据源,另一个只做校验,不能两个都用——同一份数据用两次,等于在指数里给这个维度加了双倍权重。
提示:三道检查的结果要落成一张问题清单跟着数据走,而不是散在聊天记录里。半年后有人质疑某个数,能翻出当时的检查记录,比重新跑一遍数据省事得多。
5. 避坑:指数算完却没人认的五个原因
5.1 指标层最容易翻车的三个坑
第一个坑,用交易额当流通度的主指标。现象是指数出来之后,某个板块因为一笔大额交易直接冲到第一,其余四个月都平平。原因是交易额是重尾分布,单笔就能主导整个分数,它测的是“有没有大单”,不是“流通是否顺畅”。解决办法是换成中位数交易规模加成交转化率的组合,交易额降级成观察层指标;如果确实要保留,先做 log 变换再加 3σ 截尾,把单笔的影响压到可接受范围。
第二个坑,指标越多越全面。现象是初始版本塞了 40 多个指标,合成之后各维度权重全被稀释到 2% 到 3%,分数几乎不动,谁也说不出问题在哪。原因是高度相关的指标会重复计权,比如“接口可用率”和“接口平均响应时间”相关系数 0.85,同时进模型相当于给交付段加了近一倍权重。解决办法是先做相关性筛查,相关系数超过 0.8 的合并成一个,保留业务解释力更强的那个;筛查之后指标数量通常会掉到 15 到 20 个,权重分布也恢复了区分度。
第三个坑,代理指标没做效度检验就进主分。现象是使用段的分数和实际调用日志完全对不上,业务方一看就说“这数不对”。原因是代理指标(问卷、自评)和客观指标测的根本不是一回事。解决办法是把代理指标放进观察层,跑一个季度的相关性检验,皮尔逊系数稳定在 0.6 以上再提升权重,达不到就长期挂观察层。这一步没有捷径,只能靠时间换可信度。
5.2 权重与呈现上的两个坑
第四个坑,权重是个黑匣子。现象是评审会上第一个问题永远是“为什么这个维度占 30%”,答不上来,整个指数就失去了信任基础。原因是权重只在代码里算了一遍,没有留下判断矩阵和熵值明细。解决办法是把 AHP 的判断矩阵、CR 值、熵权明细、组合后的最终权重做成一张附录表,跟着指数一起发布。透明不等于正确,但不透明一定不被接受。这条是血泪经验:同一个模型,附了权重推导过程之后的采纳率完全不一样。
第五个坑,排名波动没有解释。现象是某一期指数出来,某板块跌了 8 分,负责人直接找上门。原因是只给了总分,没给贡献度分解。解决办法是做因素分解:把总分变化按指标拆开,算出每个指标贡献了多少分,正负都列出来。实现方式是本期得分减上期得分,逐指标乘以权重再求和,这一项的计算量不大,但能立刻回答“是谁把我拉下来的”。
注意:贡献度分解要用同一套权重做两期计算,如果中途调过权重,必须把权重变化单独列为一项贡献,否则分解结果加不回总分,又会变成一次信任危机。
6. 反事实对照与滚动更新:让指数经得起追问的最后一公里
指数做完第一版,最难的其实是怎么证明它测的是“流通”而不是别的东西。常规的 Cronbach's α 或者专家打分只能说明内部一致,说明不了效度。我通常用两组对照来做这件事。
第一组是干预点检验。挑一个明确发生过的变化,比如某季度对某个高频接口做了稳定性改造,然后看指数里交付段的分数是不是在改造后的下一期先动、动多少、传导到使用段滞后几期。如果改造确实发生了而交付段没动,要么是指标选错了,要么是权重把这段压没了,两种都得回头查。
第二组是安慰剂检验。挑一个理论上不该受影响的维度,对它做同样的扰动,看分数会不会也跟着动。如果供给段和交付段之间出现了不该有的强联动,多半是指标之间有隐藏的相关性,前面相关性筛查没筛干净。
滚动更新有三条规则我会写死在方法说明里。基期基准冻结,所有无量纲化都用同一份 min/max 或 μ/σ,不随年份重算;权重年度锁定,一年只在年初调一次,中途不因某次分数难看就改;口径变更留断点,任何字段的定义、单位、统计窗变化都要在序列上标记,并在下一期报告里单独说明影响幅度。这三条看着保守,但指数类产品的核心资产就是时间序列的可比性,一旦断掉,前面几年的数据就废了。
还有个小技巧值得说:给指数加一个“解释率”字段,记录本期有多少比例的分数变化能被贡献度分解解释清楚。正常应该在 95% 以上,掉下来就说明有数据在悄悄变化而没被纳入分解,通常就是口径漂移的早期信号。这个字段不对外发布,只做内部体检用。
我自己做这套东西最大的教训,是太早去追求指标体系的完备性。第一版总想把所有能想到的维度都塞进去,结果每一条都做得不深,评审时被问三个问题就答不上来。后来改成每一轮只打磨一段,先把交付段做到字段级可追溯,再回头补供给段,反而推得快。指数这东西不是设计出来的,是被一次次追问逼出来的。希望帮到你。
本文还有配套的精品资源,点击获取