Comparing Three Nested Watersheds¶
In this notebook we’ll examine three sites along the Gwynns Falls, in Maryland. ‘Falls’ in this case is a local word for ‘River’, like in the Jones Falls or Gunpowder Falls. It doesn’t refer to a waterfall!
Because the three sites are in a row on the same river, the upstream site has a watershed that is nested inside of the middle site, which is nested inside the downstream site, which has the largest watershed.
[1]:
import hydrofunctions as hf
%matplotlib inline
The three stream gauges are:
- the farthest upstream is GWYNNS FALLS NEAR DELIGHT, MD, dv01589197
- the middle of stream is GWYNNS FALLS AT VILLA NOVA, MD, dv01589300
- the farthest downstream is GWYNNS FALLS AT WASHINGTON BLVD AT BALTIMORE, MD, dv01589352
[2]:
streamid = ['01589197', '01589300','01589352']
# request data for our two sites for a three-year period.
sites = hf.NWIS(streamid, 'dv', start_date='2001-01-01', end_date='2003-12-31')
sites
Requested data from https://waterservices.usgs.gov/nwis/dv/?format=json%2C1.1&sites=01589197%2C01589300%2C01589352&startDT=2001-01-01&endDT=2003-12-31
[2]:
USGS:01589197: GWYNNS FALLS NEAR DELIGHT, MD
00060: <Day> Discharge, cubic feet per second
USGS:01589300: GWYNNS FALLS AT VILLA NOVA, MD
00060: <Day> Discharge, cubic feet per second
USGS:01589352: GWYNNS FALLS AT WASHINGTON BLVD AT BALTIMORE, MD
00060: <Day> Discharge, cubic feet per second
Start: 2001-01-01 00:00:00+00:00
End: 2003-12-31 00:00:00+00:00
[3]:
#create a dataframe of the sites
Q = sites.df('discharge')
#rename the columns
Q.columns=['Upper', 'Middle', 'Lower']
#show the first few rows of the data
Q.head()
[3]:
Upper | Middle | Lower | |
---|---|---|---|
datetimeUTC | |||
2001-01-01 00:00:00+00:00 | 1.8 | 18.0 | 29.0 |
2001-01-02 00:00:00+00:00 | 1.8 | 17.0 | 28.0 |
2001-01-03 00:00:00+00:00 | 1.8 | 16.0 | 27.0 |
2001-01-04 00:00:00+00:00 | 1.8 | 17.0 | 31.0 |
2001-01-05 00:00:00+00:00 | 1.8 | 16.0 | 31.0 |
[4]:
#look at the descriptive statistics for each part of the stream.
#Note that the mean and standard deviation increase as you move down the stream
Q.describe()
[4]:
Upper | Middle | Lower | |
---|---|---|---|
count | 1095.000000 | 1095.000000 | 1095.000000 |
mean | 5.211306 | 44.910210 | 92.074055 |
std | 10.177445 | 79.268103 | 173.157576 |
min | 0.250000 | 1.860000 | 8.730000 |
25% | 1.590000 | 14.000000 | 27.800000 |
50% | 2.720000 | 24.400000 | 43.000000 |
75% | 5.000000 | 42.850000 | 80.800000 |
max | 161.000000 | 1140.000000 | 2140.000000 |
[5]:
#create a flow duration for each of the streams
hf.flow_duration(Q)
[5]:
(<Figure size 432x288 with 1 Axes>,
<matplotlib.axes._subplots.AxesSubplot at 0x1fe91e24978>)

[6]:
# create a hydrograph of the upper portion of the stream.
# the .loc method selects a subset of a dataframe.
# The first item selects rows, with ':' selecting every row.
# The second item selects columns, with 'Upper' selecting the column with the 'Upper' label.
# The .plot() method plots the values in the columns on the y axis, with the rows as the x axis.
Q.loc[:, 'Upper'].plot()
C:\Users\Marty\Anaconda3\envs\py37hfdev\lib\site-packages\pandas\core\arrays\datetimes.py:1172: UserWarning: Converting to PeriodArray/Index representation will drop timezone information.
"will drop timezone information.", UserWarning)
[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fe920d60b8>
