金融数据基础:常见金融数据类型、数据来源与获取方式、数据字段含义

金融数据清洗的第一步,不是写代码,而是先搞清楚你面对的数据到底是什么。很多初学者拿到一张表就开始处理缺失值、去重、格式化,结果做到一半才发现:字段含义理解错了、数据频率对不上、复权因子没处理、甚至把财务数据里的单位当成普通数值直接聚合。这些问题的根源,都在于对金融数据的基础类型、来源渠道和字段语义缺乏系统认知。本章将围绕三大核心问题展开:金融数据有哪些常见类型、它们从哪里来、每个字段到底代表什么。只有把这三块地基打牢,后续的清洗规则才有依据。

金融数据全景图:类型 · 来源 · 字段 ① 数据类型 ② 数据来源 ③ 字段含义 行情数据 · 日线/分钟线/盘口 · OHLCV + 复权因子 · 买卖五档、逐笔成交 交易数据 · 订单、成交、持仓 · 账户资金流水 · 融资融券明细 财务数据 · 三大报表 + 附注 · 业绩预告/快报 · 财务指标(ROE/PE) 宏观数据 · GDP/CPI/PPI/PMI · 利率/汇率/货币供应 · 行业景气度指标 免费公开源 · 交易所官网(SSE/SZSE) · 国家统计局、央行 · 巨潮资讯(公告) 数据服务商 · Wind / Choice / iFinD · Tushare / AkShare · Bloomberg / Refinitiv 另类数据 · 卫星遥感、电商数据 · 舆情/新闻情绪 · 供应链/物流数据 内部系统 · 券商/基金交易系统 · 风控/清算/估值系统 · 自建数据仓库 标识类字段 · 证券代码/名称/市场 · 行业分类/板块 · 报告期/交易日 数值类字段 · 价格/成交量/金额 · 财务科目数值 · 比率/指数/收益率 状态类字段 · 停牌/退市/ST标记 · 上市状态/交易状态 · 数据质量标记 元数据字段 · 数据来源/更新时间 · 版本号/采集批次 · 单位/精度/复权类型 三者关系:数据类型决定字段结构 → 数据来源决定获取方式 → 字段含义决定清洗规则

2.1 常见金融数据类型:从行情到宏观的四层体系

金融数据并非铁板一块,而是按照市场微观结构到宏观经济的层次,形成了四类核心数据:行情数据、交易数据、财务数据、宏观数据。这四类数据在粒度、频率、可靠性和清洗难度上差异极大,理解它们的本质区别是选择清洗策略的前提。

核心原理:四类数据的本质差异

行情数据是市场交易产生的价格和成交量信息,粒度最细、频率最高。日线数据包含开高低收、成交量、成交额,分钟线则进一步细分到1分钟、5分钟、30分钟等。盘口数据(Level-1/Level-2)记录买卖五档或十档的委托挂单,逐笔成交则记录每一笔实际成交的细节。行情数据的核心特征是时间序列性和高频性,清洗时最常遇到的问题是:时间戳对齐、复权处理、停牌期间的空值、异常跳价(如涨跌停导致的极端值)。

交易数据是投资者或机构实际发生的委托、成交、持仓和资金变动记录。这类数据通常来自券商柜台系统、交易所回报或自建交易系统,字段包括订单编号、委托时间、成交价格、成交数量、买卖方向、佣金印花税等。交易数据的核心特征是账户关联性和事件驱动性,清洗时需要注意:订单状态流转(已报、部成、全成、已撤)、费用计算口径、多市场多币种的统一。

财务数据是上市公司定期披露的资产负债表、利润表、现金流量表以及附注信息,还包括业绩预告、业绩快报和各类财务指标。财务数据的核心特征是低频(季度/年度)和标准化程度高(遵循会计准则),但清洗难点在于:报告期与公告日的区分、合并报表与母公司报表的选择、会计政策变更导致的数值不可比、不同市场的会计准则差异(CAS vs IFRS vs US GAAP)。

宏观数据是反映整体经济运行的指标,如GDP、CPI、PPI、PMI、利率、汇率、货币供应量(M0/M1/M2)等。宏观数据的核心特征是低频(月度/季度)和多源发布,清洗时常见问题包括:数据修订(初值、修正值、终值)、季节性调整(季调前后数据差异)、统计口径变化(如基期调整)。

