如何徒手写一个申万行业分类数据
申万行业分类作为国内比较权威的A股分类标准,对于研究股票具有重要的参考价值。我们观察到,目前市面上(至少免费层面)没有一个相对完善、完整的历史数据与每日更新数据。
-
号称国内数据之王的万得,一方面对于用户提取的数据量有严格的限制,这导致我们在复原历史数据的过程经常会触发阈值;另一方面,我们发现万得会确实部分数据,以及存在臭名昭著的脏数据问题。比如,万得由于授权原因,无法提供上交所科创板股票的申万行业分类数据;再比如,这个票
000008.SZ
,我们通过申万网站查询该票的历史变更情况:可以查询到该票其实应该数据
机械设备
,相应的申万行业代码为801890.SI
,但是万得竟然标注为801050.SI
。而根据《申万行业分类2014标准》这个代码对应的行业是
有色金属
,简单查询这个股票即可以这个完全没有涉及金属业务,明显存在数据错误。 -
我们之前依赖一个 HF 的
stock.industry
数据库,后面发现这个也是完全瞎扯,他们直接利用现在的行业代码去更新历史的数据,没有考虑这个票在历史可能存在的主营业务发生变化、或者产生了重组,申万会相应的调整行业分类。
如何找思路
最简单的思路是:去申万官网查看是否提供历史数据。不过很遗憾,这个数据其实算收费项目,对方并不提供历史的行业分类数据。
技多不压身
凡事难不倒一个会爬虫的开发,我查看发现申万网站提供了股票历史的分类记录,可以通过该记录条款,逐一地把历史的分类数据还原。
下载得到的数据是这样的:
犹抱琵琶半遮面
查看上面的数据,我们发现申万只提供了内部的行业代码(如 000001.SZ
最近的行业代码是 480301
,这个表示:
- 一级行业分类是
银行
- 二级行业分类是
股份制银行II
- 三级行业分类是
股份制银行III
现在有点麻烦的是,研究员希望我们提供对应的申万指数代码
,即我们经常看到的 801780.SI
(一级行业代码)。
目前的情况是,我们已经得到申万内部的一个行业代码,需要将其映射到外部常用的申万指数代码
。这个肯定需要从其他地方获取相关的信息。
柳暗花明又一村
这时候需要用梯子查找信息了。经过一番摸鱼后,发现几个宝贝玩意:
- 申万分别在 2011、2014、2021 发现了三份研究报告,介绍了申万行业指数的编制规则与调整说明
- 其中 2011、2014 的两份报告中,有明确说明内部行业代码与对应的指数代码,我们可以利用这个信息做一个映射
- 而在 2021 的这份数据,则没有对照表,我发现聚宽提供了一份行业名称与指数代码的对照表,那么我们可以通过名称找到对应的指数代码
目前看,食材都已就绪。