2. 产业链数据采集:数据源类型、采集方法与质量评估
数据采集这事儿,说白了就是给模型找「粮食」。我刚开始做产业链分析时,最头疼的不是建模本身,而是数据从哪来、怎么拿、拿回来能不能用。这一章,我就把这几年的实战经验掰开揉碎讲给你听。
2.1 数据源类型:你的「食材」从哪来
产业链数据源,我习惯分成三大类。每一类都有它的脾气,摸透了才能用好。
2.1.1 公开财报
这是最「硬」的数据。上市公司每年、每季度都得交作业,证监会盯着呢。财报里藏着供应链的蛛丝马迹——前五大客户是谁、主要供应商有哪些、存货周转率多少。我个人习惯把A股、港股、美股的年报都扒下来,尤其是「管理层讨论与分析」那部分,经常能挖到上下游关系的线索。
2.1.2 行业报告
券商研报、咨询公司白皮书、行业协会统计年鉴——这些是「半成品」。它们已经帮你梳理好了产业链图谱,但问题是:谁写的?为谁写的? 券商研报可能为了推票而美化,咨询报告可能为了卖方案而夸大。我一般把行业报告当「参考框架」,不会直接拿里面的数据建模。
2.1.3 新闻舆情
这个就热闹了。企业公告、招标信息、专利新闻、高管访谈、甚至社交媒体上的吐槽。新闻舆情的价值在于「实时性」——财报还没出来,新闻可能已经爆出某家公司和谁签了大单。但坑也最多,虚假新闻、标题党、情绪化内容比比皆是。
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())
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}')
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分 |
嗯,数据采集这块儿,说白了就是「找得到、拿得下、信得过」。这三步走扎实了,后面的建模才能站得住脚。我见过太多人一上来就调模型参数,结果数据源都是错的,白忙活一场。记住:产业链分析,七分在数据,三分在模型。