地理学最快的方法(阅读和空间加入)

时间:2016-02-23 15:28:47

标签: python multithreading pandas geopandas

我有大约一百万行数据,附有lat和lon,还有更多。即使现在从SQLite文件中读取数据(我用pandas读取它,然后为每一行创建一个点)也需要花费很多时间。

现在,我需要对这些点进行空间联合以获取每个点的邮政编码,我真的想优化这个过程。

所以我想知道:如果有任何相对简单的方法来并行化这些计算?

3 个答案:

答案 0 :(得分:1)

我假设您已经实施了GeoPandas并且仍然遇到困难? 您可以通过进一步散列您的coords数据来改善这一点。类似于谷歌哈希他们的搜索数据。一些数据库已经为这些类型的操作提供支持(例如mongodb)。想象一下,如果你拿走了你的坐标的第一个(左)数字,并将每组相应的数据放入一个单独的sqlite文件中。每个数字都可以是指向要查找的正确文件的哈希。现在,您的查找时间已经提高了20倍(range(-9,10)),假设您的哈希查找在比较时花费的时间最短

答案 1 :(得分:1)

事实证明,在我的情况下,最方便的解决方案是使用pandas.read_SQL函数和特定的chunksize参数。在这种情况下,它返回一个数据块生成器,它可以有效地提供给mp.Pool()。map()以及作业; 在这个(我的)案例中,工作包括:1)读取地理对象,2)块的空间关节3)将块写入数据库。

答案 2 :(得分:0)

此方法在空间尺度上完全依赖,但您可以将连接并行化的一种方法是将多边形细分为子多边形,然后将工作卸载到单独核心中的单独线程。这个geopandas r-tree教程演示了这种技术,将大多边形细分为许多小多边形,并将每个大多边形与一大组点相交。但同样,这只有在您的空间尺度合适时才有效:即一些多边形和许多点(例如几个邮政编码多边形以及它们周围的数百万个点)。