内容摘要
在经济学、管理学和公共政策研究中,政策文件往往是非常重要的信息来源。无论是数字经济政策、环境规制政策、产业扶持政策,还是人工智能、绿色金融、营商环境等专题研究,研究者经常需要回答一个问题:某个地区、某个年份的政策支持力度到底有多强?
但现实问题是,政策文件本身通常是一段段文字,不能直接放进回归模型。为了让政策文本真正服务于实证研究,我们需要将非结构化文本转化为可量化、可比较、可合并的数据指标。
本教程基于 Python 构建了一套政策文本量化流程,从政策文本清洗、中文分词、关键词统计,到政策强度指数构建和地区—年份面板数据输出,完整展示了如何把“政策文件”转化为可以直接进入 Stata、R 或 Python 回归分析的数据变量。
一、案例背景
在很多社会科学实证研究中,政策变量并不是一开始就存在于数据表中的。
比如研究数字经济政策是否促进企业创新时,研究者可能能找到大量地方政府发布的政策文件:
这些文本信息非常丰富,但它们并不能直接用于计量模型。研究者真正需要的是类似这样的数据:
也就是说,需要把政策文本从“文字材料”转化为“数值变量”。
传统做法通常依赖人工阅读、手动统计关键词,或者简单统计政策文件数量。但这些方法存在明显问题:效率低、主观性强、难以复现,而且面对大规模文本时几乎无法处理。
本案例正是围绕这个问题设计。通过 Python,我们可以批量读取政策文本,自动完成文本清洗、中文分词、关键词统计和指数构建,最终形成标准的地区—年份政策强度面板数据。
二、案例价值
这个案例的价值主要体现在三个方面。
1. 将政策文本转化为实证变量
政策文件本身是非结构化文本,而实证研究需要的是结构化变量。本案例可以把政策文本转化为:
这些指标可以直接与企业数据、城市数据、省级面板数据或行业数据合并,用于后续回归分析。
2. 适合多类研究主题
政策文本量化的应用范围非常广。只要研究对象涉及政策文本,就可以迁移这一套方法。
因此,它不仅是一个文本分析教程,也是一套实证变量构建工具。
3. 适合教学和科研复现
这个案例流程清晰,适合用于 Python 文本分析、政策量化、数字经济研究、公共政策评估等课程或科研项目中。
学生可以通过这个案例理解:
这对于培养“数据工程 + 实证研究”的综合能力非常有帮助。
三、代码思路
整个项目可以分为六个步骤:
政策文本数据
↓
文本清洗
↓
中文分词
↓
关键词统计
↓
政策强度指数构建
↓
地区—年份面板数据输出
1. 读取政策文本数据
首先准备一份政策文本数据。数据可以是 Excel 或 CSV 格式,基本字段包括地区、年份、政策标题和政策正文。
示例数据结构如下:
Python 读取数据:
import pandas as pd
df = pd.read_excel("data/policy_text.xlsx")
print(df.head())
print(df.info())
这一步的作用是把政策文本读入 Python,为后续清洗和统计做准备。
2. 文本清洗
政策文本中通常包含换行符、空格、标点符号、网页符号等内容。为了保证后续分析效果,需要先对文本进行清洗。
import re
def clean_text(text):
text = str(text)
text = re.sub(r"\s+", "", text)
text = re.sub(r"[^\u4e00-\u9fa5A-Za-z0-9]", "", text)
return text
df["clean_text"] = df["政策文本"].apply(clean_text)
清洗前:
加快推进数字经济发展,推动大数据、人工智能、云计算等新技术应用。
清洗后:
加快推进数字经济发展推动大数据人工智能云计算等新技术应用
文本清洗可以减少无效字符对分词和关键词统计的干扰。
3. 中文分词
中文文本没有天然空格,因此需要先进行分词。这里可以使用 jieba 分词工具。
import jieba
def cut_words(text):
words = jieba.lcut(text)
return " ".join(words)
df["cut_text"] = df["clean_text"].apply(cut_words)
例如:
推动数字经济和实体经济深度融合
分词后变成:
推动 数字经济 和 实体经济 深度 融合
分词结果可以用于词频统计、TF-IDF 分析和主题模型分析。
4. 构建关键词词典
如果研究主题是数字经济,可以构建一个数字经济关键词词典。
keywords = [
"数字经济", "大数据", "人工智能", "云计算",
"区块链", "工业互联网", "数据要素", "数字产业化",
"产业数字化", "智慧城市", "数字治理", "平台经济"
]
然后统计每篇政策文本中关键词出现的次数。
def count_keywords(text, keywords):
count = 0
for word in keywords:
count += text.count(word)
return count
df["关键词频次"] = df["clean_text"].apply(lambda x: count_keywords(x, keywords))
这一步可以得到每份政策文件对研究主题的关注程度。
5. 构造政策强度指数
政策文本数量和关键词频次都可以反映政策力度,但单独使用可能不够充分。因此可以结合关键词频次和文本长度构造政策强度指数。
一个简单的计算方式是:
政策强度指数 = 关键词频次 × log(文本长度 + 1)
Python 实现如下:
import numpy as np
df["文本长度"] = df["clean_text"].apply(len)
df["政策强度指数"] = df["关键词频次"] * np.log(df["文本长度"] + 1)
为了方便不同地区、不同年份之间比较,还可以对指数进行标准化处理:
df["政策强度标准化"] = (
df["政策强度指数"] - df["政策强度指数"].mean()
) / df["政策强度指数"].std()
标准化后的指标更适合进入回归模型。
6. 汇总为地区—年份面板数据
最后,将单篇政策文件层面的结果汇总到地区—年份层面。
policy_panel = df.groupby(["地区", "年份"]).agg(
政策文本数量=("id", "count"),
关键词频次=("关键词频次", "sum"),
平均文本长度=("文本长度", "mean"),
政策强度指数=("政策强度指数", "sum")
).reset_index()
policy_panel["政策强度标准化"] = (
policy_panel["政策强度指数"] - policy_panel["政策强度指数"].mean()
) / policy_panel["政策强度指数"].std()
policy_panel.to_excel("result/政策强度面板数据.xlsx", index=False)
最终输出结果为:
result/政策强度面板数据.xlsx
这份数据就可以直接与企业面板、城市面板或省级面板数据合并,进入后续实证分析。
四、重要过程与结果展示
1. 政策文本样例
这一部分展示了原始政策文本数据的基本结构。
2. 关键词频次统计结果
通过关键词词典统计后,可以得到不同地区、不同年份政策文本中关键词出现情况。
从结果可以看出,不同地区在数字经济政策中的关注重点存在差异。例如,广东在“大数据”“工业互联网”等关键词上出现频次较高,说明其政策文本中对数字基础设施和产业数字化的关注较为突出。
3. 政策强度指数结果
进一步将关键词频次、文本长度等信息综合起来,可以得到政策强度指数。
这类结果可以直接作为解释变量、核心变量或调节变量进入实证模型。
例如,可以用于研究:
企业创新 = 数字经济政策强度 + 控制变量 + 企业固定效应 + 年份固定效应
或者:
绿色转型 = 环境政策强度 + 企业特征 + 行业固定效应 + 年份固定效应
4. 可视化展示
为了让结果更加直观,可以绘制政策强度柱状图。
import matplotlib.pyplot as plt
plot_data = policy_panel[policy_panel["年份"] == 2020]
plt.figure(figsize=(8, 5))
plt.bar(plot_data["地区"], plot_data["政策强度指数"])
plt.xlabel("地区")
plt.ylabel("政策强度指数")
plt.title("2020年各地区政策强度指数")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
也可以绘制政策强度随年份变化的趋势图。
trend_data = policy_panel.groupby("年份")["政策强度指数"].mean().reset_index()
plt.figure(figsize=(8, 5))
plt.plot(trend_data["年份"], trend_data["政策强度指数"], marker="o")
plt.xlabel("年份")
plt.ylabel("平均政策强度指数")
plt.title("政策强度指数年度变化趋势")
plt.tight_layout()
plt.show()
这些图表可以用于推文结果展示,也可以放入代码说明文档或课程讲义中。
五、输出文件说明
项目最终可以输出三类结果文件:
| | |
|---|
| | |
| keyword_count_result.xlsx | | |
| | |
其中,最重要的是 政策强度面板数据.xlsx。这份文件已经整理成标准面板格式,可以直接与其他实证数据合并。
六、适用研究场景
本教程可以迁移到多个研究方向中:
对于需要把政策文本转化为实证变量的研究来说,这套流程具有很强的通用性。
七、总结
政策文本量化的核心意义在于:把原本只能阅读和描述的政策文件,转化为可以统计、比较和回归的数值变量。
本教程通过 Python 完成了从原始政策文本到政策强度指数的完整流程:
政策文本 → 文本清洗 → 中文分词 → 关键词统计 → 指数构建 → 面板数据
最终得到的地区—年份政策强度数据,可以直接用于数字经济、环境规制、产业政策、人工智能政策、营商环境等实证研究场景。
相比人工统计,Python 自动化处理不仅效率更高,而且结果更加规范、可复现。对于高校师生、科研人员和实证研究初学者来说,这是一个非常适合入门的政策文本量化案例。