面板数据清洗与实证应用指南)
简介面向金融研究者与政策制定者的省级数字普惠金融指数数据包覆盖2011—2023年我国各省份数字普惠金融发展水平可用于区域对比、趋势分析、政策效果评估及普惠金融与经济增长关联性研究。压缩包内含3个文件以Excel数据表为主体辅以HTML数据来源说明和PDF辅助文档整体仅113KB轻量易用。指数综合考量金融产品与服务多样性、可获得性、使用便捷度等多维度指标能帮助用户观察数字支付、互联网金融服务在省级层面的覆盖与渗透并进一步探讨其对小微企业融资、居民增收、风险管理及监管完善的实际影响。时间跨度长达13年既支持长期时间序列分析也能识别周期性、季节性特征及省份间梯度差异便于开展面板数据回归和可视化制图。目前已有84人学习使用可作为快速获取中国省级数字普惠金融面板数据、推进实证研究的高性价比基础材料。1. 省级数字普惠金融指数2011-2023年13年省级面板数据的正确打开方式做区域金融实证研究的人多半经历过“数据找得到但用不起来”的困境。这份省级-数字普惠金融指数2011-2023年zip包装的是北京大学数字金融研究中心发布的数字普惠金融指数省级数据31个省份、连续13年Excel表格开箱即读。它解决的核心问题是让“数字金融发展水平”这一抽象概念变成一组可计算、可比较、可进回归的指标覆盖广度、使用深度、数字化程度以及总指数。无论你是做面板回归、政策效应评估还是区域差异分析这份数据都能直接当核心变量用。解压前先说一个高频问题如果报error read zip archive先怀疑下载不完整用7-Zip打开验证再决定是否重新下载。2. 指数构建逻辑与数据字典先看懂指标体系再上手跑数2.1 三层指标体系总指数背后是权重合成北京大学数字普惠金融指数PKU-DFIIC不是把某个单一的金融统计指标直接拿来用而是按“总指数—一级维度—二级指标”三层结构加权合成。第一层是总指数第二层是覆盖广度、使用深度、数字化程度三个一级维度第三层继续下钻到具体业务指标。覆盖广度反映数字账户在人群中的渗透水平典型指标包括每万人拥有支付宝账号数、绑卡用户比例等使用深度刻画实际使用金融服务的强度包括支付金额、信贷笔数、保险、投资、信用等业务的渗透情况数字化程度则聚焦移动化、便利化、信用化、实惠化等特征。细分指标合计有30多个数据包里给出的省级结果已经是合成后的指数值。指数合成的核心路径是先对原始业务指标做无量纲化处理把金额、笔数、人数等不同量纲的原始数据压到可比区间再用层次分析法确定各层级权重最后逐级加权汇总得到总指数。由于底层业务数据和权重设置在发布方手里使用这个资源时不需要自己重新合成直接采用结果层面的总指数或三个维度指数进入模型即可。这一点很重要因为有些研究者试图从Excel里反推权重既费时间又没有依据。提示该指数是相对值而非绝对水平。指数为100不代表某个绝对业务量只能用于同省跨年比较和同年跨省比较。论文里的表述建议写“数字普惠金融发展水平指数”避免被审稿人误读为市场规模。2.2 压缩包文件组成与Excel宽表结构解压后看到的文件一般有以下几类其中xlsx是核心数据文件文件/目录内容使用建议省级-数字普惠金融指数数据2011-2023年.xlsx省级总指数及一级维度指数分sheet存放主力数据文件引入Stata/Python数据来源.html数据出处、口径说明与引用格式写论文时查引用来源好评有礼.pdf下载来源方的推广说明页可忽略不影响数据使用xlsx的常见组织方式是宽表每个sheet对应一个指数维度行是省份列是年份。以“总指数”sheet为例第一列是省份北京、天津、河北…一般用简称后续每一列是一个年份2011、2012…直到2023单元格是对应的指数值。每个一级维度会单独占一个sheet命名类似“覆盖广度”“使用深度”“数字化程度”。这种结构适合人工翻阅和直观比较但直接拿来跑回归会出问题因为计量软件要求每个观测值独占一行。宽表转长表的具体操作是第3章的内容。2.3 数据口径与实证使用边界使用前先确认三件事。第一是样本范围省级数据只包含31个省、自治区、直辖市不含港澳台论文里需要写清楚“基于31个省级行政区”。第二是版本一致性该指数存在过多次修订同一年数值在不同版本间可能有细微差异引用时以数据来源.html里注明的发布版本为准。拿到数据后建议先和已发表文献中报告的2011年省级均值做一个粗略对比偏差过大就要检查是不是版本混用了。第三是外部数据合并时的行政编码省份名称用全称北京市、天津市比简称北京、天津更不容易出错因为统计年鉴多数使用全称统一命名可以避免后面merge时对不上。3. 数据清洗与面板构建从Excel宽表到可回归的平衡面板3.1 用Python pandas完成宽表到长表转换回归模型要求每一行是一个独立的“省份-年份”观测值也就是常说的长表。先用pandas读入“总指数”sheet并转换import pandas as pd df pd.read_excel(省级-数字普惠金融指数数据2011-2023年.xlsx, sheet_name总指数) df_long df.melt( id_vars[省份], # 省份作为标识列保留 var_nameyear, # 各年份列名折叠到year列 value_nameindex_total # 对应的指数值折叠到index_total列 ) df_long[year] df_long[year].astype(int) df_long df_long.dropna(subset[index_total]) print(df_long.head())melt的三个核心参数是id_vars、var_name、value_name。id_vars之外的每一列都会被折叠成“属性-值”两列这里就是把2011-2023这13个年份列全部归一为year和index_total。转换后年份列是字符串类型必须用astype(int)转成整数否则后面画图或生成时间趋势项时会出现排序错乱。dropna删掉值为空的年份通常某个省份在早期年份会有个别缺失。如果数据包里的四个sheet都要用可以循环读取再合并sheets [总指数, 覆盖广度, 使用深度, 数字化程度] merged None for s in sheets: tmp pd.read_excel(省级-数字普惠金融指数数据2011-2023年.xlsx, sheet_names) tmp tmp.melt(id_vars[省份], var_nameyear, value_names) tmp[year] tmp[year].astype(int) merged tmp if merged is None else merged.merge(tmp, on[省份, year], howouter)这段代码的思路是每个sheet先独立做melt得到形状相同的省份、年份、指数值三列长表然后用merge按省份和年份拼接成一张宽面板每一行是省份-年份各列对应不同维度的指数值。on[省份, year]指定合并主键howouter保留所有省份-年份组合避免某个sheet少了某一年的数据时观测值被静默丢弃。3.2 用Stata完成同样的reshape操作经管论文里Stata仍然是主力实现同样的宽表转长表import excel 省级-数字普惠金融指数数据2011-2023年.xlsx, sheet(总指数) firstrow clear describe reshape long 2011-2023, i(省份) j(year)describe用来确认导入后的变量名这一步不能省。Excel中文表头导入Stata后年份列名可能显示为2011或_2011reshape long后面的变量列表必须和实际变量名完全一致不一致时改成reshape long _2011-_2023即可。i()指定个体标识这里是省份j()指定时间标识这里是年份。这两个参数决定面板的唯一键错误设定会导致后续xtset报repeated time values。做完整套清洗后用一条断言检查是否有重复记录assert merged.duplicated(subset[省份, year]).sum() 0duplicated返回按省份和年份判断的重复行布尔序列sum()统计True的个数。这一步卡住过不少人不检查重复就合并控制变量等回归时报错才回头找既浪费时间又容易漏数据。3.3 省份名称规范化与缺失值处理数据包内的省份名称一般是“北京”“天津”这类简称而自己整理的宏观控制变量人均GDP、财政支出、城镇化率等来自统计年鉴多数用全称。先把数据里的省份列表打出来print(merged[省份].unique())确认差异后做一个映射字典prov_standard { 北京: 北京市, 天津: 天津市, 上海: 上海市, 重庆: 重庆市 } merged[省份] merged[省份].replace(prov_standard)replace对映射表里没有的键不做任何修改所以即使字典没写全也不会把已有值置空可以放心跑。缺失值方面省级指数整体完整度较高个别维度可能有空年份。建议dropna前先执行merged.isna().sum()看缺失分布如果缺失只集中在某一维度就按列删除而不是整行删除否则会把其他维度的有效观测也丢掉。3.4 zip解压失败与文件名乱码的处理从网盘下载zip后偶尔会遇到两类问题。一是报error read zip archive说明压缩包在下载或传输过程中字节不完整修复工具基本无能为力直接用7-Zip打开看能否在压缩包内正常显示文件列表如果7-Zip能打开且可以预览Excel而操作系统自带解压失败换用7-Zip右键“提取到当前文件夹”即可解决。二是文件名乱码常见原因是zip压缩包用了非UTF-8编码某些解压工具误判为UTF-8导致中文名变“锟斤拷”。解决办法是在7-Zip中打开压缩包后从工具选项里把文件名编码切到GBK再解压。这两个问题和数据本身无关但处理不当会耽误半天时间值得先看一眼。4. 时间趋势与区域差异分析跑出论文里的表1和图14.1 描述性统计从整体轮廓找拐点拿到长表面板后先算每年各统计量确认数据的整体增长形态desc merged.groupby(year)[index_total].agg( meanmean, medianmedian, minmin, maxmax ) print(desc.round(1))groupby(year)按年份分组agg同时计算四个统计量。运行后会看到一条从几十到两百多的上升曲线2013年前后是明显的加速窗口对应移动支付从一线城市向外围快速渗透。2011年的全国省级均值通常不足50到2023年普遍超过250纵向涨幅接近5倍。这个描述统计直接构成论文的“表1”同时决定后续是否要对指数做对数变换。我的建议是取对数因为指数跨度超过5倍线性模型会把早期微小差异和后期大差异放在同一尺度上系数解释会很别扭。4.2 区域差异度量变异系数与收敛判断省际差距的常用度量是变异系数CV即标准差除以均值cv merged.groupby(year)[index_total].apply( lambda x: x.std() / x.mean() ) print(cv.round(3))CV的好处是不受量纲影响可以比较不同年份的离散程度。CV逐年下降说明低指数省份增速快于高指数省份省际差异在收窄CV上升则意味着发散。用这份数据跑出来的典型结果是绝对差距最大值减最小值持续扩大但相对差距CV在多数年份下降。这个“绝对差扩大、相对差缩小”的组合值得在论文实证部分展开比单独报告均值或排名更有层次。如果要做均值差异检验可以按2011年指数中位数把省份分成高低两组然后比较两组在2023年的均值差是否显著用scipy.stats.ttest_ind或Stata的ttest都可以。这一步作为区域差异的辅助证据放在稳健性检验里能回应“差异是否统计显著”的疑问。4.3 图1趋势折线与重点省份对比import matplotlib.pyplot as plt highlight [北京市, 上海市, 广东省, 甘肃省, 西藏自治区] for prov in highlight: sub merged[merged[省份] prov].sort_values(year) plt.plot(sub[year], sub[index_total], labelprov) plt.legend() plt.xlabel(年份) plt.ylabel(数字普惠金融指数) plt.title(典型省份数字普惠金融指数走势2011-2023) plt.savefig(fig1_trend.png, dpi300, bbox_inchestight) plt.show()sort_values(year)是必须的否则画图时横轴年份会乱跳。savefig里的dpi300保证印刷级别清晰度bbox_inchestight避免标签被裁切。这张图的阅读重点是经济发达省份起点高但增速平缓欠发达省份起点低却在中后期出现追赶两条曲线在2020年前后明显靠拢。论文里可以把这张图作为“事实特征1”放在实证章节前为后面的收敛性检验做铺垫。5. 论文级实证应用双向固定效应与稳健性检验的代码骨架5.1 变量构造与面板设定核心解释变量建议用总指数的对数ln_index原因在4.1说过指数跨度大取对数后系数可以解释为“指数每提高1%带来的被解释变量变化”。控制变量按研究主题选择区域经济文献里最常见的组合是人均GDP对数、城镇化率、财政支出占GDP比重、第二产业占比。这些变量按省份-年份主键合并到面板上然后设定面板结构use panel_data.dta, clear xtset prov year gen ln_index ln(index_total) gen ln_pgdp ln(pgdp)xtset prov year声明这是一个以省份为个体、以年份为时间的面板数据后续所有xt前缀命令都会基于这个设定运行。如果第3章没有处理干净重复的省份-年份对这里会直接报错。5.2 基准回归reghdfe双向固定效应reghdfe y ln_index ln_pgdp urban fiscal industry, absorb(prov year) vce(cluster prov)被解释变量y的选择要看论文落点数字金融的创新效应常用地区专利数或新注册企业数包容性增长效应常用农村居民人均收入或城乡收入比实体经济发展常用地区GDP增速。absorb(prov year)分别吸收省份固定效应和年份固定效应排除“各省不随时间变化的固有特征”和“全国共同宏观冲击”。vce(cluster prov)在省级层面聚类标准误因为同一省份不同年份的扰动项通常相关不聚类会低估标准误、高估t值。5.3 稳健性检验三个方向快速落地第一个方向是替换核心解释变量把对数总指数换成对数使用深度指数观察系数方向和显著性是否保持一致gen ln_usage ln(index_usage) reghdfe y ln_usage ln_pgdp urban fiscal industry, absorb(prov year) vce(cluster prov)如果总指数显著而使用深度不显著说明数字金融的普惠效应更多来自覆盖面扩大而不是深度使用这也是一个有价值的结论可以在讨论部分展开。第二个方向是缩尾处理对连续变量在1%和99%分位数做winsorize防止极端省份驱动结果winsor2 ln_index, cuts(1 99) replacecuts(1 99)指定缩尾的上下分位点replace将原变量替换为缩尾后的新值。运行后可以对比缩尾前后的系数变化幅度在论文稳健性表格中同时汇报。第三个方向是样本调整剔除四个直辖市后重跑基准模型。直辖市在行政层级、金融资源、政策倾斜方面与其他省份差异较大如果剔除后结论不变说明结果不是京沪等特殊区域单独驱动的drop if inlist(prov, 北京市, 上海市, 天津市, 重庆市) reghdfe y ln_index ln_pgdp urban fiscal industry, absorb(prov year) vce(cluster prov)最后补一个滞后项检验把ln_index替换为滞后一期L.ln_index重新回归reghdfe会自动处理面板滞后产生的缺失观测。若滞后项系数不再显著说明反向因果的担忧可以降低。到这里从数据清洗、面板构建、描述分析到因果推断和稳健性检验的完整流程就闭合了剩下的工作就是按目标期刊格式整理表格、画图并撰写结果解释。本文还有配套的精品资源点击获取