River Discharge Data Analysis

3.0 hrs
Run online using:
  1. Jupyter
  2. Lab
     Jupyter logo.png

    Irina Overeem at INSTAAR - University of Colorado Boulder.

In this lab, we learn about river stage and discharge, using gage height data downloaded from the USGS for the upper Colorado River. We use standard Python libraries to read, analyze, and visualize the data.

Classroom organization
This lab is appropriate for advanced undergraduates and graduate students majoring in earth science/engineering.

We will be looking at data on river discharge--the volume of water transported through a given cross section per time--in the Colorado River. This Jupyter Notebook lends itself to a short introduction on the concept of river discharge and how it is measured, as well as an introduction to the gauging stations of the USGS. The data analysis requires basic Python data handling skills, but the coding is introductory level.

Students can run the Notebook, and they're encouraged to do assignments on their own or as homework. A review and discussion of solutions by the instructor after completion by the participants is recommended.

Download associated file: RiverStageDischargeIntroduction.pdf
Concept Diagrams of Stage and Discharge Measurements

Learning objectives
  • Load data from a CSV file using the pandas library
  • Access data in a DataFrame
  • Create plots of data from a DataFrame
  • Save plots to a file
Key concepts
  • River discharge and stage
  • Stage-discharge relationship
  • Difficulties in relating stage to discharge

Lab notes
River discharge data for many US rivers is available from the USGS WaterWatch website:

River stage data is typically measured by keeping track of the water surface height over time, i.e. stage, and this needs to be converted to discharge through a stage-discharge relationship.

Tabular data like these, with a combination of dates, name and data quality strings, and numbers are best handled by spreadsheets where entries such as dates and times are in some useful format. In Python the Python Data Analysis Library (a.k.a. Pandas) is really useful for this purpose.

We use one discharge data file downloaded for the USGS station at Kremmling, CO, for the Upper Colorado.

This lab can be run on either the lab (for educators) or jupyter (for general use) instance of the OpenEarthscape JupyterHub: just click one of the links under the Run online using heading at the top of this page, then run the notebook in the "CSDMS" kernel.

If you don't already have a JupyterHub account, follow the instructions to sign up at If you're an educator, you can get JupyterHub accounts for students--please contact us through the CSDMS Help Desk:

If run locally, this lab requires the installtion of the Python packages matplotlib and pandas.

This material is based upon work supported by the National Science Foundation under Grant No. 1831623, Community Facility Support: The Community Surface Dynamics Modeling System (CSDMS).