一、引言
最近在导师的push下,需要分析政策发布主体之间的合作关系,以此看出在推动某一领域政策完善发展的过程中,哪一个或哪些部门能够担任牵头角色,哪些部门合作较为紧密。但是本小白在CSDN网站以“政策主体合作”“联合发文”“政府机构网络分析”等为关键词进行搜索,并未发现较为完善的教程指导,在经过几天的学习后,略微有些收获,这篇博客就诞生了。
图1 政策主体合作网络图谱例图
二、数据准备
我们首先要明确这其实是一项可视化分析工作,因此首先要选择一款可视化分析软件,在进行相关的文献阅读后,发现文本分析领域的学者大多采用Gephi软件(https://gephi.org/),其中一个原因是该款软件免费,上手也较为容易,目前仍在不断更新,最新版本为0.10.1,本小白就选择了Gephi来制作政策主体合作网络图谱。
图2 Gephi启动界面
在网络上进行了一些 Gephi学习后,发现制作政策主体合作网络图谱所需的数据类型是矩阵型,如下图所示。
图3 矩阵型数据
如何理解这个矩阵呢,该矩阵首行和首列均是政府机构名称,且顺序一致。以第三行第二列单元格为例,该单元格是国家文物局和国家粮食和物资储备局的交叉部分,意味着国家文物局和国家粮食和物资储备局联合发布一份政策文本,如果我们是分析多部分联合发布政策,矩阵上的对角单元格值应都为0。
图4 单元格
但是本小白在进行相关政策文本收集的工作时,所得到的数据类型往往是这样(以北大法宝为例):
图5 北大法宝导出数据
观察制定机关列,怎么样才能得到上面的矩阵型数据呢?
图6 制定机关列
首先,需要剔除由单部门发布的政策。
图7 单部门政策
图8 剔除后的多部门政策
接着,如果我们需要制作矩阵型数据,我们需要知道一共有哪些政府部门参与了政策文本发布。通过简单的手工统计发现有以下部门:
水利部 |
应急管理部 |
国家质量监督检验检疫总局(已撤销) |
科学技术部 |
住房和城乡建设部 |
工业和信息化部 |
文化和旅游部 |
国家体育总局 |
国家林业和草原局 |
交通运输部 |
国家能源局 |
国家发展和改革委员会(含原国家发展计划委员会、原国家计划委员会) |
国家市场监督管理总局 |
国家文物局 |
生态环境部 |
国家乡村振兴局 |
民政部 |
图9 政策发布部门
然后,构建矩阵,统计数据。矩阵的结构如下图所示:
图10 矩阵结构
最后需要将数据补齐。
图11 待补齐数据
图11 完整数据
好了,到这里数据的准备工作就做完了。嘿嘿,这才只有4篇政策文本,真正做科研的时候,几千篇政策文本很常见,想要制作政策机构矩阵自然不能靠手工,需要借助一些科技的力量。
本小白也自创了一套Python代码,可以实现上述工作,代码如下:
import openpyxl
import pandas as pd
# 读取Excel文件(注:文件第一行不能有制定机关,呈现内容即可)
workbook = openpyxl.load_workbook("输入文件.xlsx")
sheet = workbook.active
# 创建一个空集合存储政府机关
gov_agencies = set()
# 遍历第一列
for cell in sheet["A"]:
# 按分号分割政府机关
agencies = cell.value.split(";")
for agency in agencies:
# 添加政府机关到集合中
gov_agencies.add(agency.strip())
print(gov_agencies)
# 输出不重复政府机关的数量
print("一共有{}个不重复的政府机关".format(len(gov_agencies)))
# 创建一个空的矩阵,行和列都是政府机关
matrix = pd.DataFrame(0, index=gov_agencies, columns=gov_agencies)
# 遍历每一行,计算联合发文情况
for row in sheet.iter_rows(min_row=1, values_only=True):
agencies = row[0].split(";")
# print(agencies)
for i in range(len(agencies)):
for j in range(i+1, len(agencies)):
# 在矩阵对应的位置+1
matrix.loc[agencies[i].strip(), agencies[j].strip()] += 1
matrix.loc[agencies[j].strip(), agencies[i].strip()] += 1
# 打印矩阵
print(matrix)
# 创建一个 Excel writer 对象
writer = pd.ExcelWriter('输出文件.xlsx')
# 将矩阵 DataFrame 写入到 Excel 文件中的一个新工作表
matrix.to_excel(writer, sheet_name='Matrix')
# 保存并关闭 Excel writer
writer.save()
图12 Python代码
使用这套代码有一个注意点:
输入文件为excel文件,文件中数据有严格规定:不需要列名,政策制定机关中的“;”必须是英文状态下输入。
图13 输入文件格式要求
三、可视化分析
下面进行可视化工作,打开Gephi,我们可以看到如下界面:
1.新建工程
2.进入数据资料界面
3.导入数据
4.可视化分析
哈哈,政策数量太少效果看起来不太明显。大家可以自行尝试。