简介:面向金融研究者与政策制定者的省级数字普惠金融指数数据包,覆盖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_name="year", # 各年份列名折叠到year列 value_name="index_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_name=s) tmp = tmp.melt(id_vars=["省份"], var_name="year", value_name=s) tmp["year"] = tmp["year"].astype(int) merged = tmp if merged is None else merged.merge(tmp, on=["省份", "year"], how="outer")这段代码的思路是:每个sheet先独立做melt,得到形状相同的(省份、年份、指数值)三列长表;然后用merge按省份和年份拼接成一张宽面板,每一行是省份-年份,各列对应不同维度的指数值。on=["省份", "year"]指定合并主键,how="outer"保留所有省份-年份组合,避免某个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或_2011,reshape 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和图1
4.1 描述性统计:从整体轮廓找拐点
拿到长表面板后,先算每年各统计量,确认数据的整体增长形态:
desc = merged.groupby("year")["index_total"].agg( mean="mean", median="median", min="min", max="max" ) 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"], label=prov) plt.legend() plt.xlabel("年份") plt.ylabel("数字普惠金融指数") plt.title("典型省份数字普惠金融指数走势(2011-2023)") plt.savefig("fig1_trend.png", dpi=300, bbox_inches="tight") plt.show()sort_values("year")是必须的,否则画图时横轴年份会乱跳。savefig里的dpi=300保证印刷级别清晰度,bbox_inches="tight"避免标签被裁切。这张图的阅读重点是:经济发达省份起点高但增速平缓,欠发达省份起点低却在中后期出现追赶,两条曲线在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会自动处理面板滞后产生的缺失观测。若滞后项系数不再显著,说明反向因果的担忧可以降低。到这里,从数据清洗、面板构建、描述分析到因果推断和稳健性检验的完整流程就闭合了,剩下的工作就是按目标期刊格式整理表格、画图并撰写结果解释。
本文还有配套的精品资源,点击获取