コード例 #1
0
    def testIndividualStats(self):
        # tests calculation of statistics one at a time, to make sure statistic calculations are not
        # dependent on each other
        tests = [{'stat': QgsDateTimeStatisticalSummary.Count, 'expected': 9},
                 {'stat': QgsDateTimeStatisticalSummary.CountDistinct, 'expected': 6},
                 {'stat': QgsDateTimeStatisticalSummary.CountMissing, 'expected': 2},
                 {'stat': QgsDateTimeStatisticalSummary.Min, 'expected': QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54))},
                 {'stat': QgsDateTimeStatisticalSummary.Max, 'expected': QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1))},
                 {'stat': QgsDateTimeStatisticalSummary.Range, 'expected': QgsInterval(693871147)},
                 ]

        s = QgsDateTimeStatisticalSummary()
        for t in tests:
            # test constructor
            s2 = QgsDateTimeStatisticalSummary(t['stat'])
            self.assertEqual(s2.statistics(), t['stat'])

            s.setStatistics(t['stat'])
            self.assertEqual(s.statistics(), t['stat'])
            s.calculate([QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                         QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                         QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                         QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                         QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                         QDateTime(),
                         QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                         QDateTime(),
                         QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54))])
            self.assertEqual(s.statistic(t['stat']), t['expected'])

            # display name
            self.assertTrue(len(QgsDateTimeStatisticalSummary.displayName(t['stat'])) > 0)
コード例 #2
0
 def testDates(self):
     """ test with date values """
     s = QgsDateTimeStatisticalSummary()
     self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
     s.calculate(
         [
             QDate(2015, 3, 4),
             QDate(2015, 3, 4),
             QDate(2019, 12, 28),
             QDate(),
             QDate(1998, 1, 2),
             QDate(),
             QDate(2011, 1, 5),
         ]
     )
     self.assertEqual(s.count(), 7)
     self.assertEqual(
         set(s.distinctValues()),
         set(
             [
                 QDateTime(QDate(2015, 3, 4), QTime()),
                 QDateTime(QDate(2019, 12, 28), QTime()),
                 QDateTime(QDate(1998, 1, 2), QTime()),
                 QDateTime(),
                 QDateTime(QDate(2011, 1, 5), QTime()),
             ]
         ),
     )
     self.assertEqual(s.countMissing(), 2)
     self.assertEqual(s.min(), QDateTime(QDate(1998, 1, 2), QTime()))
     self.assertEqual(s.max(), QDateTime(QDate(2019, 12, 28), QTime()))
     self.assertEqual(s.range(), QgsInterval(693792000))
コード例 #3
0
 def testStats(self):
     s = QgsDateTimeStatisticalSummary()
     self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
     s.calculate([QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                  QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                  QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                  QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                  QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                  QDateTime(),
                  QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                  QDateTime(),
                  QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54))])
     self.assertEqual(s.count(), 9)
     self.assertEqual(s.countDistinct(), 6)
     self.assertEqual(set(s.distinctValues()),
                      set([QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                           QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                           QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                           QDateTime(),
                           QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                           QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54))]))
     self.assertEqual(s.countMissing(), 2)
     self.assertEqual(s.min(), QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)))
     self.assertEqual(s.max(), QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)))
     self.assertEqual(s.range(), QgsInterval(693871147))
コード例 #4
0
 def testVariantStats(self):
     """ test with non-datetime values """
     s = QgsDateTimeStatisticalSummary()
     self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
     s.calculate(
         [
             QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
             "asdasd",
             QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
             34,
             QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
             QDateTime(),
             QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
             QDateTime(),
             QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54)),
         ]
     )
     self.assertEqual(s.count(), 7)
     self.assertEqual(
         set(s.distinctValues()),
         set(
             [
                 QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                 QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                 QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                 QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54)),
                 QDateTime(),
             ]
         ),
     )
     self.assertEqual(s.countMissing(), 2)
     self.assertEqual(s.min(), QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)))
     self.assertEqual(s.max(), QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)))
     self.assertEqual(s.range(), QgsInterval(693871147))
