3、金融数据采集与处理:数据源分析
金融知识图谱的构建,第一步就是找数据。说白了,没有数据,后面的一切都是空中楼阁。我这些年踩过的坑,十有八九都出在数据采集这一步。今天咱们就把这块硬骨头啃下来。
3.1 数据源分析:你得知道去哪儿找
金融数据源,我习惯把它们分成四大类。每一类都有它的脾气,处理方式也完全不同。
| 数据源类型 | 典型来源 | 特点 | 采集难度 |
|---|---|---|---|
| 公告与财报 | 上交所、深交所、巨潮资讯网 | 结构化程度高,格式统一 | 低 |
| 新闻 | 财经门户、资讯聚合平台 | 半结构化,时效性强 | 中 |
| 社交媒体 | 微博、雪球、股吧 | 非结构化,噪声大,情感丰富 | 高 |
| 专业数据库 | Wind、东方财富Choice | 质量高,但需要付费或授权 | 低(但成本高) |
我个人最推荐从公告和财报入手。为什么?因为这是最「干净」的数据。我在项目中遇到过,有些团队一上来就爬社交媒体,结果被各种营销号和水军搞得数据一团糟,清洗成本比采集成本还高。
3.2 爬虫策略与合规:别踩红线
爬虫这件事,技术不难,难在合规。我曾经因为没注意 robots.txt,被某数据平台封了 IP 整整一周。
这里给出一套我常用的爬虫策略:
- 先看 robots.txt:确认哪些路径允许爬取
- 设置合理的 User-Agent:别用默认的 Python-urllib
- 控制请求间隔:建议 1-3 秒,别把人家服务器搞崩了
- 使用代理池:防止 IP 被封
- 数据缓存:爬过的数据存本地,别重复请求
嗯,这里要注意:有些数据源提供了官方 API,能用 API 就别用爬虫。比如巨潮资讯网就有公告查询接口,虽然有限流,但比爬虫稳定得多。
3.3 数据清洗与结构化:脏活累活才是核心
数据采集回来,你会发现——嗯,真够乱的。公告里可能夹杂着 HTML 标签,财报里数字和文字混在一起,新闻里还有各种广告。
我习惯把清洗流程分成三步:
- 去噪:去掉 HTML 标签、广告、无关字符
- 标准化:统一日期格式、数字格式、单位
- 结构化:从非结构化文本中提取关键字段
举个例子,一份财报里可能有这样的文本:
「报告期内,公司实现营业收入 12.34 亿元,同比增长 15.6%」
清洗后,我们需要把它变成:
{
"指标": "营业收入",
"数值": 12.34,
"单位": "亿元",
"同比变化": 15.6,
"变化方向": "增长"
}
你想想看,如果这一步做不好,后面的知识图谱里全是「12.34 亿元」和「12.34亿」这种不一致的数据,推理结果能准吗?
3.4 命名实体识别(NER)基础:从文本中挖出金子
NER 是金融知识图谱的核心技术之一。说白了,就是从文本里找出「谁、什么、多少、什么时候」。
金融领域的 NER 和通用 NER 不太一样。通用 NER 关注人名、地名、机构名,而金融 NER 更关注:
- 公司名:比如「贵州茅台」、「中国平安」
- 人名:比如「董事长」、「CEO」
- 金融术语:比如「市盈率」、「净资产收益率」
- 数字实体:比如「12.34 亿元」、「15.6%」
- 时间实体:比如「2024年第一季度」、「报告期内」
这里给一个简单的 NER 示例,用 Python 的 spaCy 加上自定义规则:
import spacy
from spacy.pipeline import EntityRuler
nlp = spacy.load("zh_core_web_sm")
ruler = EntityRuler(nlp)
# 添加金融实体规则
patterns = [
{"label": "COMPANY", "pattern": [{"LOWER": "贵州茅台"}]},
{"label": "FIN_TERM", "pattern": [{"LOWER": "市盈率"}]},
{"label": "PERCENT", "pattern": [{"SHAPE": "dd.dd%"}]}
]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler)
text = "贵州茅台2024年市盈率为25.6%"
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
# 输出:贵州茅台 COMPANY, 2024年 DATE, 25.6% PERCENT
你看,这样就能把关键信息提取出来了。不过说实话,这只是最基础的用法。实际项目中,我还会结合正则表达式和领域词典,把准确率从 70% 提升到 95% 以上。
3.5 本章知识体系总览
为了让你更直观地理解本章的知识结构,我画了一张图:
这张图把本章的核心脉络串起来了。从数据源出发,经过合规采集,再到清洗和 NER 提取,每一步都环环相扣。你想想看,如果数据源选错了,后面再怎么清洗也是白费功夫。
核心要点回顾:
- 数据源优先选公告和财报,干净且结构化
- 爬虫合规是第一位的,别为了省事惹麻烦
- 清洗和结构化是知识图谱的基石,值得花 70% 的时间
- NER 先用规则兜底,再用模型提精度
好了,这一章的内容就到这里。数据采集和处理是金融知识图谱的「地基」,地基打不牢,后面建什么都是危楼。下一章咱们聊聊知识图谱的核心——实体关系抽取,那才是真正出活儿的地方。
公众号:蓝海数据掘金营,微信 deep3321