Introduction

rainfall QC example

Do you need to quality control your rainfall data?

This package provides tools for quality controlling rain gauge data in a flexible, user-driven way. It is designed to help everyone apply standardised quality control (QC) checks to rainfall observations, whether you have one rain gauge or a whole network of rain gauges.

At its core, the package offers:

  • 33 QC checks for rainfall data as of v1.1.0 (25 from IntenseQC, 6 from SubHourlyQC and 2 from pyPWSQC)

  • Customizable parameters – adjust thresholds, streak or accumulation lengths, and distances to neighboring gauges

  • A modular QC framework – users can select which QC methods to apply, and configure them according to their project’s requirements

This approach allows you to build a tailored QC pipeline: include only the checks you need, set thresholds that match your research purposes, and run consistent, reproducible quality control.

What type of checks are in the package?

The RainfallQC package breaks down the QC checks into six distinct types:

  • Gauge checks – For detecting abnormalities in summary and descriptive statistics.

  • Comparison checks – For detecting abnormalities based on rainfall benchmarks.

  • Time-series checks – For detecting abnormalities in patterns of the data record.

  • Neighbourhood checks – For detecting abnormalities based on measurements in neighbouring rain gauges.

  • Sub-hourly checks – An extension for the IntenseQC framework with thresholds to apply to sub-hourly rainfall data.

  • pypwsqc filters – For applying quality assurance protocols and filters for rainfall data.

These different types of rainfall checks are either rainfall-specific or not and need different amounts of data to run (Figure 1).

rainfallQC quadrant

Types of checks within RainfallQC

All QC checks in package

These are the quality control checks currently implemented in the package:

All QC checks

Check

Sub-module

QC Framework

Note

Percentiles

Gauge checks

IntenseQC

QC1

K-largest

Gauge checks

IntenseQC

QC2

Days of week

Gauge checks

IntenseQC

QC3

Hours of day

Gauge checks

IntenseQC

QC4

Intermittency

Gauge checks

IntenseQC

QC5

Breakpoints

Gauge checks

IntenseQC

QC6

Minimum value change

Gauge checks

IntenseQC

QC7

R99p

Comparison checks

IntenseQC

QC8

PRCPTOT

Comparison checks

IntenseQC

QC9

World Record

Comparison checks

IntenseQC

QC10

Rx1day

Comparison checks

IntenseQC

QC11

CDD (Dry spells)

Timeseries checks

IntenseQC

QC12

Daily accumulations

Timeseries checks

IntenseQC

QC13

Monthly accumulations

Timeseries checks

IntenseQC

QC14

Streaks

Timeseries checks

IntenseQC

QC15

Daily neighbours (wet)

Neighbourhood checks

IntenseQC

QC16

Hourly neighbours (wet)

Neighbourhood checks

IntenseQC

QC17

Daily neighbours (dry)

Neighbourhood checks

IntenseQC

QC18

Hourly neighbours (dry)

Neighbourhood checks

IntenseQC

QC19

Monthly neighbours

Neighbourhood checks

IntenseQC

QC20

Timing offset

Neighbourhood checks

IntenseQC

QC21

Pre-QC affinity index

Neighbourhood checks

IntenseQC

QC22

Pre-QC pearson correlation

Neighbourhood checks

IntenseQC

QC23

Daily factor

Neighbourhood checks

IntenseQC

QC24

Monthly factor

Neighbourhood checks

IntenseQC

QC25

Check exceedance of UK 1h record

Sub-hourly thresholds

SubHourlyQC

HQC_UK1hr

Check exceedance of UK 24h record

Sub-hourly thresholds

SubHourlyQC

HQC_UK24hr

Check 24h-sum exceedance of UK 24h record

Sub-hourly thresholds

SubHourlyQC

HQC_UK24hr_rolling

Check streaks (20 mm min)

Sub-hourly thresholds

SubHourlyQC

HQC_streaks_20mm

Check data has sub-hourly frequency

Sub-hourly thresholds

SubHourlyQC

SHQC_freqResChecker

Check sub-hourly rainfall thresholds

Sub-hourly thresholds

SubHourlyQC

SHQC_subH_checkr

Faulty Zeros

pyPWSQC filters

pyPWSQC

FZ

Station Outliers

pyPWSQC filters

pyPWSQC

SO