欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Geoda】批量导入数据教程

程序员文章站 2022-04-11 15:34:03
...

一、问题

最近又用起 Geoda 做热点图了,这软件好处就是上手快傻瓜式,中文兼备,先不说功能没 GIS 多,最大的问题就是没法批量导入数据,像用 BigData 的模型动不动就几千个数据手一个个敲要累死,踩了一些坑总结了一套最快导入数据的方式。

二、分析

正常一个地图包都有 .shp.dbf 等后缀结尾的文件,最主要的就是这两个,.shp 是地图,按内置 ID 作图,跟你的 主键 没关系。
.dbf 就是表单数据,可以用 wps 打开,但是用了 wps 就会导致数据类型改变,在做无用功,根本导入不进去。

注:
如果你只需要几个 键 的数据,在 Geoda 里添加 键(变量),再用 wps 打开 .dbf 表单填充数据,单元格改成数值格式,保存就可以在 Geoda 里用了,不需要看如下教程。

三、解决批量导入

  1. 因为 .dbf 是已经过时的数据库表单,所以要数据库软件来管理。这里下一个小巧的数据库管理软件就够了,用来改变数据类型,不需要已经被淘汰的 access 和什么高大上的编辑器,下一个 DBF Commander 即可,5 M 左右。另外还需要 Python ,后面批量生成语句用,如果不会 Python 可以考虑 C 、Java 等马上能上手的语言。

  2. 先用 DBF Commander 打开 .dbf 表单库,开始添加 键 ,操作的时候会有没用的提示你去官网购买高级版,点否无视即可。
    Python 批量拼接生成 SQL 添加键语句:

ALTER TABLE "你 .dbf 文件的完整路径"  ADD 你的键名称 float(10);

举例:

ALTER TABLE "D:\Geoda\map\china.dbf"  ADD Y1975 float(10);

两个地方都是需要你根据需求拼接的,注意完整路径的引号不要少了,尾部必须要有分号!另外尾部还要多生成一个换行 \n ,两个语句之间必须有空行,因为 DBF Commander 不识别连续行的 SQL ,必须有空行。

生成完了放到 DBF Commander 下面的控制台,全选点执行或者按 F5 ,键 就做好了。
点开软件左上一排按钮,查看 键 结构,把表单的类型换成 dBase Plus ,就可以了,如果你不换,wps 都打不开。

  1. 用 wps 打开 .dbf ,在已经批量添加的 键 下面大批量导入数据,有两个注意点:

(1)上面说了 .shp 是按本身的 ID 来划分区域代码的,不是你的 主键(主键一般是 ID ),你改掉这个 .dbf 里的 ID 还是把 .dbf 的行顺序换了都没用,不要改 .dbf 的顺序。Geoda 这个软件原来地图包是什么顺序,你就要用什么顺序。

(2)注意粘贴完了,右键你刚刚粘贴数据的单元格调成数值格式的单元格,保留位数按自己的情况来,不然又回到 整型 了,浪费时间。之后保存文件。

  1. DBF Commander 打开 .dbf 文件,批量执行换键类型的 SQL ,还是要自己生成,拼接:
ALTER TABLE "你 .dbf 文件的完整路径" ALTER 你的键名称 F(8,2) NOT NULL;

举例:

ALTER TABLE "D:\Geoda\map\china.dbf" ALTER Y1975 F(8,2) NOT NULL;

注意和上面一样,要语句之间有空行,不然批量执行不了。
生成好放控制台跑完之后,再进 键 结构管理那边把你的 主键(一般是 ID ,不过这个 主键 也是你自己假设的,不是真正 .shp 里的那个真主键,主要是改了后续分析用这个作为代号) 类型改成 Int ,保存之前要改成 dBase Plus 格式。

  1. 用 Geoda 打开就是做好的数据了,直接开始分析 Moran指数 之类的就完事了,如果还要添加数据,按这个逻辑来即可。

四、总结逻辑

整体逻辑就是先批量在能 DBF 管理的软件里添加键,再 wps 导入,wps 会把你的数据结构给改了,你再把键的类型改成 浮点型 就可以了。

注:
(1)这边有个坑,为什么第一次 SQL 插入键的时候不定义 NOT NULL ,第二次改回 浮点型 的时候才定义 NOT NULL ,因为 DBF Commander 他不支持,研究半天浪费时间。

(2)懂 dBase 的可以用其他的数据库管理器,执行 SQL 都一样的(保证你的管理器可以批量执行 SQL),因为这个数据库太老了,很多软件也都很简陋不堪也不友好。

(3)假如你的 主键(这个是你分析用的,不是真主键,所以你不能改 .dbf 的顺序,那原有的顺序和你的数据排序不一样怎么办?),解决方法是编程把你的数据行数调换一下,把原来能支持排序的名字拷贝出来,读写文件两个 for 就能解决,你可以不用现学习 Python 的 csv 库,直接读写数据中间插入 , 就是分割了,具体你可以 记事本 或者 Notepad++ 打开 csv 的表查看结构。

五、后记

Geoda 导入数据实在是太无力了,还有操作变量也很不友好,作者也很久不更新了。

但是 Geoda 优点也是有的,操作简单,有中文支持,轻量化,作图也可以,我个人还是比较喜欢 Geoda 。