コード例 #5
0
    def testStats(self):
        # we test twice, once with values added as a list and once using values
        # added one-at-a-time

        dates = [
            QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
            QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
            QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
            QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
            QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
            QDateTime(),
            QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
            QDateTime(),
            QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54)),
        ]
        s = QgsDateTimeStatisticalSummary()
        self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
        s.calculate(dates)
        s2 = QgsDateTimeStatisticalSummary()
        for d in dates:
            s2.addValue(d)
        s2.finalize()
        self.assertEqual(s.count(), 9)
        self.assertEqual(s2.count(), 9)
        self.assertEqual(s.countDistinct(), 6)
        self.assertEqual(s2.countDistinct(), 6)
        self.assertEqual(
            set(s.distinctValues()),
            set(
                [
                    QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                    QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                    QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                    QDateTime(),
                    QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                    QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54)),
                ]
            ),
        )
        self.assertEqual(s2.distinctValues(), s.distinctValues())
        self.assertEqual(s.countMissing(), 2)
        self.assertEqual(s2.countMissing(), 2)
        self.assertEqual(s.min(), QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)))
        self.assertEqual(s2.min(), QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)))
        self.assertEqual(s.max(), QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)))
        self.assertEqual(s2.max(), QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)))
        self.assertEqual(s.range(), QgsInterval(693871147))
        self.assertEqual(s2.range(), QgsInterval(693871147))
コード例 #6
0
    def testIndividualStats(self):
        # tests calculation of statistics one at a time, to make sure statistic calculations are not
        # dependent on each other
        tests = [
            {"stat": QgsDateTimeStatisticalSummary.Count, "expected": 9},
            {"stat": QgsDateTimeStatisticalSummary.CountDistinct, "expected": 6},
            {"stat": QgsDateTimeStatisticalSummary.CountMissing, "expected": 2},
            {"stat": QgsDateTimeStatisticalSummary.Min, "expected": QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54))},
            {"stat": QgsDateTimeStatisticalSummary.Max, "expected": QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1))},
            {"stat": QgsDateTimeStatisticalSummary.Range, "expected": QgsInterval(693871147)},
        ]

        # we test twice, once with values added as a list and once using values
        # added one-at-a-time
        s = QgsDateTimeStatisticalSummary()
        s3 = QgsDateTimeStatisticalSummary()
        for t in tests:
            # test constructor
            s2 = QgsDateTimeStatisticalSummary(t["stat"])
            self.assertEqual(s2.statistics(), t["stat"])

            s.setStatistics(t["stat"])
            self.assertEqual(s.statistics(), t["stat"])
            s3.setStatistics(t["stat"])

            dates = [
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                QDateTime(),
                QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                QDateTime(),
                QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54)),
            ]
            s.calculate(dates)
            s3.reset()
            for d in dates:
                s3.addValue(d)
            s3.finalize()

            self.assertEqual(s.statistic(t["stat"]), t["expected"])
            self.assertEqual(s3.statistic(t["stat"]), t["expected"])

            # display name
            self.assertTrue(len(QgsDateTimeStatisticalSummary.displayName(t["stat"])) > 0)
コード例 #7
0
 def testTimes(self):
     """ test with time values """
     s = QgsDateTimeStatisticalSummary()
     self.assertEqual(s.statistics(), QgsDateTimeStatisticalSummary.All)
     s.calculate([QTime(11, 3, 4),
                  QTime(15, 3, 4),
                  QTime(19, 12, 28),
                  QTime(),
                  QTime(8, 1, 2),
                  QTime(),
                  QTime(19, 12, 28)])
     self.assertEqual(s.count(), 7)
     self.assertEqual(s.countDistinct(), 5)
     self.assertEqual(s.countMissing(), 2)
     self.assertEqual(s.min().time(), QTime(8, 1, 2))
     self.assertEqual(s.max().time(), QTime(19, 12, 28))
     self.assertEqual(s.statistic(QgsDateTimeStatisticalSummary.Min), QTime(8, 1, 2))
     self.assertEqual(s.statistic(QgsDateTimeStatisticalSummary.Max), QTime(19, 12, 28))
     self.assertEqual(s.range(), QgsInterval(40286))
