4 votos

Cómo escribir los valores de arcpy la producción estadística a la mesa?

La secuencia de comandos adjunta es mi estancado intento de realizar el siguiente flujo de trabajo:

  1. Crear una tabla y crear campos
  2. El bucle a través de una carpeta de punto de shapefiles y realizar el promedio de análisis del vecino más cercano
  3. Crear una fila y escribir "nn_values[]" los campos correspondientes
  4. mover a la siguiente shapefile y repetir

Correctamente la secuencia de comandos genera una tabla, se ejecuta la aNN análisis para un shapefile y se agrega una fila vacía en la mesa. Como un producto final, me gustaría una tabla con todos los valores de de los análisis estadísticos. ¿Cómo puedo escribir los asociados aNN estadístico de salida (es decir, "nn_values[]") a los campos correspondientes en cada iteración en la for bucle? Muchas gracias por la orientación.

# Import system modules
import arcpy, os
from arcpy import env

# Set over write
env.overwriteOutput = 1

# Local variables...
env.workspace = r"C:\temp"
Dir = env.workspace
out_name = "NNtable.dbf"

### Execute CreateTable
arcpy.CreateTable_management(Dir, out_name)

### Add fields
arcpy.AddField_management(Dir + "\\" + out_name, "index", "FLOAT")
arcpy.AddField_management(Dir + "\\" + out_name, "z_score", "FLOAT")
arcpy.AddField_management(Dir + "\\" + out_name, "p_value", "FLOAT")
arcpy.AddField_management(Dir + "\\" + out_name, "expected", "FLOAT")
arcpy.AddField_management(Dir + "\\" + out_name, "observed", "FLOAT")
arcpy.AddField_management(Dir + "\\" + out_name, "pathway", "TEXT")

# List FCs

fclist = arcpy.ListFeatureClasses()

for fc in fclist:
    try:

        # Obtain Nearest Neighbor Ratio and z-score
        # Process: Average Nearest Neighbor...
        nn_output = arcpy.AverageNearestNeighbor_stats(fc, "EUCLIDEAN_DISTANCE", "NO_REPORT", "#")

        # Create list of Average Nearest Neighbor output values by splitting the result object
        nn_values = nn_output.split(";")
        print "The nearest neighbor index is: " + nn_values[0]
        print "The z-score of the nearest neighbor index is: " + nn_values[1]
        print "The p-value of the nearest neighbor index is: " + nn_values[2]
        print "The expected mean distance is: " + nn_values[3]
        print "The observed mean distance is: " + nn_values[4]
        print "The path of the HTML report: " + nn_values[5]

    except:
        # If an error occurred when running the tool, print out the error message.
        print arcpy.GetMessages()

    # Create insert cursor for table 
    # 
    rows = arcpy.InsertCursor(Dir + "\\" + out_name) 
    row = rows.newRow() 
    rows.insertRow(row) 

    # Delete cursor and row objects to remove locks on the data  
    del row 
    del rows

11voto

Prachur Puntos 111

NOTA:

El ESRI documentación no parecen representar con precisión una forma de obtener información de la Media de Vecino más Cercano de la herramienta. Algunos los cambios se hicieron de abajo para reflejar lo que los valores pueden ser derivados de la resultados.

Básicamente, sólo necesitan hacer un par de asignaciones de atributos que corresponden a su recién creado campos en el bucle. Ver a continuación:

# Create insert cursor for table 
rows = arcpy.InsertCursor(Dir + "\\" + out_name) 
for fc in fclist:
    try:

        # Obtain Nearest Neighbor Ratio and z-score
        # Process: Average Nearest Neighbor...
        nn_output = arcpy.AverageNearestNeighbor_stats(fc, "EUCLIDEAN_DISTANCE", "NO_REPORT", "#")

        row = rows.newRow()
        row.nn_ratio = float(nn_output.getOutput(0))
        row.z_score = float(nn_output.getOutput(1))
        row.p_value = float(nn_output.getOutput(2))
        row.expected = float(nn_output.getOutput(3))
        row.observed = float(nn_output.getOutput(4))
        rows.insertRow(row) 

    except:
        # If an error occurred when running the tool, print out the error message.
        print arcpy.GetMessages()

del row, rows

Tenga en cuenta que he cambiado el llamado de la inserción del cursor antes de que el bucle. Esto mantendrá abierta hasta que se ha ejecutado a través de cada función. Esto completará el cuadro con el análisis estadístico de los resultados de cada featureclass. Usted debe considerar la adición de un campo adicional a su mesa para actuar como un identificador para que featureclass los resultados se refieren a (agregar un "nombre_de_operación en la columna" por ejemplo).

Usted puede obtener más detalles sobre cómo rellenar las tablas con una inserción del cursor aquí.

ACTUALIZACIÓN:

Resultados interesantes... me encontré con algunos de la prueba después de que estaba el fallo, y parece como si, a pesar de la documentación que se indique lo contrario, el nn_output variable no devuelve una lista delimitada por punto y coma, sino que devuelve un solo valor que representa el vecino más cercano relación. Para obtener las otras salidas, usted tiene que cavar con nn_output.getOutput(n). Aquí es lo que tengo, el primer bit es el de los mensajes de la devuelve al ejecutar la herramienta y el segundo es mi getOutput llamadas:

Observed Mean Distance:  41.780370  
Expected Mean Distance:  408.133786 
Nearest Neighbor Ratio:  0.102369   
z-score:                 -137.421360
p-value:                 0.000000  

>>> nn_output.getOutput(0)
u'0.102369'
>>> nn_output.getOutput(1)
u'-137.42136'
>>> nn_output.getOutput(2)
u'0'
>>> nn_output.getOutput(3)
u'408.133786'
>>> nn_output.getOutput(4)
u'41.78037'

Como se puede ver, el orden de la getOutputs no siguen el orden de los mensajes. Además, yo no podía ver un camino para obtener el informe en formato HTML o índice del vecino más cercano. Asegúrese de ejecutar una prueba para asegurarse de que están poblando los valores adecuados en la derecha de los campos. He editado mi anterior código para reflejar estos hallazgos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X