Select to view content in your preferred language

Feature Class table reporting - value occurrence reporting

374
4
3 weeks ago
cmartin_puc
New Contributor

anyone know of a simple way to report the following on an attribute table?

  • Field Names
    • List of values in the field
      • Number of occurrences of each value

Example:

  • Field Name: Phase Configuration
    • Yellow: 1764
    • Red: 851
    • Blue: 289

 

0 Kudos
4 Replies
DanPatterson
MVP Esteemed Contributor

through model builder with a field iterator calling

Summary Statistics (Analysis)—ArcGIS Pro | Documentation with the "count" option

obviously, only for fields of Text type

Iterate Fields (ModelBuilder)—ArcGIS Pro | Documentation

Or if you want other statistics for interval/ratio data type fields, you could accommodate that as well


... sort of retired...
RobertCollins
Esri Contributor

Echoing the comment above from Dan that the Summary Statistics tool would probably be a good starting point.

The graphic on the documentation's help page shows a visual example of how it'd work for your table. 

The tool will output a table, containing each unique value in the field and the count of how many times this value occurs.

Alternatively, if you wanted to give Python a go a workflow along the lines of the following might be suitable:

  • Set the path to your feature class
  • Identify field to summarise
  • Read the values
  • Count the occurrences
  • Output the results

There is a built in python module called "collections" and within this the "counter" class can be used to count the occurrences of items in a list or iterable.   

0 Kudos
D_Atkins
Regular Contributor

Quick and rough implementation; replace "table = poly_selection[0]" with a reference to your own table...

''' 
A short script to:
   1. Get the list of fields from a table, 
   2. Iterate every row of the table (using da.SearchCursor)
   3. Use list and dictionary to collect 
      3a. List of fields, dictionary of values, count of occurrences
      3b. Optionally, limit # of unique values to report.
   4. Prints results to the console.
'''

import arcpy

### PREPROCESS FOR LIVING ATLAS
poly = "https://services2.arcgis.com/FiaPA4ga0iQKduv3/arcgis/rest/services/USA_Block_Groups_v1/FeatureServer/0"
poly_layer = arcpy.management.MakeFeatureLayer(poly, "Atlas Census Blocks LayerView")
poly_selection = arcpy.management.SelectLayerByAttribute(
    in_layer_or_view = poly_layer, 
    where_clause     = "COUNTY = '173' And STATE = '37'"
)

### Unique Values, All Fields from Table:
## My Table...
table = poly_selection[0]

## Get the List of Fields from My Table
fields = arcpy.ListFields(table)

## Empty Results:
fields_list    = []  # list
fields_summary = {}  # dictionary

## List of Fields, and a 'Summary' Results Dictionary
for field in fields:
    fields_list.append(field.name)
    fields_summary[field.name] = [field.type, field.length, {}]

print('Found', len(fields_summary), 'fields.')

## Now, try to Collect and Count values for every Field:
with arcpy.da.SearchCursor(table, fields_list) as sCursor:
    for row in sCursor:                             # for each row, 
        
        for index,item in enumerate(fields_list):   # for each field
                value_dict = fields_summary[item][2]               

               
                if len(value_dict) > 100:    ## limit number of unique_values to manage
                    value_dict['MORE VALUES'] = value_dict.get('MORE VALUES', 1) + 1
                else:
                    value_dict[row[index]] = value_dict.get(row[index], 1) + 1                
                
## Print our results:
for key in fields_summary:
    print('Field:',key,'\n', fields_summary[key], '\n')

 

0 Kudos
RhettZufelt
MVP Notable Contributor

Depends on how "simple" you want.  

One simple way is to load into Pro/ArcMap and symbolize on the Phase Configuration field, then select Show Counts.

RhettZufelt_0-1761865458850.png

 

R_

0 Kudos