最近知网上更新了 2022 年中国县域统计年鉴,不过并没有提供 excel 格式的数据。所以我只下载了 caj 文件。今天的课程中我们将一起学习如何把 caj 文件转换成 pdf 文件、对 pdf 文件进行文本识别以及处理识别后的结果。
后面如果知网提供了 excel 文件就直接整理 excel 文件即可。不过本文讲解的方法依然适合很多没有提供 excel 文件的统计年鉴数据提取整理。
caj 文件转换成 pdf 文件
caj 文件需要使用知网提供的 caj 阅读器打开,我们没办法直接对 caj 文件进行文本识别和提取,因此我们需要先把 caj 文件转换成 pdf 或者其他可处理的格式。
对于页数较少的 caj 文件,可以通过一页页的截图,不过页数多的话这种方法就非常麻烦了。为此我找到了一个把 caj 转换成 pdf 文件的工具。
附件中我为大家下载好了三个文件:
- caj2pdf-qt-macos-x86_64-v0.1.5.zip:Mac OS 安装
- caj2pdf-qt-windows-x86-v0.1.5.zip:32 位的 Windows OS 安装
- caj2pdf-qt-windows-x86_64-v0.1.5.zip:64 位 Windows OS 安装
Windows 上的安装使用我尚未测试,大家可以遇到问题的时候再来研究。
我使用的是 Mac OS,使用过程也遇到了问题:
![]()
双击打开:
![]()
不过我们可以这样打开。首先右键选择“显示包内容”:
![]()
找到这个文件:
![]()
双击打开即可:
![]()
然后使用这个工具转换 caj 文件生成 pdf 文件即可。
这样我们就得到了 pdf 文件:中国县域统计年鉴_王贵荣_主编_2021年县(市)社会经济主要指标.pdf。
pdf 文件识别文本、提取表格数据
图像的文本识别工具很多,例如 tesseract,不过尝试之后发现都不是特别好用,最好用的工具还是这个在线的应用。
如果要识别的文件页数较少,选择免费转换即可。付费转换的价格也不贵,例如这份 pdf 文件有 419 页,收费 17.67 元(如果要识别很多文件,最好先把文件合并成一个 pdf 文件上传识别,因为这个网站是阶梯收费,页数越多,单价越低)。
上传之后根据自己的需要设定解析参数即可:
![]()
解析过程可能需要数十分钟,耐心等待即可。
![]()
这次大家就不用再付费转换了,附件中有我转换后的数据,大家可以使用附件中的结果继续学习后面的内容。也就是 中国县域统计年鉴_王贵荣_主编_2021年县(市)社会经济主要指标_output.xlsx 文件。
手动检查
解析的结果并不一定能直接使用 R 语言处理(有很多细节不好编程进行),我们需要先手动检查下做一些准备工作。
这里主要是手动从每个表格中提取省份信息生成一个新列,见文件“整理结果.xlsx”。
在 R 语言中处理
下面我们使用 R 语言读取处理这个文件:
library(tidyverse) |
使用该代码处理原始数据:
df1 %>% |
根据 B == “指标” 拆分每个表:
df2 %>% |
检查有没有识别错误的:
df2 %>% |
可以看到有部分海南省的数据少了“指标”这一行,我们再回到原始数据修正这一行数据得到“整理结果2.xlsx”
重新处理 “整理结果2.xlsx”:
readxl::read_xlsx("整理结果2.xlsx", col_names = LETTERS[1:12]) -> df |
继续整理 df2:
df2 %>% |
字符串变量有这些:
df3 %>% |
不过还需要注意,type_convert() 在处理的时候,会自动忽略逗号(认为是会计数字分隔符),但是文本识别的时候是经常会把小数点识别成逗号。所以我还需要检查下 df2 的变量中哪些变量有逗号:
df2 %>% |
所以除了上面的那些变量,我们还需要检查“户籍人口”变量!
除了 “A” 和“指标”两个变量,其他变量都应该是数值变量,现在我们需要逐一检查为什么出现了这个问题。
把“整理结果2.xlsx”复制一份命名为“整理结果3.xlsx”,然后逐个检查为什么有些变量无法 type_convert():
df3 %>% |
这样我们就纠正了这些错误。
重新处理 “整理结果3.xlsx”:
readxl::read_xlsx("整理结果3.xlsx", col_names = LETTERS[1:12]) -> df |
最后我们再检查变量的数值中是否有识别错误的,通常我会检查数据的分布:
hist(df4$乡) |
![]()
也可以把所有的变量分布绘制到一幅图上:
# 或者一起绘制 |
![]()
看起来基本没什么明显的问题,大家如果时间充裕的话,也可以逐个检查那些分布右偏的变量。
检查区县名称的识别错误
虽然在人工检查过程中我们也纠正了一些识别错误问题,不过应该还有很多我们没有发现,在下次课中我们会讲解如何为数据添加行政区划代码,在这个过程中我们就能发现和纠正区县名称识别错误的问题了。另外如果把多年的数据匹配起来,就可以通过检查数据的趋势来识别出数值错误的问题。
点击这里跳转到 RStata 短书平台获取附件:R 语言:如何整理 2022 年县域统计年鉴:caj 文件转 pdf、文本识别与数据清洗
评论