
简介本资源是一套覆盖2011—2022年十年跨度的上市公司百度指数面板数据集面向金融学、信息经济学、传播学及数字营销领域的研究者与高年级本科生/研究生用于实证分析企业舆情热度、媒体关注度与股价波动、财务绩效或创新行为之间的关联性。压缩包共4个文件2.69MB含核心数据文件Excel与Stata格式.dta便于多软件兼容处理、数据来源说明HTML文档明确采集逻辑与清洗方法及使用指南PDF含字段释义与常见问题。已有43人学习下载适合开展面板回归、事件研究法或文本热度指标构建等实证任务。数据已结构化整理时间粒度为日度匹配A股上市公司代码与名称可直接导入计量软件进行时序对齐与模型估计显著降低数据获取与预处理门槛。1. 项目背景这一包数据到底能干什么如果你手上刚好拿到一份名为上市公司-百度指数2011-2022年.zip的压缩包大概率你不是在随便整理素材而是正在做与投资者关注度、市场情绪、公司热度或行为金融学相关的实证研究。百度指数这个东西做量化的人叫它注意力代理变量做会计研究的人叫它投资者关注度指标做新闻传播的人可能单纯把它当舆论热度的度量。不管你怎么称呼它这个zip包的核心价值在于它把2011到2022年这12年间中国A股市场上市公司在百度搜索引擎上的搜索行为数据按公司维度做了切分。这12年恰好覆盖了移动互联网从崛起到完全普及的完整周期也覆盖了A股从慢牛、疯牛、股灾、震荡到结构性行情的多个阶段。用这一份数据你可以回答很多有意思的问题上市公司被搜索得多股价是不是真的会涨负面新闻出来之后搜索热度飙升是抄底信号还是逃命信号小公司的搜索量和机构持仓之间有没有关联这篇文章我按实际使用的角度来拆解这份数据——不扯数据抓取的反爬细节也不讲怎么用Python批量合并csv这种过于基础的操作重点放在拿到这份数据之后如何清洗、匹配、应用到实证模型里以及那些文档里永远查不到但实操中一定会踩的坑。无论你是写毕业论文的金融硕士、做学术研究的博士生还是想用注意力因子做增强策略的量化研究员这篇文章应该都能帮你省下一周的摸索时间。2. 核心变量拆解与数据口径2.1 百度指数的指标含义别搞混了百度指数后台最常用的指标是搜索指数它表示关键词在百度网页搜索中被搜索的频次加权值。对于上市公司这个场景最常见的关键词就是公司简称、公司全称或者股票代码。但这里有个关键的细节同样叫搜索指数后台还有搜索指数-整体和搜索指数-移动的区分。整体值等于PC端加移动端的合计2013年以前移动端的数据基本可以忽略不计2015年之后移动端占比快速攀升。如果你做的是2011到2022年的长面板我建议优先使用整体口径因为移动端的单独序列在早期缺失太严重硬拼在一起会人为制造断点。资讯指数和媒体指数是另外两个容易被混淆的指标。资讯指数衡量的是关键词被资讯文章提及后的传播效果本质上反映的是内容分发平台的推荐力度不完全是用户主动搜索行为。媒体指数则是百度新闻收录的标题中包含该关键词的文章数量。做事件研究的时候这三者可以配合起来用搜索指数代表散户的主动关注资讯指数代表信息扩散的覆盖面媒体指数代表传统媒体的报道强度。三者一起放进模型里做稳健性检验比单用搜索指数要扎实得多。2.2 时间粒度的选择要从研究设计倒推很多同学一打开zip包里的csv文件发现每一行是公司代码年月四个指数值就觉得月度数据够用了。月度均值确实是最常见的粒度因为大部分公司财务数据都是季度或年度的匹配起来天然对齐。但你如果做短线异象或者事件窗口分析月度数据完全不够用。搜索热度在事件发生后的衰减非常快公告后一周的热度和一个月均值体现的完全是两回事。我个人的经验是如果zip包里的数据只有月度均值建议先确认一下原始文件名的来源。有些数据商提供的zip包里面实际上是上市公司股票代码日期日度百度指数这样的长表只是文件名起得比较模糊。拆开以后先看列名如果出现2011-01-01这样的日度时间戳那恭喜你你可以做的事情多得多。如果确定只有月度数据那就把研究窗口设定在月频或季频不要强行做日度分析。量纲对不上结果必然是错的。注意拿到zip先不要急着写循环合并第一步永远是打开一个样本文件确认三件事——时间粒度是日还是月、指数口径是整体还是分PC/移动、证券代码格式是不是带交易所后缀。这三件事决定了后续所有处理方向。2.3 文件命名和表格结构的常见形态根据我拆过的类似zip经验上市公司-百度指数2011-2022年.zip内部文件命名通常有几种形态。第一种是按年度拆分比如2011.xlsx、2012.xlsx第二种是按行业板块拆分比如银行.csv、医药.csv第三种是比较理想的情况一个大的csv文件直接包含所有年份全部公司。如果是前两种形态你需要先写一个文件清单来梳理目录再决定是按年度纵向拼接还是按行业横向拼接。若打开表格后看到列为股票代码、股票简称、年份、月份、百度指数-整体、百度指数-移动、资讯指数、媒体指数那这就是最标准的宽表结构后面做面板回归非常顺手。3. 数据清洗与匹配我建议按这个链路走3.1 证券代码的标准化处理这部分看起来基础但80%的匹配错误都出在这里。A股市场上同一家公司在不同数据库里可能显示为000001平安银行、000001.SZ或000001.SZ 平安银行。百度指数数据里如果原始抓取用的是股票简称做关键词那么匹配到上市公司财务数据时需要用证券代码做主键。这里的关键操作是把股票代码统一成6位数字再根据交易所规则补上后缀——以60开头的上交所主板补.SH以00开头的深交所主板补.SZ以30开头的创业板补.SZ以68开头的科创板补.SH。北交所的股票代码是8开头或4开头有些数据库不支持建议先剔除或者单独处理否则后续join的时候会出现大量空值。另一个常被忽视的坑是股票简称变更。2011到2022年之间很多公司改过名有些一年内改两次都不奇怪。如果原始数据是以股票简称这个字段存的你在不同年份的文件里看到同一家公司显示为海康威视和海康威视这种完全一样的倒还好但神州信息改成神州数码、乐视网变成乐视退这类变更会直接导致匹配断裂。处理方式是先用上市公司证券代码映射表把简称统一替换掉而不是依赖简称本身去做关联。我自己常用的做法是先从CSMAR或Wind导出一份包含证券代码-证券简称-变更日期的参考表再用代码做主键做一次lookup把规范简称回填到百度指数数据里这样即使原数据里只有简称也能通过多期映射恢复身份。3.2 缺失值和零值怎么区分百度指数数据最大的特点是搜索量少的长期停牌股或冷门股会有大量缺失。这里必须搞清楚一个概念缺失不是零零也不是缺失。在百度指数数据中如果某只股票在某个月根本没有人搜通常不会显示为0而是直接没有这条记录这是爬虫抓取时由接口返回空值导致的现象。而某些情况下你可能会看到数值为0这往往是因为关键词设置太具体导致搜索量被系统隐私保护规则抹掉了比如搜索量低于某个阈值就会被记作0。所以清洗时不能简单地把NA填成0也不能把所有0都当成真实零搜索量。建议先做分年份统计缺失率如果某一年超过30%的个股没有数据这一年的样本量就要警惕是否受到接口限制的影响最好在回归中对该年份单独加虚拟变量做稳健性检验。另一个需要注意的场景是新股与次新股。公司上市之前的年份里它没有证券代码也没有百度搜索热度这是系统性的前置缺失。处理办法是保留这些行但不填充数值后续做面板分析时让非平衡面板自然处理不要让Stata或pandas强行把缺失值补齐。金融研究里有个隐蔽的坑很多merge操作会把没有数据和数据缺失当成一回事结果导致买入信号被误判为搜索热度为0。实际上新股上市前没有数据是物理上不存在和新股上市但没人搜索完全不一样这决定了你的事件研究窗口到底是写上市前无数据还是上市后低关注。3.3 面板数据对齐操作的完整案例假设你已经把所有csv文件读进了内存代码结构大致长这样import pandas as pd files [2011.csv, 2012.csv, ..., 2022.csv] df_list [] for f in files: tmp pd.read_csv(f, encodinggbk) # 百度指数的导出文件经常是gbk编码 df_list.append(tmp) df pd.concat(df_list, ignore_indexTrue) # 统一证券代码格式 df[code6] df[股票代码].astype(str).str.zfill(6) df[exchange] df[code6].str[:2].map( lambda x: SH if x.startswith((60, 68)) else SZ ) df[symbol] df[code6] . df[exchange] # 构造年月字段 df[yearmonth] df[年份].astype(str) - df[月份].astype(str).str.zfill(2) # 透视成面板宽表 pivot df.pivot_table( index[symbol, yearmonth], values[百度指数-整体, 百度指数-移动], aggfuncmean ) pivot.to_csv(baidu_index_panel.csv, encodingutf-8-sig)这里有个细节读取csv时如果直接指定utf-8经常报错因为很多百度指数导出的文件是GBK或GB2312编码。建议直接用encodinggbk读不了再换gb18030它兼容GBK且能处理生僻字。如果打开文件看到乱码或者第一个字段名是锟斤拷这种经典乱码不用怀疑就是编码问题。合并完成之后强烈建议做一个重复值检查还是那句话df.duplicated(subset[symbol, yearmonth]).sum()因为多个来源的文件拼接时经常会出现同一家公司同一个月出现两次的情况一旦有重复后面所有聚合值都会偏高。4. 应用场景从数据能跑到结论能打4.1 投资者关注度与股票收益的实证设计用百度指数做投资者关注度的代理变量是行为金融学领域很成熟的做法。最经典的设定是把个股月度的百度搜索量增长率作为解释变量把同期的股票月度收益率或被关注度溢价作为被解释变量控制市值、账面市值比、换手率、机构持股比例等常规因子之后观察系数的符号和显著性。逻辑基础在于搜索行为反映了散户的关注程度关注度的提升会推动股票被买入在短期内产生价格压力从而带来正收益。这里有个操作细节值得注意——搜索量的绝对值和增长率要做区分。用绝对值做解释变量本质上衡量的是股票的规模效应大公司搜索量天然高用环比增长率做解释变量捕捉的才是关注度的变化。实证中建议两个都做用增长率做基准回归用绝对值做稳健性检验很多审稿人关心这一点。4.2 情绪冲击与事件研究法的结合另一个高频场景是事件研究法。假设你想研究交易所问询函、业绩预告暴雷或股权质押公告发布后市场关注度变化对超额收益的影响。这时你可以把百度指数作为信息扩散速度的代理变量——事件发生当周的搜索指数激增幅度越高说明信息传播越快股价反应也会更剧烈。一个可以落地的做法是把事件日设为公告日T取[T-30, T30]的日度搜索量数据计算出事件期的累积异常搜索量Cumulative Abnormal Search Volume, CASV然后按CASV的高低分组成对照组和实验组比较两组之间的累计异常收益CAR差异。这个设计比你单纯做市场调整模型更能识别出信息关注度这个渠道的独立作用。在这个场景中数据的日度粒度就变得至关重要了。如果你手里只有月度均值事件窗口的分析精度会受到很大影响。月度均值会平滑掉事件冲击的日内峰值导致你观察到的事件后热度上升看起来像是一个缓慢抬升的斜坡而不是一个尖锐的尖峰。实操中我的建议是如果zip包里没有日度数据应对办法是用事件当月搜索量/过去三个月均值搜索量构造一个相对关注度指标虽然时间精度差一些但至少能捕捉到异于常态的关注度异常。4.3 多因子模型里的注意力因子构建量化方向的朋友可能更关心怎么把这个数据用进因子模型。可以构建一个注意力因子每月底按个股过去20个交易日的百度搜索量增量排序做多高注意力组、做空低注意力组观察这个多空组合的收益表现。学术文献里有个成熟的发现是高注意力股票往往短期内跑赢、长期跑输因为散户的过度关注会推动价格短暂高于内在价值随后发生反转。基于这个原理你可以把它做成一个反转因子或者风险提示因子放进Barra风格的多因子模型里做正交化处理。具体到操作层面因为原始的百度指数数据很多是按自然月统计的直接生成日频因子会面临频率不匹配的问题。可行的折中方案是按月换仓每月末用当月搜索量相对前三个月的均值增幅做因子值次月持有看看组合的超额收益和夏普比率是否显著。4.4 公司基本面分析与信息不对称研究除了资产定价视角百度指数还可以用于公司金融领域的交叉验证。比如研究分析师覆盖度与信息不对称的关系时可以把百度指数当作散户获取信息的渠道来补充CFO问卷调查的不足。分析师覆盖度高但百度搜索量低的公司可能说明机构投资者关注和信息传播之间存在断层这种公司的信息不对称程度可能更高买卖价差也更大。这类研究需要把百度指数数据和控制变量对齐到公司-年度层面然后再结合盈余预告的市场反应做回归。这里有个实操经验在直接使用互联网搜索数据时建议在稳健性检验中剔除金融类上市公司因为银行、保险等金融企业的搜索量受到行业政策影响较大不确定性强且金融企业的财务指标口径和其他行业差异明显混合在一起容易遮蔽真正的因果关系。5. 常见问题速查踩过的坑都在这里5.1 数据文件打不开或乱码怎么办百度指数相关的zip文件里Excel格式和csv格式混用的情况非常常见。如果打开csv文件是乱码首先考虑编码问题在Excel里用数据-自文本方式导入选择编码为简体中文GBK一般能解决问题。如果是Python读取用pd.read_csv(path, encodinggbk)。如果还是乱码再考虑文件本身是不是用UTF-8-BOM编码写的这种情况下读的时候加utf-8-sig试试。还有一种可能文件扩展名是.csv但实际内容是用tab分隔的文本这时候需要换sep\t。这类问题没有统一解法最稳妥的做法是先用文本编辑器打开原始文件肉眼确认分隔符、编码、表头结构再动手写代码。5.2 数据量级异常指数值动辄几十万正常吗百度指数本身是一个加权值不是精确的搜索次数所以数值非常大是正常的。个别热门股票或者处于风口浪尖的股票日搜索指数破十万并不稀奇。但如果你发现某只股票某个月的搜索指数超过千万级别这就已经不正常了大概率是因为关键词设置有问题。比如你用的关键词是比亚迪那搜索结果里可能混入大量关于比亚迪其他业务、品牌活动甚至竞争对手的讨论。百度指数做关键词匹配时不会做精确的公司与关键词的一一对应它只认字符串。因此研究中的关键词应以股票简称公司全称两个候选词分别跑一遍然后取相关度更高的一组。实操中有的学者还会用证券简称和证券代码做交叉验证例如搜索000001的用户大概率是在关注平安银行而不是招商银行它的代码是600036。这是一个很实用的降噪技巧。5.3 面板回归时遇到非平衡面板怎么处理很多同学把百度指数数据merge到公司财务数据之后发现样本量缩水了一大截第一反应是数据质量不行。实际情况往往是两个数据源的覆盖时间不一致造成的。上市公司财务数据一般是从上市年份开始的百度指数数据则统一从2011年开始。如果研究区间是2011到2022年2011年之前上市的公司两边都能覆盖到但2015年之后上市的新股在2011到2015年这段时间的百度指数本身就是缺失的merge之后自然会出现大量NaN。这是正常的非平衡面板结构不需要强行填充。固定效应模型和随机效应模型都能处理非平衡面板不过在运行xtreg之前建议用xtset symbol yearmonth设定面板结构否则有些命令会默认按平衡面板处理而报错。另外要注意如果某家公司只有一期的数据在长差分模型里它无法提供识别信息这类样本可以直接去除。5.4 被解释变量是收益率解释变量是搜索量滞后阶怎么选这个问题在学术答辩里几乎必被问到。百度指数和股票收益之间可能存在双向因果关系——搜索热度推动交易交易行为本身又会带来更多讨论和搜索。为了缓解这种内生性主流做法是使用滞后一期的搜索量做解释变量。在月度面板里用t-1月的搜索量解释t月的收益这样一来因果关系在时间上有了先后顺序说服力强得多。如果你用的是日度数据可以考虑在回归中加入同时期的市场收益率做控制或者使用工具变量法。工具变量的选择可以参考地理邻近性——比如公司注册地所在省份的互联网用户渗透率就具备一定的外生性因为整体互联网渗透率影响搜索行为但不直接决定个股收益率。这种设计在顶刊文献里出现过步骤比较繁琐但结论的稳健性会比普通回归好很多。5.5 数据只到2022年做不了2023年以后的分析怎么办如果你现在才开始收集数据发现百度指数的公开接口获取难度越来越大而手上的zip只到2022年那说明你拿到的应该是个人数据商整理的版本。公开可查的完整版百度指数需要用指数平台账号登录后才能获取而且单次导出有数量限制个人爬取的成本很高。我见过不少研究者的做法是用2011-2022年这段历史数据做训练集再用2023-2024年的手工抽样数据做外样本验证或者改用其他公开数据如360趋势或微信指数做替代性验证。如果你需要把时间延伸到未来建议养成定期增量备份的习惯每个季度手动导出一次保留原始接口返回的JSON长期下来才是真正可持续的方案。6. 做项目时我的几个独门心得这份数据真正用起来我最大的感受是百度指数数据不是标准化的金融数据它离实证分析之间隔着一层语义理解的鸿沟。同样是搜索量上升对茅台和对于一家ST公司来说背后的投资者结构完全不同。所以在做大规模面板回归时一定要在样本筛选阶段就对行业属性和市值规模做分层处理而不是抱着总样本回归控制变量的思路一杆子打到底。再一个心得是数据中的热门公司往往只有一小部分真正的样本分布是高度右偏的。如果你做分位数回归可能会发现高关注度组的搜索量对收益的边际影响和低关注度组完全相反。这种异质性恰恰是最值得写到论文里的发现。但很多同学一上来就做均值回归结果被大量零关注度的冷门股稀释了信号最后得出结论说百度指数对收益没有解释力——这其实是对数据的浪费。最后建议你拿到zip之后先不要追求分析的花哨务必先做一套完整的描述性统计每年有多少公司有有效的百度指数记录、月度搜索指数的均值和中位数走势、行业维度的覆盖度差异。这套统计既能帮你快速判断数据的可靠程度又能作为论文里的Table 1展示。如果连基本样本量都有巨大波动那后面所有复杂的计量模型都是白搭。说白了做实证研究数据进去了是苦劳数据能讲出故事才是功劳。本文还有配套的精品资源点击获取