mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Adds new statistics/outputs to basic statistics plugin, thanks to Alexander Bruy for the patch
git-svn-id: http://svn.osgeo.org/qgis/trunk@12039 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
b6145a1042
commit
3c8107349b
@ -47,11 +47,11 @@ class VisualDialog( QDialog, Ui_Dialog ):
|
||||
# add all fields in combobox because now we can work with text fields too
|
||||
for i in changedField:
|
||||
if self.myFunction == 3:
|
||||
if changedField[i].type() == QVariant.Int or changedField[i].type() == QVariant.Double:
|
||||
# if changedField[i].type() == QVariant.Int or changedField[i].type() == QVariant.Double:
|
||||
self.cmbField.addItem( unicode( changedField[i].name() ) )
|
||||
else:
|
||||
self.cmbField.addItem( unicode( changedField[i].name() ) )
|
||||
self.cmbField.addItem( unicode( changedField[i].name() ) )
|
||||
# self.cmbField.addItem( unicode( changedField[i].name() ) )
|
||||
|
||||
def accept( self ):
|
||||
if self.inShape.currentText() == "":
|
||||
@ -246,19 +246,22 @@ class visualThread( QThread ):
|
||||
if nVal > 0.00:
|
||||
meanVal = sumVal / nVal
|
||||
lstStats = []
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "Max. len. : " ) + unicode( maxVal ) )
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "Min. len. : " ) + unicode( minVal ) )
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "Mean. len : " ) + unicode( meanVal ) )
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "Filled : " ) + unicode( fillVal ) )
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "Empty : " ) + unicode( emptyVal ) )
|
||||
lstStats.append( QCoreApplication.translate( "statResult", "N : " ) + unicode( nVal ) )
|
||||
lstStats.append( self.tr( "Max. len: " ) + " " + unicode( maxVal ) )
|
||||
lstStats.append( self.tr( "Min. len: " ) + " " + unicode( minVal ) )
|
||||
lstStats.append( self.tr( "Mean. len: " ) + " " + unicode( meanVal ) )
|
||||
lstStats.append( self.tr( "Filled: " ) + " " + unicode( fillVal ) )
|
||||
lstStats.append( self.tr( "Empty: " ) + " " + unicode( emptyVal ) )
|
||||
lstStats.append( self.tr( "N: " ) + " " + unicode( nVal ) )
|
||||
return ( lstStats, [] )
|
||||
else: # numeric field
|
||||
stdVal = 0
|
||||
cvVal = 0
|
||||
rangeVal = 0
|
||||
medianVal = 0
|
||||
if self.mySelection: # only selected features
|
||||
selection = vlayer.selectedFeatures()
|
||||
nFeat = vlayer.selectedFeatureCount()
|
||||
uniqueVal = utils.getUniqueValuesCount( vlayer, index, True )
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
|
||||
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
|
||||
for f in selection:
|
||||
@ -277,6 +280,7 @@ class visualThread( QThread ):
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
|
||||
else: # there is no selection, process the whole layer
|
||||
nFeat = vprovider.featureCount()
|
||||
uniqueVal = ftools_utils.getUniqueValuesCount( vlayer, index, False )
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
|
||||
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
|
||||
while vprovider.nextFeature( feat ):
|
||||
@ -294,6 +298,7 @@ class visualThread( QThread ):
|
||||
nElement += 1
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
|
||||
nVal= float( len( values ) )
|
||||
rangeVal = maxVal - minVal
|
||||
if nVal > 0.00:
|
||||
meanVal = sumVal / nVal
|
||||
if meanVal != 0.00:
|
||||
@ -301,14 +306,24 @@ class visualThread( QThread ):
|
||||
stdVal += ( ( val - meanVal ) * ( val - meanVal ) )
|
||||
stdVal = math.sqrt( stdVal / nVal )
|
||||
cvVal = stdVal / meanVal
|
||||
if nVal > 1:
|
||||
lstVal = values
|
||||
lstVal.sort()
|
||||
if ( nVal % 2 ) == 0:
|
||||
medianVal = 0.5 * ( lstVal[ int( ( nVal - 1 ) / 2 ) ] + lstVal[ int( ( nVal ) / 2 ) ] )
|
||||
else:
|
||||
medianVal = lstVal[ ( nVal + 1 ) / 2 ]
|
||||
lstStats = []
|
||||
lstStats.append( "Mean : " + unicode( meanVal ) )
|
||||
lstStats.append( "StdDev : " + unicode( stdVal ) )
|
||||
lstStats.append( "Sum : " + unicode( sumVal) )
|
||||
lstStats.append( "Min : " + unicode( minVal ) )
|
||||
lstStats.append( "Max : " + unicode( maxVal ) )
|
||||
lstStats.append( "N : " + unicode( nVal ) )
|
||||
lstStats.append( "CV : " + unicode( cvVal ) )
|
||||
lstStats.append( self.tr( "Mean: " ) + " " + unicode( meanVal ) )
|
||||
lstStats.append( self.tr( "StdDev: " ) + " " + unicode( stdVal ) )
|
||||
lstStats.append( self.tr( "Sum: " ) + " " + unicode( sumVal) )
|
||||
lstStats.append( self.tr( "Min: " ) + " " + unicode( minVal ) )
|
||||
lstStats.append( self.tr( "Max: " ) + " " + unicode( maxVal ) )
|
||||
lstStats.append( self.tr( "N: " ) + " " + unicode( nVal ) )
|
||||
lstStats.append( self.tr( "CV: " ) + " " + unicode( cvVal ) )
|
||||
lstStats.append( self.tr( "Number of unique values: " ) + " " + unicode( uniqueVal ) )
|
||||
lstStats.append( self.tr( "Range: " ) + " " + unicode( rangeVal ) )
|
||||
lstStats.append( self.tr( "Median: " ) + " " + unicode( medianVal ) )
|
||||
return ( lstStats, [] )
|
||||
|
||||
def nearest_neighbour_analysis( self, vlayer ):
|
||||
|
@ -20,6 +20,7 @@
|
||||
# getUniqueValues( QgsVectorDataProvider, int *field id )
|
||||
# saveDialog( QWidget *parent )
|
||||
# getFieldType( QgsVectorLayer, QgsField.name() )
|
||||
# getUniqueValuesCount( QgsVectorLayer, int fieldIndex, bool useSelection ):
|
||||
#
|
||||
# -------------------------------------------------
|
||||
|
||||
@ -267,3 +268,24 @@ def getFieldType(vlayer, fieldName):
|
||||
for name, field in fields.iteritems():
|
||||
if field.name() == fieldName:
|
||||
return field.typeName()
|
||||
|
||||
# return the number of unique values in field
|
||||
def getUniqueValuesCount( vlayer, fieldIndex, useSelection ):
|
||||
vprovider = vlayer.dataProvider()
|
||||
allAttrs = vprovider.attributeIndexes()
|
||||
vprovider.select( allAttrs )
|
||||
count = 0
|
||||
values = []
|
||||
if useSelection:
|
||||
selection = vlayer.selectedFeatures()
|
||||
for f in selection:
|
||||
if f.attributeMap()[ fieldIndex ].toString() not in values:
|
||||
values.append( f.attributeMap()[ fieldIndex ].toString() )
|
||||
count += 1
|
||||
else:
|
||||
feat = QgsFeature()
|
||||
while vprovider.nextFeature( feat ):
|
||||
if feat.attributeMap()[ fieldIndex ].toString() not in values:
|
||||
values.append( feat.attributeMap()[ fieldIndex ].toString() )
|
||||
count += 1
|
||||
return count
|
||||
|
Loading…
x
Reference in New Issue
Block a user