3、金融数据采集与处理:数据源分析

金融知识图谱的构建,第一步就是找数据。说白了,没有数据,后面的一切都是空中楼阁。我这些年踩过的坑,十有八九都出在数据采集这一步。今天咱们就把这块硬骨头啃下来。

3.1 数据源分析:你得知道去哪儿找

金融数据源,我习惯把它们分成四大类。每一类都有它的脾气,处理方式也完全不同。

数据源类型 典型来源 特点 采集难度
公告与财报 上交所、深交所、巨潮资讯网 结构化程度高,格式统一
新闻 财经门户、资讯聚合平台 半结构化,时效性强
社交媒体 微博、雪球、股吧 非结构化,噪声大,情感丰富
专业数据库 Wind、东方财富Choice 质量高,但需要付费或授权 低(但成本高)

我个人最推荐从公告和财报入手。为什么?因为这是最「干净」的数据。我在项目中遇到过,有些团队一上来就爬社交媒体,结果被各种营销号和水军搞得数据一团糟,清洗成本比采集成本还高。

3.2 爬虫策略与合规:别踩红线

爬虫这件事,技术不难,难在合规。我曾经因为没注意 robots.txt,被某数据平台封了 IP 整整一周。

⚠️ 避坑指南: 我曾经以为只要不商用就没事,结果对方直接发了律师函。记住:尊重数据源的使用协议,遵守 robots.txt,控制请求频率,不要做「暴力爬取」。

这里给出一套我常用的爬虫策略:

  1. 先看 robots.txt:确认哪些路径允许爬取
  2. 设置合理的 User-Agent:别用默认的 Python-urllib
  3. 控制请求间隔:建议 1-3 秒,别把人家服务器搞崩了
  4. 使用代理池:防止 IP 被封
  5. 数据缓存:爬过的数据存本地,别重复请求

嗯,这里要注意:有些数据源提供了官方 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 本章知识体系总览

为了让你更直观地理解本章的知识结构,我画了一张图:

金融数据采集与处理知识体系 数据源分析 公告与财报 新闻资讯 社交媒体 专业数据库 爬虫策略与合规 合规检查(robots.txt) 请求控制与代理池 数据缓存策略 数据清洗与结构化 + NER 去噪 标准化 结构化 NER实体提取

这张图把本章的核心脉络串起来了。从数据源出发,经过合规采集,再到清洗和 NER 提取,每一步都环环相扣。你想想看,如果数据源选错了,后面再怎么清洗也是白费功夫。

核心要点回顾:

  • 数据源优先选公告和财报,干净且结构化
  • 爬虫合规是第一位的,别为了省事惹麻烦
  • 清洗和结构化是知识图谱的基石,值得花 70% 的时间
  • NER 先用规则兜底,再用模型提精度

好了,这一章的内容就到这里。数据采集和处理是金融知识图谱的「地基」,地基打不牢,后面建什么都是危楼。下一章咱们聊聊知识图谱的核心——实体关系抽取,那才是真正出活儿的地方。


公众号:蓝海数据掘金营,微信 deep3321