edits of segmentation providers

This commit is contained in:
Andy Eschbacher
2017-01-30 17:59:22 -05:00
parent cee8967274
commit 1f2eb6ccfd
@@ -3,7 +3,11 @@ import plpy
import pysal_utils as pu import pysal_utils as pu
class AnalysisDataProvider: class AnalysisDataProvider(object):
"""
Analysis data provider for crankshaft functions. These mostly rely on
plpy data sources.
"""
def get_getis(self, w_type, params): def get_getis(self, w_type, params):
"""fetch data for getis ord's g""" """fetch data for getis ord's g"""
try: try:
@@ -66,41 +70,59 @@ class AnalysisDataProvider:
except plpy.SPIError, err: except plpy.SPIError, err:
plpy.error('Analysis failed: %s' % err) plpy.error('Analysis failed: %s' % err)
def get_model_data(self, params): def get_segmentation_model_data(self, params):
"""fetch data for Segmentation""" """
columns = ','.join(['array_agg("{col}") As "{col}"'.format(col=col) fetch data for Segmentation
params = {"subquery": query,
"target": variable,
"features": feature_columns}
"""
columns = ', '.join(['array_agg("{col}") As "{col}"'.format(col=col)
for col in params['feature_columns']]) for col in params['feature_columns']])
query = '''
query = ("SELECT" SELECT
"array_agg({target}) As target," array_agg("{target}") As target,
"{columns} As feature", {columns}
"FROM ({subquery}) As q").format(params['query'], FROM ({subquery}) As q
['variable']) '''.format(subquery=params['subquery'],
target=params['target'],
columns=columns)
try: try:
data = plpy.execute(query) data = plpy.execute(query)
return data return data
except plpy.SPIError, err: except plpy.SPIError, err:
plpy.error('Failed to build segmentation model: %s' % err) plpy.error('Failed to build segmentation model: %s' % err)
def get_segment_data(self, params): def get_segmentation_data(self, params):
"""fetch cartodb_ids""" """
query = ("SELECT" params = {"subquery": target_query,
"array_agg({id_col} ORDER BY {id_col}) as ids," "id_col": id_col}
"FROM ({subquery}) as q").format(**params) """
query = '''
SELECT
array_agg("{id_col}" ORDER BY "{id_col}") as "ids"
FROM ({subquery}) as q
'''.format(**params)
try: try:
data = plpy.execute(query) data = plpy.execute(query)
return data return data
except plpy.SPIError, err: except plpy.SPIError, err:
plpy.error('Failed to build segmentation model: %s' % err) plpy.error('Failed to build segmentation model: %s' % err)
def get_predict_data(self, params): def get_segmentation_predict_data(self, params):
"""fetch data for Segmentation""" """
fetch data for Segmentation
joined_features = ','.join(['"{0}"::numeric'.format(a) params = {"subquery": target_query,
for a in features_columns]) "feature_columns": feature_columns}
query = ("SELECT" """
"Array({joined_features}) As features," joined_features = ', '.join(['"{}"::numeric'.format(a)
"FROM ({subquery}) as q").format(**params) for a in params['feature_columns']])
query = '''
SELECT
Array({joined_features}) As features
FROM ({subquery}) as q
'''.format(subquery=params['subquery'],
joined_features=joined_features)
try: try:
cursor = plpy.cursor(query) cursor = plpy.cursor(query)
return cursor return cursor