Python中的空间准确性分析

时间:2016-06-17 16:06:19

标签: python spatial analysis bins

我有一个希望,简单的空间分析,我想在python中执行。但是,我还没有完全弄明白如何让python做我想做的事。

我有一个包含3个关键列的CSV文件:Hit或Miss,X Location,Y Location。每一行都是发生命中或未命中的实例,以及该命中或未命中的x和y坐标是什么(例如,"命中,10,58和#34;)。

为了给你一个更好的画面,想象一下有成千上万的这些点,它们都落在一个100 x 100格的范围内(其中0,0 =左下角和100,100 =右上角)。点击和未命中分布在整个网格中,在某些位置有点击和未命中重叠,有些位置只有点击或只有未命中,有些位置没有。

我的最终目标是生成一个热图,可以显示网格中的相对精度(命中/(命中+未命中))。

我能够想出的最好的想法是在相同的散点图上绘制命中和未命中,减少点的不透明度,并让点的密度决定色调,然后表示色调相对准确度....但这看起来很糟糕....

我的下一个想法是制作垃圾箱。因此,网格将被分解为50个2x2箱,我会让我的程序执行每个箱的精度分析(命中/(命中+未命中))。但是,唉,我不知道该怎么做。

有没有人有任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用scipy.stats中的Kernel Density Estimator。我认为这应该做你想要的。它将显示数据趋于聚集的位置。 KDE将建立2d概率密度的估计值。然后,您可以在100x100网格上评估该KDE估算器。您可以使用计数器图绘制结果。

您的代码可能如下所示:

import numpy as np
from scip.stats import kde
import matplotlib.pyplot as plt

ndiv = 101
xr = np.linspace(0.0, 100.0 ndiv)
yr = np.linspace(0.0, 100.0 ndiv)
x,y = np.meshgrid(xr, yr)

# points here would be your 'hits' or 'miss' subset
estimator = kde.gaussian_kde(points)

# this turns the grid into a list of points that will
# be used by the KDE for evaluation
grid_coords = np.append(x.reshape(-1, 1), y.reshape(-1, 1), axis=1)
z = estimator(grid_coords.T)
z = z.reshape(ndiv, ndiv)

# you can specify contour levels
lvls = np.array([.05, .5, .75, 1.0]) * z.max()  
cfset = plt.contourf(x, y, z, cmap='jet', levels=lvls)