python - 将完整的 QUEEN 邻居数组保存到 Pysal 中的 CSV(人口普查 block 组)

标签 python geospatial pysal

首先让我说,除了 stata .do 文件和 R 中的一些 MCMC 之外,自从 VB 中的 AOL warez group 应用程序以来我还没有编码;所以我很抱歉一开始就在这里惹你们。

我正在写一篇环境正义论文,涉及人口普查区 block 组级别的人口统计和暴露数据。由于街区组的规模可能相对较小,因此污染源和居住在一个街区组中的人们很容易影响至少一阶邻居。我本来打算成为一个笨蛋,只是通过 FIPS 代码汇总备份,但那只是糟糕的数学。

获得了我想要的 ACS 年份的形状文件,首先尝试了 arcGIS,但我没有得到任何结果。然后我阅读了 Pysal 并安装了它

导入的形状文件 对所有 216,000 个区 block 组运行(12 小时)皇后邻居分析

在[52]中:w.histogram 输出[52]:

[(0, 87), (1, 709), (2, 3634), (3, 16627), (4, 48736), (5, 56952), (6, 42848), (7, 24878), (8, 12646), (9, 6294), (10, 3040), (11, 1515), (12, 759), (13, 432), (14, 233), (15, 128), (16, 85), (17, 44), (18, 34), (19, 20), (20, 21), (21, 13), (22, 8), (23, 7), (24, 6), (25, 1), (26, 3), (27, 1), (28, 2), (29, 1), (30, 2), (31, 1), (32, 0), (33, 2), (34, 0), (35, 1), (36, 1), (37, 1), (38, 0), (39, 0), (40, 0), (41, 0), (42, 0), (43, 0), (44, 0), (45, 0), (46, 1), (47, 0), (48, 0), (49, 0), (50, 0), (51, 0), (52, 0), (53, 0), (54, 0), (55, 0), (56, 0), (57, 0), (58, 0), (59, 0), (60, 0), (61, 1)]

我需要的是一个 .csv(或者老实说,如果我将它复制/粘贴到某个地方,任何东西都可以),它通过 FIPS(这应该是 ACS shapefile 用于 ID 的)枚举每个 block 组及其邻居列表。

如果我能拿到这份 list ,我就可以把它移到一个我更舒服的环境中。昨晚我坐在那里玩了几个小时,可以在 numpy.savetext 上找到几个破解来工作,但它只是一个列,数字以科学计数法存储,因为 FIPS 代码是 12 位数字。有一次它告诉我元组超出范围,我认为那是我得到的最接近的

我事先相当广泛地只搜索了数据本身,否则我保证我不会在这里浪费你的时间。

谢谢, 戴夫

最佳答案

你可以用pysal把W写入一个txt文件。 有许多不同的格式,但“GAL”文件是最简单的。

这是一个txt文件,第一行是形状的数量。 然后每条记录为 2 行,

id n
id0, id1, ... 

where:
  id is the id of the polygon,
  n is the number of neighbors
  id0 is the id of the first neighbor
  ... and so on

例如:

 3
 0 1
 1
 1 2
 0 2
 2 1
 1

...描述图 0-1-2,0 有 1 个邻居 (1),1 有 2 个邻居 (0, 2),依此类推。

将您的 W 写入 gal 文件...

>>> W = pysal.queen_from_shapefile("/path/to/shapefile.shp")
>>> out = pysal.open("output.gal", 'w')
>>> out.write(W)
>>> out.close()

注意:ids 是偏移量。 0 是第一个多边形,1 是第二个,依此类推。

如果您想将偏移量链接到 FIPS 代码,您需要自己完成。但是,您可以使用 pysal 以正确的顺序提取 FIPS 代码。

>>> dbf = pysal.open("/path/to/shapefile.dbf", "r")
>>> print dbf.header
[column names, ... ]
>>> FIPS = dbf.by_col("name_of_fips_code_column")
>>> FIPS = map(str, FIPS) #make sure we're writing strings
>>> out = open('fips.txt','w')
>>> out.write('\n'.join(FIPS))
>>> out.close()

关于python - 将完整的 QUEEN 邻居数组保存到 Pysal 中的 CSV(人口普查 block 组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36721911/

相关文章:

python set union 操作在命名元组中表现不佳

python - Spark : pyspark crash for some datasets - ubuntu

sql-server - SQL Server 2008 空间 : find a point in polygon

mongodb - Mongodb Mapreduce - 半径内用户的热门场所

Python:如何从 shapefile 计算指标的空间自相关?

python - JAX/JIT 与标准 Numpy 性能 : where I am wrong?

python - 如何在 Python 中读取、编辑和另存为另一个 excel 文件?

algorithm - 存储距离敏感空间数据的最佳数据结构是什么?

python - 如何修复 Pysal 中 LISA 簇 map 的颜色

python - GeoPandas 中的格式/圆形数字图例标签