add query for gwr
This commit is contained in:
parent
01c9195ea5
commit
6e50e43e1c
@ -42,7 +42,7 @@ def get_weight(query_res, w_type='knn', num_ngbrs=5):
|
|||||||
return built_weight
|
return built_weight
|
||||||
|
|
||||||
|
|
||||||
def query_attr_select(params):
|
def query_attr_select(params, table_ref="i"):
|
||||||
"""
|
"""
|
||||||
Create portion of SELECT statement for attributes inolved in query.
|
Create portion of SELECT statement for attributes inolved in query.
|
||||||
@param params: dict of information used in query (column names,
|
@param params: dict of information used in query (column names,
|
||||||
@ -50,11 +50,15 @@ def query_attr_select(params):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
attr_string = ""
|
attr_string = ""
|
||||||
template = "i.\"%(col)s\"::numeric As attr%(alias_num)s, "
|
template = "\"%(col)s\"::numeric As attr%(alias_num)s, "
|
||||||
|
|
||||||
if 'time_cols' in params:
|
if table_ref is not None:
|
||||||
# if markov analysis
|
template = "{table_ref}.".format(table_ref=table_ref) + template
|
||||||
attrs = params['time_cols']
|
|
||||||
|
if ('time_cols' in params) or ('ind_vars' in params):
|
||||||
|
# if markov or gwr analysis
|
||||||
|
attrs = (params['time_cols'] if 'time_cols' in params
|
||||||
|
else params['ind_vars'])
|
||||||
|
|
||||||
for idx, val in enumerate(attrs):
|
for idx, val in enumerate(attrs):
|
||||||
attr_string += template % {"col": val, "alias_num": idx + 1}
|
attr_string += template % {"col": val, "alias_num": idx + 1}
|
||||||
@ -71,7 +75,7 @@ def query_attr_select(params):
|
|||||||
return attr_string
|
return attr_string
|
||||||
|
|
||||||
|
|
||||||
def query_attr_where(params):
|
def query_attr_where(params, table_ref=None):
|
||||||
"""
|
"""
|
||||||
Construct where conditions when building neighbors query
|
Construct where conditions when building neighbors query
|
||||||
Create portion of WHERE clauses for weeding out NULL-valued geometries
|
Create portion of WHERE clauses for weeding out NULL-valued geometries
|
||||||
@ -90,11 +94,14 @@ def query_attr_where(params):
|
|||||||
NULL AND idx_replace."time3" IS NOT NULL'
|
NULL AND idx_replace."time3" IS NOT NULL'
|
||||||
"""
|
"""
|
||||||
attr_string = []
|
attr_string = []
|
||||||
template = "idx_replace.\"%s\" IS NOT NULL"
|
template = "\"%s\" IS NOT NULL"
|
||||||
|
if table_ref is not None:
|
||||||
|
template = "idx_replace." + template
|
||||||
|
|
||||||
if 'time_cols' in params:
|
if ('time_cols' in params) or ('ind_vars' in params):
|
||||||
# markov where clauses
|
# markov or gwr where clauses
|
||||||
attrs = params['time_cols']
|
attrs = (params['time_cols'] if 'time_cols' in params
|
||||||
|
else params['ind_vars'])
|
||||||
# add values to template
|
# add values to template
|
||||||
for attr in attrs:
|
for attr in attrs:
|
||||||
attr_string.append(template % attr)
|
attr_string.append(template % attr)
|
||||||
@ -104,13 +111,16 @@ def query_attr_where(params):
|
|||||||
# get keys
|
# get keys
|
||||||
attrs = sorted([k for k in params
|
attrs = sorted([k for k in params
|
||||||
if k not in ('id_col', 'geom_col', 'subquery',
|
if k not in ('id_col', 'geom_col', 'subquery',
|
||||||
'num_ngbrs', 'subquery')])
|
'num_ngbrs', 'ind_vars')])
|
||||||
# add values to template
|
# add values to template
|
||||||
for attr in attrs:
|
for attr in attrs:
|
||||||
attr_string.append(template % params[attr])
|
attr_string.append(template % params[attr])
|
||||||
|
|
||||||
if len(attrs) == 2:
|
if len(attrs) == 2:
|
||||||
attr_string.append("idx_replace.\"%s\" <> 0" % params[attrs[1]])
|
check_zero = "\"%s\" <> 0" % params[attrs[1]]
|
||||||
|
if table_ref is not None:
|
||||||
|
check_zero = "idx_replace." + check_zero
|
||||||
|
attr_string.append(check_zero)
|
||||||
|
|
||||||
out = " AND ".join(attr_string)
|
out = " AND ".join(attr_string)
|
||||||
|
|
||||||
@ -177,6 +187,31 @@ def queen(params):
|
|||||||
|
|
||||||
return query.format(**params)
|
return query.format(**params)
|
||||||
|
|
||||||
|
def gwr_query(params):
|
||||||
|
"""
|
||||||
|
GWR query
|
||||||
|
"""
|
||||||
|
|
||||||
|
replacements = {"ind_vars_select": query_attr_select(params,
|
||||||
|
table_ref=None),
|
||||||
|
"ind_vars_where": query_attr_where(params,
|
||||||
|
table_ref=None)}
|
||||||
|
|
||||||
|
query = '''
|
||||||
|
SELECT
|
||||||
|
array_agg(ST_X({geom_col})) As x,
|
||||||
|
array_agg(ST_Y({geom_col})) As y,
|
||||||
|
array_agg({dep_var}) As dep_var,
|
||||||
|
%(ind_vars_select)s,
|
||||||
|
array_agg({id_col}) As rowid
|
||||||
|
FROM ({subquery}) As q
|
||||||
|
WHERE
|
||||||
|
{dep_var} IS NOT NULL AND
|
||||||
|
%(ind_vars_where)s
|
||||||
|
''' % replacements
|
||||||
|
|
||||||
|
return query.format(**params).strip()
|
||||||
|
|
||||||
# to add more weight methods open a ticket or pull request
|
# to add more weight methods open a ticket or pull request
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,14 +16,14 @@ def gwr(subquery, dep_var, ind_vars, fixed=False, kernel='bisquare'):
|
|||||||
|
|
||||||
x = np.array(query_result[0]['x'])
|
x = np.array(query_result[0]['x'])
|
||||||
y = np.array(query_result[0]['y'])
|
y = np.array(query_result[0]['y'])
|
||||||
coords = zip(x,y)
|
coords = zip(x, y)
|
||||||
|
|
||||||
Y = query_result[0]['dep'].reshape((-1,1))
|
Y = query_result[0]['dep'].reshape((-1, 1))
|
||||||
n = Y.shape[0]
|
n = Y.shape[0]
|
||||||
k = len(ind_vars)
|
k = len(ind_vars)
|
||||||
X = np.zeros((n, k))
|
X = np.zeros((n, k))
|
||||||
|
|
||||||
for attr in range(0,k):
|
for attr in range(0, k):
|
||||||
attr_name = 'attr' + str(attr+1)
|
attr_name = 'attr' + str(attr+1)
|
||||||
X[:, attr] = np.array(query_result[0][attr_name]).flatten()
|
X[:, attr] = np.array(query_result[0][attr_name]).flatten()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user