数据类型典型频率数据粒度主要来源清洗重点
行情数据秒级~日级单只证券/指数交易所、数据商复权、异常值、时间对齐
交易数据事件驱动账户/订单/成交券商柜台、自建系统状态流转、费用口径、多市场统一
财务数据季度/年度公司/报告期交易所公告、数据商报告期对齐、口径选择、单位统一
宏观数据月度/季度国家/地区/行业统计局、央行、国际组织修订值、季调、口径变化
经验提醒:初学者最容易混淆的是“行情数据”和“交易数据”。行情数据是市场层面的公开信息(所有人都看到同样的价格),而交易数据是账户层面的私有信息(每个人的委托和成交都不同)。清洗时,行情数据侧重“去噪”,交易数据侧重“对账”。

判断方法:如何识别你手上的数据属于哪一类

拿到一张数据表,先问三个问题:① 数据的最小粒度是什么?(单笔成交?单日K线?单季度财报?)② 数据是否包含账户或订单标识?(有则属于交易数据)③ 数据的发布频率和滞后性如何?(行情是实时的,财务是滞后的)。通过这三个问题,可以快速将数据归类到四类框架中,从而确定后续清洗策略的方向。

案例拆解:一个量化研究员的日常数据需求

假设你是一名量化研究员,需要构建一个“小市值+高盈利”的选股策略。你需要的完整数据链条是:行情数据(每日收盘价、成交量,用于计算市值和换手率)→ 财务数据(季度净利润、净资产,用于计算ROE和盈利质量)→ 交易数据(你自己的模拟盘委托成交记录,用于回测验证)→ 宏观数据(利率水平,用于判断策略适用的市场环境)。这四类数据缺一不可,且每一类都需要不同的清洗规则:行情数据需要复权处理(前复权/后复权),财务数据需要对齐报告期(避免未来函数),交易数据需要处理滑点和手续费,宏观数据需要匹配频率(月度宏观数据如何与日度行情对齐)。

风险提示:财务数据清洗中最大的陷阱是“未来函数”——使用当期财报数据时,必须确保该数据在当时的交易时点已经公开披露。例如,2024年一季报的披露截止日是2024年4月30日,但部分公司可能提前到4月15日披露。如果直接用报告期(2024-03-31)作为数据可用日期,就会引入未来数据,导致回测结果虚高。

2.2 数据来源与获取方式:从免费到付费的完整图谱

金融数据的获取渠道决定了数据的格式、质量和更新频率。不同来源的数据在字段命名、缺失值处理、复权方式上存在显著差异,清洗时必须了解数据源头,才能制定合理的清洗规则。

核心原理:数据源的层次结构

金融数据源可以划分为四个层次:① 官方免费源(交易所、统计局、央行),数据权威性最高,但格式原始、接口不友好;② 专业数据服务商(Wind、Choice、iFinD、Bloomberg),数据经过整理和校验,质量高但费用昂贵;③ 开源数据接口(Tushare、AkShare、yfinance),免费或低成本,适合学习和原型验证,但数据质量和稳定性参差不齐;④ 另类数据供应商(舆情、卫星、电商),数据新颖但清洗难度极大。选择数据源时,需要权衡成本、质量、更新频率和获取便利性。

操作流程:从零开始获取一套可用的金融数据

  1. 明确需求:确定你需要的数据类型、时间范围、频率(日线/分钟线)、证券范围(全市场/特定板块)。
  2. 评估数据源:对比免费源和付费源的覆盖度、延迟、字段完整性。例如,日线行情用AkShare免费获取即可,但高频tick数据必须依赖付费源。
  3. 编写获取脚本:使用Python的requests、pandas或专用库(如tushare、akshare)拉取数据,并保存为标准化格式(CSV/Parquet/数据库)。
  4. 记录元数据:保存数据获取时间、源URL、版本号、复权类型等元信息,便于后续追溯。
  5. 建立更新机制:对于日更数据,设置定时任务(如cron或Airflow)自动增量更新。
# 示例:使用AkShare获取A股日线行情(仅演示代码结构)
import akshare as ak
import pandas as pd

# 获取平安银行(000001)的历史日线数据
df = ak.stock_zh_a_hist(symbol="000001", period="daily",
                        start_date="20240101", end_date="20241231",
                        adjust="qfq")  # qfq=前复权
print(df.head())
print(df.columns)
# 输出列名:日期, 股票代码, 开盘, 收盘, 最高, 最低, 成交量, 成交额, 振幅, 涨跌幅, 涨跌额, 换手率
实战要点:免费数据源(如AkShare)的字段命名和单位可能与专业数据源不同。例如,AkShare的成交量单位是“手”(1手=100股),而Wind的成交量单位是“股”。清洗时必须统一单位,否则后续计算市值、换手率时会出错。

