2016-06-17 5 views
-1

나는 희망 사항으로, 간단한 공간 분석을 파이썬에서 수행하고 싶습니다. 그러나, 나는 파이썬이 내가 원하는 것을하기위한 방법을 완전히 이해하지 못했습니다.파이썬에서의 공간적 정확도 분석

히트 또는 미스, X 위치, Y 위치의 세 가지 중요한 열이있는 CSV 파일이 있습니다. 각 행은 히트 또는 미스가 발생했는지 여부와 해당 히트 또는 미스에 대한 x 및 y 좌표 (예 : "hit, 10, 58")의 인스턴스입니다.

더 좋은 그림을 얻기 위해이 수십만 개의 점이 있다고 가정하면 모두 100x100 격자 (0,0 = 왼쪽 하단 모서리 및 100,100 = 오른쪽 상단 모서리)에 떨어집니다. 히트와 미스는 그리드 전체에 분산되어 있는데, 일부 지역에서는 히트와 미스가 겹치거나, 히트 만 있거나 미스가있는 위치와 그렇지 않은 위치가 있습니다.

궁극적 인 목표는 그리드에서 상대적인 정확도 (히트/(히트 + 미스))를 시각화하는 히트 맵을 생성하는 것입니다.

필자가 생각해 낼 수 있었던 가장 좋은 아이디어는 동일한 산점도에서 히트와 누락을 플롯하고, 포인트의 불투명도를 줄이고, 포인트의 밀도가 색상을 지정하게하는 것입니다. 정확성 ....하지만 이것은 끔찍한 것 같습니다 ...

다음 아이디어는 쓰레기통을 만드는 것입니다. 따라서 그리드는 50 개의 2x2 쓰레기통으로 분리되어 각 프로그램마다 정확성 분석 (히트/(히트 + 미스))을 수행하게합니다. 그러나 슬프게도, 나는 이것을 어떻게하는지 모른다.

누구에게 아이디어가 있습니까?

감사합니다.

답변

0

scipy.stats에서 커널 밀도 추정을 사용할 수 있습니다. 나는 이것이 당신이 원하는대로해야한다고 생각합니다. 데이터가 클러스터되는 경향이있는 곳을 보여줍니다. 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)