简介:这是一份面向行业分析师、企业决策者与市场研究人员编写的胶粘剂行业研究报告,用于快速建立行业认知、支撑市场策略与业务决策。内容围绕胶粘剂定义、组成成分与分类方法展开,涵盖按用途划分的结构、非结构与特种胶粘剂,按固化方式划分的水基型、热熔型、溶剂型、反应型胶粘剂,以及按化学成分划分的有机硅、环氧树脂、丙烯酸、聚氨酯、合成橡胶和聚醋酸乙烯酯等主要类别。报告同时梳理上游化工原料、中游生产制造、下游建筑、包装、木材加工、汽车、制鞋、新能源等应用市场的完整产业链,并结合市场规模、竞争格局、重点企业经营情况与高性能、环保型、功能型产品趋势做出判断。资源包内为1个PDF文件,共1.31MB,结构清晰、便于通读与摘录引用。目前已有64人学习下载,适合需要行业概览、市场数据与竞争情报的读者参考。
1. 胶粘剂行业研究报告为什么不能只靠"搜一搜"拼出来
有人被临时安排三天交一份胶粘剂行业研究报告,打开搜索框,回来的是十几篇口径互相打架的稿子:有的用万吨讲产量,有的用亿元讲规模,有的把胶带算进胶粘剂,有的把硅酮密封胶单列成另一个行业。数据看着都有出处,拼在一起却对不上账——产量乘吨价不等于市场规模,进口量加产量也推不出表观消费量。
反直觉的地方在这里:胶粘剂行业分析报告的质量,几乎不取决于文笔和排版,而取决于你能不能在动笔之前,先把"胶粘剂"这四个字收敛成一个可计算的口径。固化方式怎么分、下游怎么切、单位统一到吨还是万吨、金额含税还是不含税,这四件事定死之前,任何图表都是在给自己埋雷。
下面这套流程适合三类人:被要求在短时间内出一份能过评审的市场研究材料的产品与战略岗,需要给立项材料补行业数据的研发和项目经理,以及被拉来做行业数据清洗与可视化的数据工程师。它的核心不是找更多资料,而是把资料变成一张能被别人复算、能被自己推翻的表。
2. 胶粘剂行业分析报告的数据底座:口径、来源与落库
一份能站住的胶粘剂行业分析报告,第一层不是结论,是数据底座。底座做对了,后面九成的争论会自动消失;底座糊了,写得再漂亮也经不住业务方一句"这个数怎么来的"。
2.1 先把口径定死:胶粘剂、胶带、密封胶不是一回事
行业里最容易混的三组概念:胶粘剂与胶粘带(后者是涂布了压敏胶的制品,收入重复计算风险极高)、胶粘剂与密封胶(功能上是粘接与密封,统计上常被合并)、水性胶与溶剂型胶(环保口径下必须拆开,否则会得出完全相反的行业趋势判断)。
我一般先把品类拆成五层,作为后续所有表的维度字段:
| 固化方式 | 代表品类 | 主要下游 | 关键原料 |
|---|---|---|---|
| 水性 | 白乳胶、水性丙烯酸 | 包装、木工、建筑 | 醋酸乙烯、丙烯酸酯 |
| 溶剂型 | 氯丁、溶剂型聚氨酯 | 制鞋、汽车内饰 | 甲苯、丁酮、聚氨酯 |
| 热熔型 | EVA、PO、PUR | 包装、卫材、木工 | EVA 树脂、聚烯烃 |
| 反应型 | 环氧、双组分聚氨酯 | 电子、新能源、结构粘接 | 环氧树脂、MDI、固化剂 |
| 压敏型 | 丙烯酸、橡胶系 | 标签、胶带、保护膜 | 丙烯酸酯、橡胶 |
提示:胶粘带企业的营业收入在算市场规模时要单独挂在"制品"层,和"胶粘剂"层做上下位区分,否则总量会虚高一大截。
2.2 五类数据源的可用性与交叉检验
不同来源解决的问题不同,指望一个来源包打天下是做行业研究的常见误判。
| 数据源类型 | 典型字段 | 更新节奏 | 主要坑 |
|---|---|---|---|
| 行业统计口径 | 产量、品类结构、企业数 | 年度/不定期 | 样本企业变动、含胶带 |
| 海关商品编码数据 | 数量、金额、来源地 | 月度 | 计量单位不统一、税与非税口径 |
| 上市公司年报 | 分产品收入、毛利率、产能 | 季度/年度 | 分产品披露粗细不一致 |
| 第三方资讯机构 | 现货价、开工率、库存 | 日/周 | 样本报价,样本换过不通知 |
| 一手调研 | 实际吨价、账期、替代关系 | 一次性 | 样本偏差大,不能外推总量 |
交叉检验的最小动作是:同一个指标至少两个来源,差异超过 15% 就停下来找口径差,而不是取平均。差异往往来自"是否含税""是否含贸易商加价""单位是吨还是千吨"。
2.3 把原始表拉平:一张明细表收纳所有来源
不管来源是 Excel、CSV 还是接口,最后都往同一张明细表里塞,并且允许同一口径存多个来源版本,方便后面做差异对比。
-- 胶粘剂品类明细表:一行 = 一个统计期 × 区域 × 品类 × 下游 × 数据源 CREATE TABLE adhesive_market ( period DATE NOT NULL COMMENT '统计期,统一取月末', region VARCHAR(32) NOT NULL COMMENT '销售区域或来源地', category VARCHAR(32) NOT NULL COMMENT '水性/溶剂型/热熔/反应型/压敏', downstream VARCHAR(32) NOT NULL COMMENT '建筑/包装/汽车/电子/木工/制鞋', volume_t DECIMAL(14,4) NULL COMMENT '销量,统一为吨', revenue_cny DECIMAL(18,2) NULL COMMENT '销售额,元,不含税', capacity_t DECIMAL(14,4) NULL COMMENT '有效产能,吨,年度口径', source_id SMALLINT NOT NULL COMMENT '数据源编号', PRIMARY KEY (period, region, category, downstream, source_id) );主键里带source_id是关键:口径相同、来源不同的两条记录可以并存,出报告时用视图挑一个来源,做验证时直接对比差异。不要用"覆盖更新",一旦覆盖,你就失去了发现口径断点的机会。
2.4 单位归一与缺失值:宁缺毋滥
单位问题是胶粘剂数据清洗里最高频的坑,尤其是"万吨""千吨""吨"混用,以及金额里"万元""亿元"混用。
# 单位归一到吨;金额归一到元(不含税) UNIT_TON = {"千克": 1e-3, "吨": 1.0, "千吨": 1e3, "万吨": 1e4} UNIT_CNY = {"元": 1.0, "万元": 1e4, "亿元": 1e8} def normalize_units(df, vol_col, vol_unit_col, amt_col=None, amt_unit_col=None): df = df.copy() # 单位列里出现未登记的词,先显式报错,别默默变成 NaN unknown = set(df[vol_unit_col].dropna()) - set(UNIT_TON) if unknown: raise ValueError(f"未登记的数量单位: {unknown}") df["volume_t"] = df[vol_col] * df[vol_unit_col].map(UNIT_TON) if amt_col: df["revenue_cny"] = df[amt_col] * df[amt_unit_col].map(UNIT_CNY) return df参数说明:vol_col是原始数量列,vol_unit_col是它的单位列;函数只做乘法映射,不做汇率换算,涉及外币金额时另开一列存原币和汇率,避免覆盖原始值。缺失值处理上,年度产量不要在年度区间内做线性插值——那等于凭空造数;更稳的做法是保留空值,用另一个来源补,并在报告里标注该年份为估算值。
3. 用 Python 把胶粘剂产量、价格与进出口数据算成指标
底座搭好之后,胶粘剂行业研究报告的正文结论基本都是从几个固定指标里长出来的:表观消费量、进口依存度、产能利用率、吨价、复合增速。把这几件事写成函数,报告换年份只需要改参数。
3.1 表观消费量与进口依存度:公式与参数边界
表观消费量是最容易被滥用的指标。它的定义是:产量 + 进口量 − 出口量。前提是这四个量必须是同一口径(同一品类拆分、同一单位、同一时间窗),否则算出来的是噪声。
| 指标 | 计算式 | 参数边界 |
|---|---|---|
| 表观消费量 | 产量 + 进口量 − 出口量 | 四项同口径同单位;库存变动忽略时需在脚注说明 |
| 进口依存度 | 进口量 ÷ 表观消费量 | 分母为 0 或负值时不出数 |
| 产能利用率 | 实际产量 ÷ 有效产能 | 有效产能不含长期停摆装置 |
| 吨价 | 销售额 ÷ 销量 | 销售额需为不含税;销量需含自用转售部分 |
| 复合增速 CAGR | (末值 ÷ 初值)^(1/年数) − 1 | 初值 ≤ 0 时无定义 |
注意:产能利用率一旦超过 100%,先怀疑"有效产能"口径是不是只算了主要企业,而不是市场真在超负荷运行。
3.2 一次算完 CAGR、吨价带和利用率
import numpy as np import pandas as pd def cagr(first, last, years): """复合增速;初值非正或年数非正时返回 NaN,避免负数开偶次方""" if first is None or last is None or first <= 0 or years <= 0: return np.nan return (last / first) ** (1 / years) - 1 def build_metrics(df): """df 需含 period/category/downstream/volume_t/revenue_cny/capacity_t""" g = df.groupby(["period", "category"], as_index=False).agg( volume_t=("volume_t", "sum"), revenue_cny=("revenue_cny", "sum"), capacity_t=("capacity_t", "max"), # 产能按企业去重后取合计,这里用 max 占位 ) # 吨价:元/吨,转成更常用的 元/公斤 g["price_cny_per_kg"] = g["revenue_cny"] / g["volume_t"] / 1000 g["utilization"] = g["volume_t"] / g["capacity_t"] # 按品类算区间增速 rows = [] for cat, sub in g.groupby("category"): sub = sub.sort_values("period") if len(sub) >= 2: yrs = (sub["period"].iloc[-1] - sub["period"].iloc[0]).days / 365.25 rows.append({ "category": cat, "volume_cagr": cagr(sub["volume_t"].iloc[0], sub["volume_t"].iloc[-1], yrs), "price_last": sub["price_cny_per_kg"].iloc[-1], "util_last": sub["utilization"].iloc[-1], }) return g, pd.DataFrame(rows)逻辑说明:groupby按统计期和品类聚合,capacity_t用max只是占位写法,真实项目里应该单独维护一张企业级产能表再求和,否则同一家企业被多行拆分会重复计产能。price_cny_per_kg除以 1000 是把元/吨换成元/公斤,这是行业交流里更常见的报价单位,注意换算后再和一手调研价格对比。cagr对初值做了保护,避免出现"负增长开方"的无效数字混进图表。
3.3 价格传导:用错位相关找原料到胶粘剂的时间差
胶粘剂的吨价和上游原料价格之间通常存在滞后,这个滞后是报告里最容易讲错、也最容易讲出彩的地方。
def best_lag(raw_price, adh_price, max_lag=6): """raw_price 领先 adh_price。先做一阶差分再算相关,降低趋势造成的伪相关""" x = raw_price.diff() y = adh_price.diff() result = [] for lag in range(max_lag + 1): r = x.shift(lag).corr(y) result.append((lag, None if r is None or np.isnan(r) else round(r, 3))) # 按相关系数绝对值排序,取最强者 return sorted(result, key=lambda t: -abs(t[1] or 0))[0] # 例:查 EVA 树脂月均价领先热熔胶吨价几个月 # print(best_lag(eva_monthly, hotmelt_monthly, max_lag=6))参数说明:max_lag按月计,一般取 6 足够,超过半年仍没有显著相关的,多半不是价格传导问题而是品类对不上。先差分再求相关,是为了避免两条都在上涨的序列"天然高相关"。得出滞后月数后,报告里可以写成"原料价格变动约 N 个月后传导至胶粘剂出厂价",同时必须注明这只是统计相关,不等于因果。
4. 胶粘剂行业研究报告的写作骨架:把赛道拆成可验证的结论
数据能算了,接下来是结构。胶粘剂行业分析报告最怕写成品类百科,读完不知道谁在赚钱、钱从哪来、还能赚多久。骨架按"赛道矩阵 → 竞争量化 → 可证伪结论"三层搭。
4.1 细分赛道矩阵:固化方式 × 下游交叉切片
单一维度切片会漏掉交叉信息,比如"热熔胶"整体增长平缓,但"热熔胶 × 卫材"可能因为一次性卫生用品渗透率提升而单独走高。做法是把固化方式做行、下游做列,格子里填吨价带和增速。
| 固化方式 | 建筑 | 包装 | 汽车 | 电子 | 木工 |
|---|---|---|---|---|---|
| 水性 | 中等吨价,增速平稳 | 低吨价,量大 | 少 | 少 | 主力 |
| 溶剂型 | 少 | 少 | 主力,受环保约束 | 少 | 少 |
| 热熔型 | 少 | 主力,增速中 | 中等 | 卫材另有增量 | 主力 |
| 反应型 | 结构胶 | 少 | 中 | 高吨价,增速高 | 少 |
| 压敏型 | 少 | 标签与胶带 | 少 | 保护膜 | 少 |
格子里的金额量级不用写死,用你算出来的price_cny_per_kg填区间即可。这张表的价值在于:业务方问"哪块值得进",你指一个格子就能说清是吨价高、还是量在涨、还是两个都在动。
4.2 竞争格局的量化写法:CR5、吨价带、毛利率区间
竞争格局不要只写"行业集中度较低"这种没有信息量的话。给出三个数就够:按收入计算的 CR5、各梯队企业的吨价带、上市公司披露的分产品毛利率区间。
def concentration(df, topn=5): """按收入算 CR5;df 需含 company 与 revenue_cny""" total = df["revenue_cny"].sum() top = df.nlargest(topn, "revenue_cny")["revenue_cny"].sum() return round(top / total, 3) if total > 0 else None def price_band(df): """各梯队吨价带:用分位数切,避免个别极端值拉偏""" p = df["revenue_cny"] / df["volume_t"] / 1000 # 元/公斤 return p.quantile([0.25, 0.5, 0.75]).round(1).to_dict()逻辑说明:CR5 用收入而不是销量算,因为低吨价大宗品类的销量占比会严重高估小企业的行业地位。吨价带用四分位数而不是最大最小值,是为了避免一家做航空结构胶的企业把整个区间的上界拉到没有参考意义的位置。毛利率区间要标明是"上市公司口径",和未上市企业的实际水平往往有差距。
4.3 结论写成可证伪的样子:指标 + 阈值 + 观测窗口
一条站得住的结论长这样:"反应型胶粘剂在电子下游的吨价优势在 24 个月内有可能被稀释,观测指标为丙烯酸酯类原料价格同比涨幅,阈值设为连续两个季度超过 20%。"有指标、有阈值、有窗口,别人才能反驳你,能被反驳的结论才有价值。
把结论表从 DataFrame 直接生成 Markdown,可以避免手工复制粘贴导致的数字错位:
def md_table(df, floatfmt=",.2f"): """把结论表转成 Markdown,浮点统一格式,整数与字符串原样输出""" header = "| " + " | ".join(map(str, df.columns)) + " |" sep = "|" + "|".join(["---"] * len(df.columns)) + "|" rows = [] for row in df.itertuples(index=False): cells = [f"{v:{floatfmt}}" if isinstance(v, float) else str(v) for v in row] rows.append("| " + " | ".join(cells) + " |") return "\n".join([header, sep] + rows)5. 胶粘剂行业分析报告的交叉验证与版本管理
5.1 三源交叉验证清单
结论定稿前,至少过一遍这三组对照:产量用行业统计口径和上市公司合计产量对照;进出口量用海关数量与主要贸易企业的披露对照;吨价用第三方资讯报价与年报"收入÷销量"对照。三组里有任意一组偏差超过 15%,先别改结论,回去改口径。
| 对照项 | 来源 A | 来源 B | 允许偏差 | 超差先查什么 |
|---|---|---|---|---|
| 产量 | 行业统计 | 企业年报合计 | 15% | 样本是否含胶带 |
| 进出口 | 海关数量 | 企业披露 | 20% | 计量单位与贸易方式 |
| 吨价 | 资讯机构报价 | 收入÷销量 | 15% | 含税、贸易商加价 |
5.2 把假设做成参数表,一键重跑结论
报告被质疑时,最消耗时间的不是重算,而是回忆"当时用的是哪版数据、哪个口径"。做法是把所有可调假设外置成配置文件,和代码一起进版本库。
import yaml # params.yaml 示例 # window: {start: "2019-01-01", end: "2024-12-31"} # source_preference: [1, 3] # 口径优先级,1 为行业统计,3 为第三方 # fx_rate: {"USD": 7.15} # 外币折算,固定值而非实时,保证可复算 # capacity_mode: "enterprise" # 产能按企业去重求和 def load_params(path="params.yaml"): with open(path, "r", encoding="utf-8") as f: return yaml.safe_load(f) def run_report(params): df = load_market(**params["window"]) df = pick_source(df, params["source_preference"]) # 按优先级选源 metrics, summary = build_metrics(df) return metrics, summary, md_table(summary)参数说明:source_preference决定了同一口径下优先用哪个来源,改动它会直接改变增速和吨价带,所以每次调整都要在提交信息里写清原因。fx_rate固定而不是实时取,是为了让三个月后重跑得到同一组数,汇率波动另开敏感性分析章节呈现。capacity_mode控制产能去重方式,这一点最容易被忽略,也最容易让产能利用率整体偏高。
一个具体技巧:把每次对外发布的报告版本和当次的params.yaml内容一起打标签,报告封面写版本号,文件里写参数快照。这样再有人问"这个数怎么来的",一条命令就能回到当时的现场,而不是靠翻聊天记录。
本文还有配套的精品资源,点击获取