2. 产业链数据采集:数据源类型、采集方法与质量评估

数据采集这事儿,说白了就是给模型找「粮食」。我刚开始做产业链分析时,最头疼的不是建模本身,而是数据从哪来、怎么拿、拿回来能不能用。这一章,我就把这几年的实战经验掰开揉碎讲给你听。

产业链数据采集 数据源类型 公开财报 行业报告 新闻舆情 采集方法 爬虫 API 手工整理 数据质量评估 完整性 准确性 时效性 三者缺一不可,环环相扣

2.1 数据源类型:你的「食材」从哪来

产业链数据源,我习惯分成三大类。每一类都有它的脾气,摸透了才能用好。

2.1.1 公开财报

这是最「硬」的数据。上市公司每年、每季度都得交作业,证监会盯着呢。财报里藏着供应链的蛛丝马迹——前五大客户是谁、主要供应商有哪些、存货周转率多少。我个人习惯把A股、港股、美股的年报都扒下来,尤其是「管理层讨论与分析」那部分,经常能挖到上下游关系的线索。

我的小技巧: 别只看合并报表。有时候子公司的财报更能反映某个细分产业链的真实情况。我曾经为了分析芯片封装环节,专门去翻了长电科技子公司的年报。

2.1.2 行业报告

券商研报、咨询公司白皮书、行业协会统计年鉴——这些是「半成品」。它们已经帮你梳理好了产业链图谱,但问题是:谁写的?为谁写的? 券商研报可能为了推票而美化,咨询报告可能为了卖方案而夸大。我一般把行业报告当「参考框架」,不会直接拿里面的数据建模。

2.1.3 新闻舆情

这个就热闹了。企业公告、招标信息、专利新闻、高管访谈、甚至社交媒体上的吐槽。新闻舆情的价值在于「实时性」——财报还没出来,新闻可能已经爆出某家公司和谁签了大单。但坑也最多,虚假新闻、标题党、情绪化内容比比皆是。

注意: 新闻舆情的数据清洗成本最高。我曾经爬了10万条新闻,最后能用的不到30%。别指望拿新闻直接做定量分析,它更适合做「信号触发」和「关系发现」。

2.2 爬虫与API采集方法

数据源找到了,怎么拿下来?我一般分两种情况:有API的走API,没API的写爬虫。别一上来就写爬虫,先看看有没有现成的接口。

2.2.1 API采集

国内常用的数据API有这些:

数据源 API类型 特点
东方财富 HTTP REST 财报数据全,但有限流
Wind Python SDK 专业级,但收费
Tushare HTTP REST 开源免费,社区活跃
新浪财经 WebSocket 实时行情,适合舆情

用API采集,代码其实很简洁。我拿Tushare举个例子:

import tushare as ts

# 初始化(需要注册获取token)
pro = ts.pro_api('your_token_here')

# 获取某公司前五大客户
df = pro.top10_holders(ts_code='600519.SH', 
                       start_date='20230101', 
                       end_date='20231231')
print(df.head())
关键点: API采集一定要处理好限流和重试机制。我见过太多人因为没加time.sleep(),直接被封IP。

2.2.2 爬虫采集

没有API的时候,就得自己动手了。爬虫的核心就三步:请求页面、解析内容、存储数据。我常用的工具链是 requests + BeautifulSoup + Selenium

举个实际例子,爬取某招标网站的供应链信息:

import requests
from bs4 import BeautifulSoup

url = 'https://example-bidding.com/supply-chain'
headers = {'User-Agent': 'Mozilla/5.0'}

resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, 'html.parser')

# 找到所有招标条目
items = soup.select('.bid-item')
for item in items:
    title = item.select_one('.title').text.strip()
    company = item.select_one('.company').text.strip()
    print(f'招标方: {company}, 项目: {title}')
避坑指南: 我曾经爬一个政府招标网站,对方用了反爬虫机制,直接返回假数据。后来发现需要模拟登录和设置Cookie。记住:爬虫不是技术问题,是博弈问题

2.3 数据质量评估

数据拿回来了,别急着建模。先问问自己:这数据靠谱吗?我有一套「四维评估法」:

  • 完整性: 有没有大量缺失值?比如某家公司的供应商字段全是NaN,那这条数据基本废了。
  • 准确性: 数值对不对?我习惯拿财报数据和行业报告交叉验证。比如某公司年报说营收100亿,但行业报告说整个市场才80亿,那肯定有一方错了。
  • 一致性: 不同数据源对同一实体的描述是否一致?比如「华为技术有限公司」和「华为技术」是不是同一家?需要做实体对齐。
  • 时效性: 数据是什么时候的?产业链关系变化很快,去年的供应商名单今年可能已经作废了。
我的经验: 数据质量评估不是一次性工作。我每次建模前都会跑一遍质量检查脚本,把异常值、重复值、缺失值都标记出来。宁可花一天清洗数据,也不要花一周调试一个基于脏数据的模型。

最后分享一个我常用的数据质量评分表:

维度 权重 评分标准(1-5分)
完整性 30% 缺失率<5%得5分,5%-20%得3分,>20%得1分
准确性 30% 交叉验证一致率>90%得5分,70%-90%得3分
一致性 20% 实体对齐率>95%得5分,否则酌情扣分
时效性 20% 数据滞后<1个月得5分,1-3个月得3分

嗯,数据采集这块儿,说白了就是「找得到、拿得下、信得过」。这三步走扎实了,后面的建模才能站得住脚。我见过太多人一上来就调模型参数,结果数据源都是错的,白忙活一场。记住:产业链分析,七分在数据,三分在模型


专注资料整理