案例拆解:从Tushare获取财务数据并处理报告期

假设你需要获取贵州茅台(600519)近5年的财务数据,用于计算ROE。使用Tushare的income和balancesheet接口,但需要注意:Tushare返回的end_date是报告期(如20240331),而ann_date是公告日期。清洗时必须使用ann_date作为数据可用日期,避免未来函数。具体操作:先按ts_code和end_date排序,然后筛选ann_date小于等于回测日期的记录,最后用pivot将宽表转为长表,对齐不同报表的字段。

2.3 数据字段含义:读懂每个字段背后的业务逻辑

字段是数据的“语言”,不理解字段含义,清洗就是盲人摸象。金融数据的字段可以归纳为四类:标识类、数值类、状态类、元数据类。每一类字段都有其特定的清洗规则和注意事项。

核心原理:字段的语义层次

标识类字段(如证券代码、名称、市场)是数据的主键,清洗时需保证唯一性和一致性。例如,A股代码“600519”和“600519.SH”可能同时出现,需要统一格式。数值类字段(如价格、成交量、净利润)是分析的主体,清洗时需关注单位、精度和异常值。状态类字段(如停牌标记、ST标记、上市状态)是数据质量的“开关”,清洗时需根据状态决定是否剔除或填充。元数据字段(如数据来源、更新时间、版本号)是数据治理的基础,清洗时需保留并记录转换逻辑。

字段类别典型字段常见问题清洗策略
标识类证券代码、名称、市场代码格式不统一(600519 vs 600519.SH)统一为带后缀格式,建立映射表
数值类收盘价、成交量、净利润单位不一致(元 vs 万元)、异常跳价统一单位,用涨跌停阈值过滤异常
状态类停牌标记、ST标记停牌期间数据缺失或为0根据状态填充NaN或剔除
元数据数据来源、更新时间多源数据合并时来源混淆增加source列,保留原始数据

判断方法:字段语义的“三查”原则

面对一个陌生字段,按以下顺序排查:一查文档(数据源提供的字段说明);二查样本(随机抽取几条记录,看数值范围是否合理);三查交叉验证(用其他字段或外部数据验证该字段的准确性)。例如,看到“close”字段,先查文档确认是收盘价,再看样本数据是否在合理价格区间(如A股1-1000元),最后用“high”和“low”字段验证“close”是否在两者之间。

案例拆解:一个字段引发的“血案”——复权因子的重要性

某学员从免费接口下载了贵州茅台的日线数据,直接计算过去5年的收益率,发现年化收益率高达45%,远超实际水平。排查后发现:数据源返回的是未复权价格,而贵州茅台在此期间多次分红送股(如10派100元),导致除权缺口。未复权价格在除权日会突然下跌,但这不是真实的亏损。正确的做法是使用前复权或后复权价格。前复权以当前价格为基准,调整历史价格;后复权以历史价格为基准,调整当前价格。对于收益率计算,前复权更直观;对于技术指标(如均线),后复权更准确。清洗时,必须明确记录复权类型,并在不同场景下选择正确的价格序列。

风险提示:不要混用不同复权类型的数据。例如,用前复权价格计算收益率,但用未复权价格计算成交量,会导致量价关系失真。建议在数据清洗阶段就统一复权类型,并在数据表中增加adjust_type字段。

总结复盘:字段清洗的黄金法则

  • 先理解,后清洗:任何字段在动手处理前,必须明确其业务含义和单位。
  • 保留原始数据:清洗后的数据单独存储,原始数据不可覆盖,便于追溯和重新处理。
  • 记录清洗日志:每一步清洗操作(如去重、填充、转换)都要记录在案,形成数据血缘。
  • 验证清洗结果:清洗完成后,用统计摘要(均值、标准差、缺失率)和业务规则(价格>0、成交量>0)双重验证。

金融数据清洗不是简单的“填缺失值、去重复值”,而是建立在对数据类型、来源和字段语义深刻理解之上的系统工程。本章建立的四层数据分类框架、四层数据源图谱和四类字段语义模型,是后续所有清洗操作的理论基石。当你面对一张新的数据表时,先回答三个问题:这是什么类型的数据?它来自哪里?每个字段代表什么?回答清楚这三个问题,清洗方案就已经完成了一半。