QGIS/python/plugins/processing/algs/qgis/scripts/Frequency_analysis.py

34 lines
1.0 KiB
Python
Raw Normal View History

2014-10-03 10:41:44 +02:00
##Table=group
##Input=vector
##Fields=Field Input
##Frequency=output table
2015-01-09 19:02:50 +00:00
from processing.tools.vector import TableWriter
from collections import defaultdict
2017-04-26 13:13:08 +10:00
from qgis.core import QgsProcessingUtils
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
layer = QgsProcessingUtils.mapLayerFromString(Input, context)
inputFields = layer.fields()
fieldIdxs = []
fields = Fields.split(',')
2014-10-19 15:52:38 +02:00
for f in fields:
idx = inputFields.indexFromName(f)
if idx == -1:
raise GeoAlgorithmExecutionException('Field not found:' + f)
fieldIdxs.append(idx)
writer = TableWriter(Frequency, None, fields + ['FREQ'])
counts = {}
2017-04-26 13:13:08 +10:00
feats = QgsProcessingUtils.getFeatures(layer, context)
nFeats = QgsProcessingUtils.featureCount(layer, context)
counts = defaultdict(int)
for i, feat in enumerate(feats):
feedback.setProgress(int(100 * i / nFeats))
attrs = feat.attributes()
clazz = tuple([attrs[i] for i in fieldIdxs])
counts[clazz] += 1
2014-10-19 15:52:38 +02:00
for c in counts:
2016-01-14 08:57:04 +11:00
writer.addRecord(list(c) + [counts[c]])