#!/usr/bin/env python # coding: utf-8 # # Creating and Using Panel Data Using ArcGIS Defined Location Cubes # In[1]: import os as OS import arcpy as ARCPY import SSDataObject as SSDO import SSPanelObject as SSPO import SSPanel as PANEL ARCPY.overwriteOutput = True # ## Example: Per Capita Incomes Relative to National Average in California (1969 - 2010) # # - Create Defined Locations Cube from Repeating Shapes Feature Class # - Run Mann-Kendall Trend Statistic # - Save to NetCDF File # In[2]: inputFC = r'../data/CA_Counties_Panel.shp' outputCube = r'../data/CA_Panel.nc' fullFC = OS.path.abspath(inputFC) outputCube = OS.path.abspath(outputCube) fullPath, fcName = OS.path.split(fullFC) ssdo = SSDO.SSDataObject(inputFC) uniqueIDField = "MYID" timeField = "YEAR" analysisField = "PCR" panelObj = SSPO.SSPanelObject(inputFC) requireGeometry = panelObj.ssdo.shapeType.upper() == "POLYGON" panelObj.obtainData(uniqueIDField, "YEAR", "1 Years", fields = [analysisField], requireGeometry = requireGeometry) panelCube = PANEL.SSPanel(outputCube, panelObj = panelObj) varName = panelObj.fieldNames[0] panelCube.mannKendall(varName) panelCube.close() # ## Open Panel Cube From NetCDF File for Analysis # In[3]: panel = PANEL.SSPanel(outputCube) # ## Number of Locations and Time Periods # In[4]: print("# locations = {0}, # time periods = {1}".format(panel.numLocations, panel.numTime)) # ## List Variables # In[5]: print(panel.obtainVariableList()) # ## View Mann-Kendall Trend Results in PANDAS Data Frame # In[6]: import pandas as PANDAS locations = panel.locationLabel[0] z = panel.obtainValues('PCR_TREND_ZSCORE') pv = panel.obtainValues('PCR_TREND_PVALUE') d = {'PCR_TREND_ZSCORE':z, 'PCR_TREND_PVALUE':pv} df = PANDAS.DataFrame(d, index = locations) print(df.head()) # ## Get 3D Analysis Variable # In[7]: data = panel.obtainValues(analysisField) print(data.shape) # ## Use PySAL to Analyze LISA Markov Transitions # In[8]: import pysal as PYSAL w = PYSAL.open(r"../data/queen.gal").read() lm = PYSAL.LISA_Markov(data.T, w) print(lm.classes) # ## View Transistion Probabilities # In[9]: print(lm.p) # In[10]: panel.close() # In[ ]: