ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

沪市IPO发行文件数据集:从PDF到可计算文本的实证研究指南

沪市IPO发行文件数据集:从PDF到可计算文本的实证研究指南 做金融实证研究的朋友多少都有过这样的经历想研究沪市IPO公司上市前后的行为第一反应就是去翻招股说明书、发行公告这些原始文件结果发现要么散落在交易所官网的角落里要么PDF动辄几百上千页下载、解析、清洗下来人已经麻了。数据平台倒是不少但很多是二次加工过的结构化数据看不出原始披露的细节真要做文本分析或者手工核对还是得回到发行文件本身。CnOpenData这套“沪市IPO发行文件-A来源”数据集解决的正是这个问题——把上交所历史上IPO项目的核心发行文件批量整理好按统一规范命名归集用户拿到的就是一套可以直接做研究的文件库。这篇文章主要面向三类人一是做公司金融、IPO定价、信息披露方向的研究生和学者需要大规模文件样本来做内容分析二是券商投行、研究所里做底稿核查或项目复盘的在职人员三是刚接触金融数据、想搞清楚“发行文件到底有哪些、去哪儿找、怎么用”的入门者。下面我就从数据集的构成、应用场景、字段逻辑到实际使用中的下载、解析、清洗流程完整拆一遍最后把我在实操中踩过的坑也一并列出来。1. 先搞清楚“A来源”到底是什么数据集的构成与边界很多人在打开这个数据集第一眼时会有点懵因为CnOpenData旗下有多个IPO相关库什么“A来源”“B来源”“C来源”看着像暗号。其实这对应的是数据采集的不同渠道或不同批次虽然底层都是发行文件但覆盖范围、字段质量和更新频率会有差别。以“沪市IPO发行文件-A来源”为例它聚焦的是在上海证券交易所挂牌的IPO项目文件类型覆盖从受理、问询、注册到发行上市整个链条中的关键披露文档。1.1 从名字拆起沪市、IPO、发行文件、A来源分别意味着什么先说“沪市”这个边界很重要。A股有两个交易所上交所和深交所它们的IPO流程、文件命名规则、披露平台不完全一样。上交所的IPO项目包括主板和科创板科创板注册制下的文件体系和传统核准制时期又有差异。这个数据集锁定沪市意味着你不用自己在两个交易所之间来回切换比对目录结构就是按上交所逻辑组织的。“IPO发行文件”是数据集的灵魂。它不是指上市后的定期报告而是企业在首次公开发行过程中对外披露的那些关键材料包括但不限于招股说明书申报稿和注册稿、发行公告、上市公告书、发行保荐书、法律意见书、审计报告、发行人章程、募集资金使用管理办法等。这些文件加起来基本构成了监管审核和投资者决策所依赖的全部书面信息。至于“A来源”我实测下来可以理解为这个平台的第一批整理版本时间跨度相对较长覆盖的主板存量项目比较全。如果你只需要做上交所主板的历史研究A来源基本够用如果要做科创板刚开板那几年的增量数据可以去看看后续的B或C来源。1.2 文件清单与实际内容下载之前先建立预期在真正下单下载之前我建议你先打开文件目录对照一下里面的文件名列表确认它覆盖了哪些文件类型。从我拿到的文件夹结构来看每个IPO项目对应一个独立文件夹里面按文件类别又拆了子目录典型结构大概是招股说明书包含申报稿、注册稿、最终发行版个别项目还有补充披露发行公告包括发行安排及初步询价公告、网上路演公告、定价公告、发行结果公告上市公告书上市首日披露的完整版本中介机构文件保荐机构出具的发行保荐书、上市保荐书律所出具的法律意见书会计师事务所出具的审计报告及内部控制鉴证报告发行人基础文件公司章程、营业执照、董事会决议、募集资金管理办法等这里要提醒一句不同年份的项目文件完整度会不一样。2010年前的旧项目有些文件比如内控鉴证报告在当时就不是强制披露项所以找不到是正常的不是你下载出了问题。2. 这些文件能用来做什么研究场景与价值空间拿到文件库之后最关键的问题是我到底能拿它做什么我见过不少用户数据下了一大堆结果只是打开几个PDF看了看就放那儿了。说实话挺可惜的。这批发行文件的价值不在于单篇阅读而在于可以规模化地提取信息、构建变量、做跨样本对比。2.1 实证研究的经典选题从定价效率到信息披露质量发行文件是IPO研究的“原料矿”。举几个我见过的高频用法新股定价效率研究。招股说明书和发行公告里包含发行价格、发行市盈率、募资规模、询价区间、超额认购倍数等关键数据把这些变量横向拉出来可以检验注册制改革前后定价效率的变化。实际操作中很多人不是从发行公告里手工抓数字的而是把这些PDF批量解析后用正则表达式或者关键词定位去提取。信息披露质量研究。招股说明书正文长度、风险因素章节的篇幅、管理层讨论与分析MDA里的可读性指标都是可以量化的。有人用文本相似度算法测量招股书与同行业可比公司之间的模板化程度有人用负面词词典统计风险披露的语调这些都依赖原始文本结构化数据库做不到。中介机构行为研究。发行保荐书、律师工作报告里详细记录了中介机构的核查过程、核查意见和承诺事项。如果把保荐机构、会计师事务所、律师事务所的名称和签字人员提取出来可以构建中介机构声誉、执业质量、市场份额这些变量研究它们与发行定价、上市后表现之间的关系。公司治理与募集资金投向分析。发行人的公司章程、募集资金管理办法、募投项目可行性研究报告反映了企业在上市前的治理结构和战略规划做上市后行为与上市前承诺的偏差分析时这些文件是基线参照。2.2 把几百页PDF变成可计算的数据数据集的深层价值有朋友问我这些文件在交易所官网也能免费下载为什么还要用别人整理好的数据这个问题问到点子上了。官网能下载是事实但如果你需要的是几百家甚至上千家公司的发行文件还要求统一命名、统一目录、批量获取官网挨个找就不现实了。一是上交所官网的披露页面分页加载翻页和筛选很耗时二是文件命名规则在不同年份并不统一有些还是乱码或者简写三是反爬机制和访问频率限制会打断你的批量下载。CnOpenData这类数据集本质上做的是把“免费但零散”的公开信息变成了“可直接使用”的研究资产。你节约的是整理和排查的时间以及可能漏文件的焦虑。尤其对于非计算机背景的研究者让一个经济学研究生去写爬虫抓上交所历史文件说实话门槛有点高而且就算抓到了存储结构、命名规范、去重逻辑都是新的坑。数据集帮你把这些坑先填平了。3. 数据表结构拆解与常用字段CnOpenData的发行文件数据集除了一堆PDF之外通常还会附带一个索引表。这个表是整个数据集的“地图”没有它几百个文件夹摆在那儿你根本不知道从哪下手。我从实际使用的角度把这个索引表的字段逻辑拆一下。3.1 索引表的核心字段文件与公司如何关联索引表一般是CSV或Excel格式我拿到的版本包含以下核心字段字段名字段含义使用提示证券代码上市公司6位代码主键之一匹配CSMAR或Wind的代码格式证券简称上市时的简称注意与当前简称不同别用最新简称去匹配上市日期正式挂牌日期做事件研究的时间锚点文件类型PDF对应的类别建议统一转成英文标签文件名原始PDF文件名解析时依赖这个字段做唯一标识文件路径相对路径或URL批量读取时拼接根目录披露日期文件的披露时间做时间窗口过滤时很关键这里有一个容易踩坑的地方一个IPO项目可能对应几十份文件索引表里也会重复出现多次所以它不是一份“公司-公司”的一一对应表而是“公司-文件”的长表。你要做公司层面的数据分析时记得先用证券代码去重要做文本分析时又要把同一公司的不同文件类型区分开按文件类型分别建模。3.2 与外部数据匹配的常见方式很多人拿到这套发行文件后下一步就是跟CSMAR、Wind的数据做匹配。我的建议是统一用证券代码和上市日期两个字段做复合关联不要只用简称。A股简称变更很频繁尤其2015年之后各种改名一个简单的“*ST”“科技”“控股”后缀就会让你匹配出很多错误。披露日期也要注意。发行公告的披露日期和上市日期之间通常有几天的时间差做事件研究时要明确你的事件日选的是哪个。比如你研究“上市首日收益率异象”T日是上市日期研究“询价区间调整的影响”T日是定价公告披露日期。索引表里两类日期都有只是你得看清楚字段名别一上来就默认是同一个。4. 实操指南从下载到建库的完整流程这一块是重点。很多人花了不少成本拿到数据结果在下载、打开、解析这些“体力活”上耽误了大量时间。以下是我反复验证过的工作流照着做能省下不少精力。4.1 下载前的准备工作别急着把网盘整个拉下来我建议不要一上来就“全选下载”。这个数据集整个体积可能几十个GB很多文件的格式还是图片型PDF占用空间大且后续解析麻烦。我先说正确顺序第一步先下载索引表也就是那个“文件地图”。用Excel或Python打开先搞清楚总共有多少家公司、多少份文件、覆盖哪几年。这时候可以验证一下数据集的覆盖范围是否匹配你的研究窗口。如果你的样本期是2005年到2010年下载下来发现数据集只覆盖2010年之后那就不用往下走了。第二步根据索引表筛选出你真正需要的子集。比如你只研究招股说明书那就在文件类型一列筛掉其他类型。研究券商行为就重点关注发行保荐书和上市保荐书。这样下载量可能从几十GB降到几个GB后续处理压力小得多。第三步下载时做好断点续传和完整性校验。大文件的下载工具建议支持断点续传不然网络一抖就得重来。文件下载完成后对照索引表里的文件大小字段抽查几个如果大小对不上说明下载不完整重新拉一遍不然解析时会报错。4.2 文件解析与文本提取从PDF到可分析文本下载完成后的第一道工序就是把PDF转成文本。这里我强烈建议区分两种PDF文本型PDF和扫描型PDF。文本型PDF直接复制就能出文字扫描型PDF是图片必须走OCR。判断方法很简单用PDF阅读器打开如果可以直接选中文字就是文本型选中不了就是扫描型。第二步批量转文本。常用的工具有几个命令行工具如pdftotextpoppler-utilsPython库如PyPDF2、pdfplumber、fitPyMuPDF。实测下来pdfplumber在处理带表格的页面时表现更好比如发行公告里的询价区间表PyMuPDF在大文件批量处理时速度更快。我这里给一个最简单的pdftotext批处理示例for file in ./IPO_files/*.pdf; do pdftotext -layout $file ${file%.pdf}.txt done那-layout参数是为了尽量保留原PDF的排版结构比如多栏文本、表格边框如果不加这个参数文本流可能会乱掉后续正则匹配难度大增。第三步对扫描型PDF做OCR识别。我实测下来Tesseract的中文识别效果基本能用但对复杂表格和带水印图章的页面会有些吃力。如果是招股说明书的封面页、签字页识别率低是正常的那些页面人工核对一下就好正文部分识别率普遍在90%以上不影响词频统计和文本相似度分析。4.3 目录结构与命名规范建一个能复用的研究库解析出的文本如果不建立统一命名规则后续检索就是灾难。我的习惯是每个公司一个文件夹命名格式是“证券代码_证券简称”里面再按文件类型分子目录最终文本文件名带上披露日期600000_浦发银行/ ├── 招股说明书/ │ ├── 19990901_招股说明书.txt │ └── 19990901_招股说明书_OCR修正版.txt ├── 发行公告/ │ ├── 19990820_发行公告.txt │ └── ... └── 上市公告书/ └── 19991001_上市公告书.txt这样做的好处是你后续跑Python分析的时候只要读文件名就能获取公司、文件类型、披露日期三个关键信息不用每次都去翻索引表。我在实际项目中直接用os.walk遍历目录就能把整个语料库加载成DataFrame效率很高。5. 常见问题与避坑经验这部分内容是我在几次实操中真金白银换来的教训尤其适合第一次接触发行文件数据集的人。5.1 索引表与PDF对不上怎么办我有一个相当惨痛的经历第一次用同类数据集时没有仔细核对索引表和实际文件就跑了文本分析结果一个公司文件夹里只放了一份发行公告而我以为它有完整的招股说明书。原因在于部分文件的索引条目指向的URL可能失效或者某些文件在整理时没有归入对应文件夹。拿到数据后第一件事一定是抽样核对随机选5家公司打开文件夹对照索引表逐项检查确保文件类型和数量都能对上。如果发现缺文件优先检查是不是补录批次没有合并进主目录。5.2 解析乱码编码和老旧扫描件的问题我最常遇到的坑在文本编码。Windows下直接用记事本打开的txt很可能是GBK编码Python默认UTF-8读取会直接报错。解决方式很粗暴读取时统一尝试几种编码def read_text_auto(path): for enc in [utf-8, gbk, gb18030, big5]: try: with open(path, r, encodingenc) as f: return f.read() except UnicodeDecodeError: continue return None另外一个常见问题是老招股书的扫描分辨率不够OCR出来的结果全是乱码。这种文件建议先做图像预处理比如转灰度、增强对比度再扔给OCR引擎识别率能提升不少。实测下来用OpenCV做一下自适应阈值处理Tesseract的中文识别率能从不到80%提升到90%以上。5.3 时间字段的错误理解不少人在做事件研究时把“上市日期”当成所有文件的披露日期结果招股说明书看起来像是上市当天才披露的。实际上招股说明书申报稿的披露时间比发行日期早几个月甚至一年注册稿的披露时间也早于上市日期。时间锚点不对后面一切窗口计算都会偏。我建议在构建时间变量时统一以索引表里的“披露日期”字段为准不要自行推断。5.4 批量下载被限速本地网络环境的影响如果数据平台是网盘形式分发批量下载时容易被限速。我的建议是分时段下载大文件安排在凌晨或者工作日上午避开晚高峰。如果支持压缩包分批下载那就按年份把文件拆成几个小压缩包分别下载后本地合并。这样即便中途断了也不会影响已经完成的部分。5.5 后续扩展思路我实际使用这套数据时还有一个体会它与其他公开数据源组合起来能产生更好的效果。比如用发行文件里的募集资金用途文本结合CSMAR里的公司财务数据做成“募资承诺偏差”研究或者用文件里的股东信息去匹配上市公司控制权结构数据库。数据本身是静态的怎么用出动态价值取决于你的研究设计。最后分享一个我自己的操作习惯处理这套文档型数据时始终保持“索引表优先”的意识——先看索引再看文件先验证再分析先小样本抽检再全样本跑批。手里有几百家公司文件的时候宁可多花半小时做核对也别在分析中途发现数据缺失再回头补那才真叫欲哭无泪。
返回列表