31
31
32
32
from qgis .PyQt .QtGui import QIcon
33
33
34
- from qgis .core import QgsStatisticalSummary
34
+ from qgis .core import (QgsStatisticalSummary ,
35
+ QgsFeatureRequest ,
36
+ NULL )
35
37
36
38
from processing .core .GeoAlgorithm import GeoAlgorithm
37
39
from processing .core .parameters import ParameterVector
@@ -107,36 +109,16 @@ def processAlgorithm(self, progress):
107
109
108
110
outputFile = self .getOutputValue (self .OUTPUT_HTML_FILE )
109
111
110
- cvValue = 0
111
- minValue = 0
112
- maxValue = 0
113
- sumValue = 0
114
- meanValue = 0
115
- medianValue = 0
116
- stdDevValue = 0
117
- minority = 0
118
- majority = 0
119
- firstQuartile = 0
120
- thirdQuartile = 0
121
- nullValues = 0
122
- iqr = 0
123
-
124
- values = []
125
-
126
- features = vector .features (layer )
112
+ request = QgsFeatureRequest ().setFlags (QgsFeatureRequest .NoGeometry ).setSubsetOfAttributes ([fieldName ], layer .fields ())
113
+ stat = QgsStatisticalSummary ()
114
+ features = vector .features (layer , request )
127
115
count = len (features )
128
116
total = 100.0 / float (count )
129
117
for current , ft in enumerate (features ):
130
- value = ft [fieldName ]
131
- if value or value == 0 :
132
- values .append (float (value ))
133
- else :
134
- nullValues += 1
135
-
118
+ stat .addVariant (ft [fieldName ])
136
119
progress .setPercentage (int (current * total ))
137
120
138
- stat = QgsStatisticalSummary ()
139
- stat .calculate (values )
121
+ stat .finalize ()
140
122
141
123
count = stat .count ()
142
124
uniqueValue = stat .variety ()
@@ -147,13 +129,13 @@ def processAlgorithm(self, progress):
147
129
meanValue = stat .mean ()
148
130
medianValue = stat .median ()
149
131
stdDevValue = stat .stDev ()
150
- if meanValue != 0.00 :
151
- cvValue = stdDevValue / meanValue
132
+ cvValue = stdDevValue / meanValue if meanValue != 0 else 0
152
133
minority = stat .minority ()
153
134
majority = stat .majority ()
154
135
firstQuartile = stat .firstQuartile ()
155
136
thirdQuartile = stat .thirdQuartile ()
156
137
iqr = stat .interQuartileRange ()
138
+ nullValues = stat .countMissing ()
157
139
158
140
data = []
159
141
data .append (self .tr ('Analyzed layer: {}' ).format (layer .name ()))
0 commit comments