コード例 #8
0
ファイル: StatisticsByCategories.py プロジェクト: m-kuhn/QGIS
    def calcDateTimeStats(self, values, sink, feedback):
        stat = QgsDateTimeStatisticalSummary()

        total = 50.0 / len(values) if values else 0
        current = 0
        for cat, v in values.items():
            if feedback.isCanceled():
                break

            feedback.setProgress(int(current * total) + 50)

            stat.calculate(v)
            f = QgsFeature()
            f.setAttributes(list(cat) + [stat.count(),
                                         stat.countDistinct(),
                                         stat.countMissing(),
                                         stat.count() - stat.countMissing(),
                                         stat.statistic(QgsDateTimeStatisticalSummary.Min),
                                         stat.statistic(QgsDateTimeStatisticalSummary.Max)
                                         ])

            sink.addFeature(f, QgsFeatureSink.FastInsert)
            current += 1
コード例 #9
0
 def testMissing(self):
     s = QgsDateTimeStatisticalSummary()
     s.calculate([NULL,
                  'not a date'])
     self.assertEqual(s.countMissing(), 2)
コード例 #10
0
 def testMissing(self):
     s = QgsDateTimeStatisticalSummary()
     s.calculate([NULL, 'not a date'])
     self.assertEqual(s.countMissing(), 2)
コード例 #11
0
    def testIndividualStats(self):
        # tests calculation of statistics one at a time, to make sure statistic calculations are not
        # dependent on each other
        tests = [
            {
                'stat': QgsDateTimeStatisticalSummary.Count,
                'expected': 9
            },
            {
                'stat': QgsDateTimeStatisticalSummary.CountDistinct,
                'expected': 6
            },
            {
                'stat': QgsDateTimeStatisticalSummary.CountMissing,
                'expected': 2
            },
            {
                'stat': QgsDateTimeStatisticalSummary.Min,
                'expected': QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54))
            },
            {
                'stat': QgsDateTimeStatisticalSummary.Max,
                'expected': QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1))
            },
            {
                'stat': QgsDateTimeStatisticalSummary.Range,
                'expected': QgsInterval(693871147)
            },
        ]

        # we test twice, once with values added as a list and once using values
        # added one-at-a-time
        s = QgsDateTimeStatisticalSummary()
        s3 = QgsDateTimeStatisticalSummary()
        for t in tests:
            # test constructor
            s2 = QgsDateTimeStatisticalSummary(t['stat'])
            self.assertEqual(s2.statistics(), t['stat'])

            s.setStatistics(t['stat'])
            self.assertEqual(s.statistics(), t['stat'])
            s3.setStatistics(t['stat'])

            dates = [
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2011, 1, 5), QTime(15, 3, 1)),
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2015, 3, 4), QTime(11, 10, 54)),
                QDateTime(QDate(2019, 12, 28), QTime(23, 10, 1)),
                QDateTime(),
                QDateTime(QDate(1998, 1, 2), QTime(1, 10, 54)),
                QDateTime(),
                QDateTime(QDate(2011, 1, 5), QTime(11, 10, 54))
            ]
            s.calculate(dates)
            s3.reset()
            for d in dates:
                s3.addValue(d)
            s3.finalize()

            self.assertEqual(s.statistic(t['stat']), t['expected'])
            self.assertEqual(s3.statistic(t['stat']), t['expected'])

            # display name
            self.assertTrue(
                len(QgsDateTimeStatisticalSummary.displayName(t['stat'])) > 0)