投资数据采集与清洗:数据源分类、爬虫伦理与合规、数据清洗流程、缺失值处理

大家好,我是你们的老朋友。今天咱们聊聊投资分析里最基础、也最磨人的一环——数据采集与清洗。

说实话,我见过太多人一上来就搞什么深度学习、量化模型,结果数据源都没搞清楚,最后模型跑出来的结果,连自己都不敢信。嗯,这活儿看着不起眼,但做不好,后面全是白搭。

数据源分类:财报、新闻、行情

投资数据,说白了就三大类。我习惯把它们比作「体检报告」、「朋友圈」和「心电图」。

  • 财报数据:这是最「硬」的数据。营收、利润、现金流,都是上市公司自己报的,有审计背书。我个人习惯用 pandas-datareader 或者直接去巨潮资讯网扒。注意,A股财报有季报、中报、年报,时间节点不一样,千万别搞混了。
  • 新闻数据:这玩意儿最「软」。利好利空、政策解读、行业八卦,全在里面。我曾在项目里用爬虫抓了某财经网站一个月的新闻,结果发现一半是标题党。所以,新闻数据一定要做情感分析,不然就是噪音。
  • 行情数据:这是「实时」的。开盘价、收盘价、成交量、换手率。你想想看,做量化交易,缺了这个就等于瞎子摸象。我一般用 Tushare 或者 AKShare 来拿,免费且稳定。

核心观点:三类数据各有各的脾气。财报看「质」,新闻看「势」,行情看「量」。缺一不可。

爬虫伦理与合规:别踩红线

做数据采集,最怕的不是技术问题,而是法律问题。我曾经有个朋友,为了做量化策略,把某交易所的实时行情全爬下来了,结果被人家法务找上门……嗯,那滋味不好受。

这里我给大家几个避坑指南:

  • 遵守 robots.txt:这是最基本的礼貌。网站说不能爬,你就别硬来。
  • 控制请求频率:别把人家服务器搞崩了。我一般设置 1-2 秒的延迟,加个随机 sleep。
  • 不要爬取个人隐私数据:比如股民的个人信息、交易记录。这玩意儿碰了就是刑事犯罪。
  • 注意版权:有些新闻网站的数据是有版权的,你拿来商用,小心吃官司。

警告:我曾经见过有人为了省事,直接爬了某付费数据平台的接口。结果被对方反爬机制锁了 IP,还发了律师函。记住,免费的才是最贵的。

数据清洗流程:从脏数据到干净数据

数据拿到手,你以为就能用了?太天真了。我做过一个统计,从网上直接扒下来的数据,平均有 20% 是脏的。缺失、重复、异常、格式不统一……什么妖魔鬼怪都有。

我的清洗流程一般是这样的:

  1. 去重:同一只股票,同一天的数据,出现了两次?删掉一个。
  2. 格式统一:日期格式有的是 2024-01-01,有的是 2024/01/01,全部转成标准格式。
  3. 异常值检测:比如某只股票收盘价突然变成 0 元,或者市盈率变成负数。这种明显是错的,要么删掉,要么标记。
  4. 缺失值处理:这个单独讲,下面细说。

这里我贴一段我常用的清洗代码,供大家参考:

import pandas as pd

# 假设 df 是原始数据
df = df.drop_duplicates()  # 去重
df['date'] = pd.to_datetime(df['date'])  # 统一日期格式
df = df[(df['close'] > 0) & (df['pe'] > 0)]  # 过滤异常值

小技巧:清洗数据时,我习惯每做一步就打印一下数据形状。比如 print(df.shape),这样能清楚看到每一步删掉了多少数据,心里有数。

缺失值处理:别让「空」毁了你的模型

缺失值,说白了就是数据里出现了「空」。为什么会这样?可能是数据源没更新,可能是网络传输丢包,也可能是股票停牌了。

处理缺失值,我常用的方法有四种:

方法 适用场景 缺点
直接删除 缺失比例很小(<5%) 会损失样本量
均值/中位数填充 数值型数据,分布较均匀 会降低数据方差
前向/后向填充 时间序列数据(如股价) 可能引入滞后偏差
插值法 数据有趋势或季节性 计算量较大

我个人最常用的是前向填充。你想想看,股票今天停牌了,明天复牌,用今天的收盘价填充昨天的,逻辑上说得通。但如果是财报数据,我建议用均值填充,因为财报没有「连续性」这一说。

避坑指南:我曾经在做一个回测模型时,用了均值填充来处理缺失的成交量数据。结果模型跑出来,收益曲线漂亮得不像话。后来一查,原来是填充后的数据把波动抹平了,导致模型「过度乐观」。所以,缺失值处理一定要结合业务逻辑,别瞎填。

知识体系总览

下面这张图,是我自己总结的数据采集与清洗的完整流程。你可以把它当成一张「地图」,做项目时对照着来,基本不会出错。

投资数据采集与清洗流程 数据源 财报 · 新闻 · 行情 爬虫合规 伦理 · 法律 · 频率控制 数据清洗 去重 · 格式统一 · 异常过滤 缺失值处理 删除 · 填充 · 插值 干净数据 可用于建模与分析 数据采集阶段 数据清洗阶段 数据可用阶段

好了,这一章的内容就到这里。数据采集与清洗,说白了就是「磨刀不误砍柴工」。你花 80% 的时间把数据搞干净,后面 20% 的时间建模,结果反而更好。别问我怎么知道的,都是血泪教训。

专注资料整理