From Record Monthly Surplus to the Largest Annual Deficit in 6 Years

On May 25, 2018, Judy Woodruff interviewed Marc Short, White House Director Of Legislative Affairs, on the PBS Newshour. The video and transcript can be found at this link. At 2:43 in the video, Marc Short states the following:

And, lastly, in April, we had the largest surplus on record in American history. That is a result of the growth and the revenues coming into the federal government because of the tax plan.

A Washington Times article similarly reported the record surplus. It starts:

The federal government took in a record tax haul in April en route to its biggest-ever monthly budget surplus, the Congressional Budget Office said, as a surging economy left Americans with more money in their paychecks — and this more to pay to Uncle Sam.

All told the government collected \$515 billion and spent \$297 billion, for a total monthly surplus of \$218 billion. That swamped the previous monthly record of \$190 billion, set in 2001.

However, the article went on to give more perspective than Marc Short, stating:

April is always a strong month for government finances, with taxpayers filing their returns for the previous year and settling up what they owe, even as expenditures often dip for the month.

But this year was particularly strong, with receipts jumping 13 percent compared to a year ago.

Following is Python code which reads the Monthly Treasury Statements for the current issue and previous issues and plots the monthly receipts, oulays, and surplus/deficit starting in October of 2014.

In [2]:
# Monthly Treasury Statement (MTS) - Current Issue:
# https://www.fiscal.treasury.gov/fsreports/rpt/mthTreasStmt/current.htm (before 11/30/2018)
# https://www.fiscal.treasury.gov/reports-statements/mts/current.html (new)
# Monthly Treasury Statement (MTS) - Previous Issues:
# https://www.fiscal.treasury.gov/fsreports/rpt/mthTreasStmt/backissues.htm (before 11/30/2018)
# https://www.fiscal.treasury.gov/reports-statements/mts/previous.html (new)

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import datetime
pd.set_option('display.width', 120)
#pd.set_option('max_rows', 200)

# START OF VARIABLES TO UPDATE
month_index_last = 12 # 10 = July
year_last = 2019
yrmo_last = '1909'
moyr_last = '0919'
# variable for debts
month_last = 9
debt_filename_last = 'mtsdebts_1704_1909.csv'
debt_filename_all  = 'mtsdebts_1503_1909.csv'
# (Note: manually update Jupyter URL and last month in final note below)
# END OF VARIABLES TO UPDATE
savefig_recout = "mts" + yrmo_last + "recout12m.png"
savefig_rec    = "mts" + yrmo_last + "rec12m.png"
savefig_recoth = "mts" + yrmo_last + "recoth12m.png"
savefig_def    = "mts" + yrmo_last + "def12m.png"
xlabel_last = "Source: Monthly Treasury Statements (see http://econdataus.com/mts" + yrmo_last + ".html"
# For 1018, had to change extention from .xls to .xlsx
#xlsx_files_last = "https://www.fiscal.treasury.gov/files/reports-statements/mts/mts" + moyr_last + ".xlsx"
# For 0319, had to change extention from .xlsx to .xls - UPDATE IF NEEDED
# For 0419, had to change extention from .xls to .xlsx - UPDATE IF NEEDED
xlsx_files_last = "https://www.fiscal.treasury.gov/files/reports-statements/mts/mts" + moyr_last + ".xlsx"

xlsx_files_yr = [
    'https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0915.xls',
    'https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0916.xls',
    'https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0917.xls',
    'https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0918.xls',
    xlsx_files_last
]
def joinyear(year):
    iyr = year - 2015
    #print("BEFORE "+xlsx_files_yr[iyr])
    xx = pd.read_excel(xlsx_files_yr[iyr], sheet_name='Table 7', index_col=0, skiprows=4)
    #print(" AFTER "+xlsx_files_yr[iyr])
    if year < 2099: # fix required for mts1118.xls # was 2019
        xx = xx.iloc[[0,1,3,4,5,6,7,8,9,10,99,102], 0:12]
    else:
        #xx = xx.iloc[[0,1,3,4,5,6,7,8,9,10,97,100], 0:12]
        xx = xx.iloc[[0,1,3,4,5,6,7,8,9,10,98,101], 0:12] # UPDATE for mts0319.xls
    years = [year-1,year-1,year-1,year,year,year,year,year,year,year,year,year]
    months = ['10','11','12','01','02','03','04','05','06','07','08','09']
    #months = [10,11,12,1,2,3,4,5,6,7,8,9]
    for i in range(0,12):
        years[i] = str(years[i])+"-"+months[i]+"-01"
    xx.columns = pd.to_datetime(years)
    xx.index = ['Individual','Corporation','Employment','Unemployment','Other Retirement',
                'Excise','Estate','Customs','Miscellaneous','Total Receipts','Total Outlays','Surplus/Deficit']
    if year >= year_last:
        xx = xx.iloc[:, 0:month_index_last]
    #print(xx)
    return(xx)

def joinyears(start_year, end_year):
    yy = joinyear(2015)
    for year in range(start_year+1, end_year+1):
        yy = yy.join(joinyear(year))
    return(yy.T)

def dofilter(ff, numeric=True, rollingsum=False, normalize=False, divisor=1000):
    #print(yy)
    #print(yy.T)
    first = 0
    for i in range(0,len(ff.columns)):
        #print(ff.iloc[:,i]) #DEBUG
        if (numeric):
            ff.iloc[:,i] = ff.iloc[:,i].str.replace(',','').astype(int)
        if (rollingsum):
            ff.iloc[:,i] = ff.iloc[:,i].rolling(window=12).sum()
            first = 11
        if (normalize):
            ff.iloc[:,i] = ff.iloc[:,i] - ff.iloc[first,i]
        ff.iloc[:,i] = ff.iloc[:,i]/divisor
    #yy = yy.T
    #yy = yy.iloc[:,9:]
    return(ff)

yy0 = joinyears(2015, year_last) # year_last gives error

yy = yy0.copy()
zz = dofilter(yy)
defs = zz.iloc[:,9:]
print('U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Monthly Amount ($billions)')
print(defs)
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.plot(defs)
ax.set_title('U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Monthly Amount')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(defs.columns)
U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Monthly Amount ($billions)
            Total Receipts  Total Outlays  Surplus/Deficit
2014-10-01         212.719        334.432         -121.713
2014-11-01         191.436        248.254          -56.818
2014-12-01         335.327        333.463            1.864
2015-01-01         306.742        324.289          -17.546
2015-02-01         139.388        331.738         -192.350
2015-03-01         234.187        287.105          -52.918
2015-04-01         471.801        315.092          156.709
2015-05-01         212.386        296.454          -84.068
2015-06-01         342.933        292.447           50.487
2015-07-01         225.493        374.680         -149.187
2015-08-01         210.837        275.257          -64.420
2015-09-01         365.473        274.412           91.061
2015-10-01         211.046        347.604         -136.558
2015-11-01         204.968        269.517          -64.549
2015-12-01         349.631        364.075          -14.444
2016-01-01         313.579        258.416           55.163
2016-02-01         169.147        361.757         -192.610
2016-03-01         227.848        335.891         -108.043
2016-04-01         438.432        331.977          106.455
2016-05-01         224.604        277.111          -52.507
2016-06-01         329.572        323.320            6.252
2016-07-01         209.998        322.817         -112.819
2016-08-01         231.327        338.438         -107.112
2016-09-01         356.537        323.178           33.359
2016-10-01         221.692        267.523          -45.831
2016-11-01         199.875        336.544         -136.669
2016-12-01         319.204        346.541          -27.337
2017-01-01         344.069        292.812           51.257
2017-02-01         171.713        363.757         -192.044
2017-03-01         216.584        392.816         -176.233
2017-04-01         455.605        273.177          182.428
2017-05-01         240.418        328.841          -88.423
2017-06-01         338.660        428.894          -90.233
2017-07-01         232.040        274.980          -42.939
2017-08-01         226.311        334.000         -107.689
2017-09-01         348.722        340.722            8.000
2017-10-01         235.341        298.555          -63.214
2017-11-01         208.374        346.922         -138.547
2017-12-01         325.797        348.989          -23.192
2018-01-01         361.038        311.801           49.237
2018-02-01         155.623        370.862         -215.239
2018-03-01         210.832        419.576         -208.744
2018-04-01         510.447        296.192          214.255
2018-05-01         217.075        363.871         -146.796
2018-06-01         316.278        391.136          -74.858
2018-07-01         225.266        302.131          -76.865
2018-08-01         219.115        433.263         -214.148
2018-09-01         343.559        224.443          119.116
2018-10-01         252.692        353.183         -100.491
2018-11-01         205.961        410.864         -204.903
2018-12-01         312.584        326.123          -13.539
2019-01-01         339.980        331.299            8.681
2019-02-01         167.265        401.243         -233.977
2019-03-01         228.811        375.756         -146.945
2019-04-01         535.545        375.240          160.304
2019-05-01         232.064        439.833         -207.768
2019-06-01         333.952        342.430           -8.477
2019-07-01         251.348        371.043         -119.695
2019-08-01         227.965        428.309         -200.344
2019-09-01         374.028        291.260           82.768
C:\Users\bdavi\Anaconda3\lib\site-packages\pandas\plotting\_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.

To register the converters:
	>>> from pandas.plotting import register_matplotlib_converters
	>>> register_matplotlib_converters()
  warnings.warn(msg, FutureWarning)
Out[2]:
<matplotlib.legend.Legend at 0x25f436ee940>

The reason for starting in October of 2014 is that this date is the start of fiscal year 2015, the first year for which the Treasury has spreadsheets posted on its site. In any event, the above plot clearly shows that receipts and surpluses peak in April of every year, presumedly due to taxpayers filing their returns. The plot also shows that the prior two months appeared to have had the largest monthly deficits since at least October of 2014. In fact, a ZeroHedge article mentions that the "March budget deficit of \$208.7 billion was 18% higher than \$176.2BN deficit recorded last March, and was the biggest March budget deficit in US history."

In order to factor in the periodic surpluses and deficits that occur over each year, it makes sense to look at the 12-month rolling sum of these values. That is done in the following Python code and the resulting plot.

In [3]:
yy = yy0.copy()
zz = dofilter(yy, rollingsum=True, normalize=True)
dd = zz.iloc[:,9:]
print('U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Change in 12-Month Rolling Sum ($billions)')
print(dd.iloc[11:,:])
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.plot(dd)
ax.set_title('U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Change in 12-Month Rolling Sum')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(dd.columns)
fig.savefig(savefig_recout)
U.S. TREASURY RECEIPTS, OUTLAYS, AND DEFICITS: Change in 12-Month Rolling Sum ($billions)
            Total Receipts  Total Outlays  Surplus/Deficit
2015-09-01           0.000          0.000            0.000
2015-10-01          -1.673         13.172          -14.845
2015-11-01          11.859         34.435          -22.576
2015-12-01          26.163         65.047          -38.884
2016-01-01          33.000         -0.826           33.825
2016-02-01          62.759         29.193           33.565
2016-03-01          56.420         77.979          -21.560
2016-04-01          23.051         94.864          -71.814
2016-05-01          35.269         75.521          -40.253
2016-06-01          21.908        106.394          -84.488
2016-07-01           6.413         54.531          -48.120
2016-08-01          26.903        117.712          -90.812
2016-09-01          17.967        166.478         -148.514
2016-10-01          28.613         86.397          -57.787
2016-11-01          23.520        153.424         -129.907
2016-12-01          -6.907        135.890         -142.800
2017-01-01          23.583        170.286         -146.706
2017-02-01          26.149        172.286         -146.140
2017-03-01          14.885        229.211         -214.330
2017-04-01          32.058        170.411         -138.357
2017-05-01          47.872        222.141         -174.273
2017-06-01          56.960        327.715         -270.758
2017-07-01          79.002        279.878         -200.878
2017-08-01          73.986        275.440         -201.455
2017-09-01          66.171        292.984         -226.814
2017-10-01          79.820        324.016         -244.197
2017-11-01          88.319        334.394         -246.075
2017-12-01          94.912        336.842         -241.930
2018-01-01         111.881        355.831         -243.950
2018-02-01          95.791        362.936         -267.145
2018-03-01          90.039        389.696         -299.656
2018-04-01         144.881        412.711         -267.829
2018-05-01         121.538        447.741         -326.202
2018-06-01          99.156        409.983         -310.827
2018-07-01          92.382        437.134         -344.753
2018-08-01          85.186        536.397         -451.212
2018-09-01          80.023        420.118         -340.096
2018-10-01          97.374        474.746         -377.373
2018-11-01          94.961        538.688         -443.729
2018-12-01          81.748        515.822         -434.076
2019-01-01          60.690        535.320         -474.632
2019-02-01          72.332        565.701         -493.370
2019-03-01          90.311        521.881         -431.571
2019-04-01         115.409        600.929         -485.522
2019-05-01         130.398        676.891         -546.494
2019-06-01         148.072        628.185         -480.113
2019-07-01         174.154        697.097         -522.943
2019-08-01         183.004        692.143         -509.139
2019-09-01         213.473        758.960         -545.487

As can be seen, the 12-month rolling sum of receipts has increased by about \$54 billion since Trump took office. However, yearly outlays have increased by about \$248 billion, causing the yearly deficit to increase by about \$194 billion.

Focusing on the receipts, the following Python code plots the 12-month rolling sum of the three largest contributors to receipts. Those are individual income taxes, corporation income taxes, and employment taxes. Employment taxes consist chiefly of payroll taxes.

In [4]:
yy = yy0.copy()
zz = dofilter(yy, rollingsum=True, normalize=True)
dd = zz.iloc[:,0:3]
oo = zz.iloc[:,3:9]
dd.is_copy = False # avoids warning
dd['Other'] = oo.sum(axis=1, skipna=False)
print('SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum ($billions)')
print(dd.iloc[11:,:])
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.plot(dd)
ax.set_title('SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(dd.columns)
fig.savefig(savefig_rec)
C:\Users\bdavi\Anaconda3\lib\site-packages\pandas\core\generic.py:5079: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.
  object.__getattribute__(self, name)
C:\Users\bdavi\Anaconda3\lib\site-packages\pandas\core\generic.py:5080: FutureWarning: Attribute 'is_copy' is deprecated and will be removed in a future version.
  return object.__setattr__(self, name, value)
SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum ($billions)
            Individual  Corporation  Employment   Other
2015-09-01       0.000        0.000       0.000   0.000
2015-10-01       2.559       -5.972       3.988  -2.246
2015-11-01      10.216       -4.881       8.562  -2.036
2015-12-01      13.914      -12.141      11.811  12.582
2016-01-01      17.945      -12.406      16.014  11.449
2016-02-01      42.063      -12.997      17.654  16.039
2016-03-01      33.234      -10.207      14.795  18.598
2016-04-01      11.202      -17.770      17.591  12.029
2016-05-01      23.123      -20.568      21.486  11.227
2016-06-01       4.124      -32.064      36.512  13.334
2016-07-01      -5.139      -34.125      41.966   3.709
2016-08-01       7.193      -35.307      46.639   8.376
2016-09-01       5.274      -44.226      51.856   5.061
2016-10-01      17.630      -46.205      53.786   3.400
2016-11-01      15.739      -49.235      55.199   1.816
2016-12-01       6.549      -53.395      63.748 -23.810
2017-01-01      22.550      -51.443      69.245 -16.769
2017-02-01      19.069      -45.508      76.799 -24.209
2017-03-01      25.997      -65.900      78.177 -23.389
2017-04-01       9.145      -41.846      86.171 -21.412
2017-05-01      16.170      -40.453      91.980 -19.826
2017-06-01      32.888      -44.354      91.741 -23.315
2017-07-01      46.474      -43.875      95.701 -19.300
2017-08-01      40.823      -43.675      98.500 -21.663
2017-09-01      46.318      -46.750     101.447 -34.844
2017-10-01      52.574      -45.298     105.935 -33.391
2017-11-01      59.553      -48.245     110.909 -33.899
2017-12-01      79.893      -58.273     108.561 -35.272
2018-01-01      98.975      -56.093     111.046 -42.050
2018-02-01      83.112      -60.563     112.585 -39.348
2018-03-01      87.200      -68.376     114.130 -42.920
2018-04-01     152.207      -85.929     115.835 -37.238
2018-05-01     140.765      -88.932     117.691 -47.991
2018-06-01     152.568     -108.302     101.066 -46.182
2018-07-01     148.775     -113.039     103.451 -46.811
2018-08-01     145.908     -117.829     106.892 -49.792
2018-09-01     142.734     -139.064     110.707 -34.361
2018-10-01     143.768     -134.793     113.162 -24.770
2018-11-01     138.436     -134.135     116.157 -25.505
2018-12-01     129.116     -150.163     126.012 -23.222
2019-01-01     109.939     -154.735     130.601 -25.121
2019-02-01     121.212     -153.412     134.993 -30.467
2019-03-01     130.288     -149.685     139.923 -30.220
2019-04-01     148.770     -147.165     145.607 -31.808
2019-05-01     159.923     -149.686     150.143 -29.984
2019-06-01     138.723     -136.418     176.630 -30.864
2019-07-01     156.490     -133.747     179.687 -28.277
2019-08-01     156.033     -131.690     183.143 -24.483
2019-09-01     177.056     -113.554     186.946 -36.978

As can be seen, yearly individual income tax receipts have risen about \$124 billion under Trump. Yearly employment tax receipts have risen about \$34 billion and yearly corporation tax receipts have dropped about \$94 billion. It is interesting to note that most of the drop in corporation tax receipts have occurred since the passage of the Tax Cuts and Jobs Act of 2017 so that may be the most visible effect of the tax bill on receipts. The surge in individual tax receipts likely has little to do with the tax bill since the taxes paid in April are based on the prior tax law. Regarding individual tax receipts, the Washington Times article does say the following:

Analysts said they’ll have a better idea of what’s behind the surge as more information rolls in, but for now said it looks like individual taxpayers are paying more because they have higher incomes.

“Those payments were mostly related to economic activity in 2017 and may reflect stronger-than-expected income growth in that year,” the analysts said in their monthly budget review. “Part of the strength in receipts also may reflect larger-than-anticipated payments for economic activity in 2018. The reasons for the added revenues will be better understood as more detailed information becomes available later this year.”

In any event, the following Python code shows the 12-month rolling sum of the other contributors to receipts.

In [5]:
yy = yy0.copy()
zz = dofilter(yy, rollingsum=True, normalize=True)
dd = zz.iloc[:,3:9]
print('OTHER SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum ($billions)')
print(dd.iloc[11:,:])
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.plot(dd)
ax.set_title('OTHER SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(dd.columns)
fig.savefig(savefig_recoth)
OTHER SOURCES OF U.S. TREASURY RECEIPTS: Change in 12-Month Rolling Sum ($billions)
            Unemployment  Other Retirement  Excise  Estate  Customs  Miscellaneous
2015-09-01         0.000             0.000   0.000   0.000    0.000          0.000
2015-10-01        -1.031             0.018  -0.338   0.714   -0.050         -1.559
2015-11-01         0.585             0.036  -0.040   0.919   -0.127         -3.409
2015-12-01         0.158             0.121   0.116   1.117   -0.027         11.097
2016-01-01        -0.147             0.081  -0.451   1.043   -0.003         10.926
2016-02-01        -0.709             0.129  -0.202   1.355    0.012         15.454
2016-03-01        -0.696             0.134  -0.161   1.314    0.258         17.749
2016-04-01        -4.766             0.139  -0.346   1.217   -0.374         16.159
2016-05-01        -2.184             0.157  -0.944   1.006   -0.495         13.687
2016-06-01        -2.314             0.174  -1.134   1.430   -0.655         15.833
2016-07-01        -3.947             0.201  -1.936   1.690   -1.198          8.899
2016-08-01        -2.603             0.241  -2.254   2.187   -0.153         10.958
2016-09-01        -2.324             0.254  -3.235   2.122   -0.206          8.450
2016-10-01        -1.757             0.269  -3.105   1.316   -0.572          7.249
2016-11-01        -3.186             0.293  -3.442   1.153   -0.562          7.560
2016-12-01        -3.154             0.322  -3.727   0.896   -0.607        -17.540
2017-01-01        -0.679             0.394  -4.733   2.053   -0.687        -13.117
2017-02-01        -4.115             0.388  -6.032   1.815   -0.737        -15.528
2017-03-01        -4.194             0.397  -4.999   2.190   -0.943        -15.840
2017-04-01        -4.511             0.414  -6.628   3.240   -0.732        -13.195
2017-05-01        -4.866             0.435  -5.310   3.763   -0.738        -13.110
2017-06-01        -4.811             0.541  -4.802   3.544   -0.648        -17.139
2017-07-01        -2.751             0.521  -3.079   3.418   -0.519        -16.890
2017-08-01        -5.265             0.526  -3.111   3.421   -0.525        -16.709
2017-09-01        -5.367             0.540 -14.458   3.538   -0.469        -18.628
2017-10-01        -5.207             0.549 -12.702   3.827   -0.299        -19.559
2017-11-01        -5.578             0.567 -12.693   4.208   -0.096        -20.307
2017-12-01        -5.644             0.590 -12.264   3.998    0.165        -22.117
2018-01-01        -5.191             0.609 -11.212   3.854    0.386        -30.496
2018-02-01        -5.233             0.622 -10.696   4.876    0.570        -29.487
2018-03-01        -5.236             0.639 -10.480   4.361    0.987        -33.191
2018-04-01        -0.719             0.660  -7.933   2.763    1.426        -33.435
2018-05-01        -5.632             0.687  -8.731   2.398    1.973        -38.686
2018-06-01        -5.653             0.709  -8.806   2.551    2.612        -37.595
2018-07-01        -5.599             0.742  -8.890   2.889    3.583        -39.536
2018-08-01        -5.999             0.750  -8.152   3.056    4.885        -44.332
2018-09-01        -6.136             0.850  -3.292   3.750    6.256        -35.789
2018-10-01        -6.078             0.872   3.960   4.089    8.568        -36.181
2018-11-01        -6.458             0.979   4.255   3.563   11.753        -39.597
2018-12-01        -6.475             0.981   4.567   3.517   14.638        -40.450
2019-01-01        -8.579             0.848   5.175   2.326   18.078        -42.969
2019-02-01        -8.949             0.981   4.650   1.451   20.480        -49.080
2019-03-01        -9.059             0.981   4.642   0.925   22.559        -50.268
2019-04-01        -8.846             1.015   4.830   0.595   24.348        -53.750
2019-05-01        -9.811             1.131   5.098  -0.267   26.314        -52.449
2019-06-01        -9.875             1.082   4.865  -0.792   28.410        -54.554
2019-07-01       -10.005             1.121   5.017  -1.417   30.724        -53.717
2019-08-01       -10.193             1.152   4.729  -1.472   33.480        -52.179
2019-09-01       -10.244             1.107   0.636  -2.561   35.741        -61.657

As can be seen, yearly receipts from excise taxes have risen about \$3 billion, customs taxes have risen about \$7 billion, and yearly miscellaneous receipts have fallen about \$20 billion since Trump took office. Adding that to the \$124 billion gain in individual tax receipts, \$34 billion gain in employment tax receipts, and \$94 billion loss in corporation tax receipts gives a total gain of about \$54 billion for all receipts, same as was shown in the second plot above.

The CBO Monthly Budget Review for April 2018, referenced by the Washington Times article as mentioned above, starts as follows:

The federal budget deficit was \$382 billion for the first seven months of fiscal year 2018, the Congressional Budget Office estimates, \$37 billion more than the shortfall recorded during the same period last year. Revenues and outlays were higher, by 4 percent and 5 percent, respectively, than they were during the first seven months of fiscal year 2017.

Hence, despite the increase in receipts, the deficit is continuing to grow. The following Python code plots the increase the 12-month rolling sum of the deficit.

In [6]:
yy = yy0.copy()
zz = dofilter(yy, rollingsum=True)
dd = zz.iloc[:,[11]]
print('U.S. TREASURY SURPLUS/DEFICIT(-): 12-Month Rolling Sum ($billions)')
print(dd.iloc[11:,:])
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
ax.plot(dd)
ax.set_title('U.S. TREASURY SURPLUS/DEFICIT(-): 12-Month Rolling Sum')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(dd.columns)
fig.savefig(savefig_def)
U.S. TREASURY SURPLUS/DEFICIT(-): 12-Month Rolling Sum ($billions)
            Surplus/Deficit
2015-09-01         -438.899
2015-10-01         -453.744
2015-11-01         -461.475
2015-12-01         -477.783
2016-01-01         -405.074
2016-02-01         -405.334
2016-03-01         -460.459
2016-04-01         -510.713
2016-05-01         -479.152
2016-06-01         -523.387
2016-07-01         -487.019
2016-08-01         -529.711
2016-09-01         -587.413
2016-10-01         -496.686
2016-11-01         -568.806
2016-12-01         -581.699
2017-01-01         -585.605
2017-02-01         -585.039
2017-03-01         -653.229
2017-04-01         -577.256
2017-05-01         -613.172
2017-06-01         -709.657
2017-07-01         -639.777
2017-08-01         -640.354
2017-09-01         -665.713
2017-10-01         -683.096
2017-11-01         -684.974
2017-12-01         -680.829
2018-01-01         -682.849
2018-02-01         -706.044
2018-03-01         -738.555
2018-04-01         -706.728
2018-05-01         -765.101
2018-06-01         -749.726
2018-07-01         -783.652
2018-08-01         -890.111
2018-09-01         -778.995
2018-10-01         -816.272
2018-11-01         -882.628
2018-12-01         -872.975
2019-01-01         -913.531
2019-02-01         -932.269
2019-03-01         -870.470
2019-04-01         -924.421
2019-05-01         -985.393
2019-06-01         -919.012
2019-07-01         -961.842
2019-08-01         -948.038
2019-09-01         -984.386

As can be seen, the annual deficit has increased from just under \$600 billion per year when Trump took office to nearly \$800 billion per year now. In fact, a CNBC article describes it as follows:

The deficit jumped to \$779 billion, \$113 billion or 17 percent higher than the previous fiscal period, according to a statement from Treasury Secretary Steven Mnuchin and Office of Management and Budget Director Mick Mulvaney. It was larger than any year since 2012, when it topped \$1 trillion. The budget shortfall rose to 3.9 percent of U.S. gross domestic product.

The referenced statement from Steven Mnuchin and Mick Mulvaney contains the following table:

Budget in billions of $ Receipts Outlays Deficit
FY 2017 Actual 3,315 3,981 -666
Percentage of GDP 17.2% 20.7% 3.5%
FY 2018 Estimates:
2019 Budget 3,340 4,173 -833
2019 Mid-Session Review 3,322 4,171 -849
FY 2018 Actual 3,329 4,108 -779
Percentage of GDP 16.5% 20.3% 3.9%

As can be seen, both receipts and outlays increased from the prior year though receipts just increased slightly. However, the table shows that both receipts and outlays decreased as a percentage of GDP. In fact, the statement itself states:

As a percentage of GDP, receipts equaled 16.5 percent, 0.7 percentage point lower than in FY 2017 and 0.9 percentage point below the average over the last 40 years.

Also, the Congressional Budget Office's Monthly Budget Review for September 2018 states the following:

The federal budget deficit was \$782 billion in fiscal year 2018, the Congressional Budget Office estimates, \$116 billion more than the shortfall recorded in fiscal year 2017. As was the case last year, this year’s outlays were affected by shifts in the timing of certain payments that otherwise would have been due on a weekend. If not for those shifts, the deficit for the year would have been \$826 billion—\$162 billion larger than last year’s amount.

This shifting of payments was caused by the fact that October 1, 2017 was on a Sunday. For this reason, certain payments scheduled for that day had to be shifted to Friday, September 29 of the prior fiscal year. On the other hand, October 1, 2018 was on a Monday so no payments had to be shifted this year. In fact, this is the reason that the 12-month rolling sum for the deficit decreased sharply from \$890 billion to \$779 billion. For this month, September of 2017 (which had those additional shifted outlays) was dropped and September of 2018 (which had normal outlays) was added. As seen in the second graph above, this caused a drop in annual outlays and deficits. However, since outlays were shifted from FY2018 to FY2017 (but not from FY2019 to FY2018) this causes the FY2018 deficit to be lower by the amount of the shifted payments.

In any case, the record surplus in April does not appear to signify anything more than the fact that 2017 had relatively strong economic growth. Contrary to Marc Short's statement, it doesn't appear to have much, if anything, to do with the tax bill that was passed at the end of 2016. On the contrary, the fact that receipts are below their 40-year average, even in a good economy, suggests that the tax cuts have much to do with why the deficit is continuing to grow.

Looking at the Change in the Debt

On February 13, 2019, CNSNews.com released a story titled \$1,665,484,000,000: Feds Collect Record Individual Income Taxes in Calendar 2018--as Debt Climbed \$1,481,349,159,596.80. It states:

At the same time the Treasury was collecting record individual income taxes, the federal debt was climbing from \$20,492,746,546,193.75 at the close of 2017 to \$21,974,095,705,790.55 at the close of 2018. That was a one-year increase of \$1,481,349,159,596.80.

In order to verify these numbers, the following code takes data from the Monthly Treasury Statements since September of 2014.

In [7]:
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from pathlib import Path

def joinyear6(month, year):
    yr = year % 100
    smo = ['00','01','02','03','04','05','06','07','08','09','10','11','12']
    filetype = '.xls'
    if year <= 2015 and month <= 4:
        filetype = '.xlsx'
    if year == 2016 and month == 2:
        filetype = '.xlsx'
    if year == 2018 and month == 7:
        filetype = '.xlsx'
    if year == 2018 and month >= 10:
        filetype = '.xlsx'
    if year == 2019 and month <= 2: # UPDATE IF NEEDED
        filetype = '.xlsx'
    if year == 2019 and month >= 4: # UPDATE IF NEEDED
        filetype = '.xlsx'
    filepath = "https://www.fiscal.treasury.gov/files/reports-statements/mts/mts"+smo[month]+str(yr)+filetype
    print("BEFORE "+filepath)
    if year < 2017:
        xx = pd.read_excel(filepath, sheet_name='Table 6', index_col=0, skiprows=6)
    elif year == 2017 and month <= 3:
        xx = pd.read_excel(filepath, sheet_name='Table 6', index_col=0, skiprows=6)
    elif year == 2018 and month == 11:
        xx = pd.read_excel(filepath, sheet_name='Table 6', index_col=0, skiprows=6)
    elif year >= 2019 and month >= 2 and month <=3: # Debt Held by the Public on line 12 -> skiprows=6
        xx = pd.read_excel(filepath, sheet_name='Table 6', index_col=0, skiprows=6)
    else: # Debt Held by the Public on line 11 -> skiprows=5 - UPDATE IF NEEDED
        xx = pd.read_excel(filepath, sheet_name='Table 6', index_col=0, skiprows=5)
    
    #print(xx)
    #print(" AFTER "+filepath)
    xx = xx.iloc[4:7, 5]
    xx[0] = int(xx[0].replace(',',''))/1000
    xx[1] = int(xx[1].replace(',',''))/1000
    xx[2] = int(xx[2].replace(',',''))/1000
    xx.index = ['Public','Intragov','Gross']
    dd = pd.DataFrame(xx).T
    dd.index = [str(year)+"-"+smo[month]+"-01"] # set index to date
    #print(dd) #DEBUG
    return(dd)

def joinyears6(start_month, start_year, end_month, end_year):
    month = start_month
    year = start_year
    yy = joinyear6(month, year)
    month = month + 1
    if month > 12:
        month = 1
        year = year + 1
    while year < end_year or (year == end_year and month <= end_month):
        xx = joinyear6(month, year)
        yy = yy.append(xx)
        month = month + 1
        if month > 12:
            month = 1
            year = year + 1
    return(yy)

filename = 'mtsdebts_1409_1502.csv'
print("BEFORE "+filename)
zz = pd.read_csv(filename, index_col=0)


filename = 'mtsdebts_1503_1612.csv'
csvfile = Path(filename)
if csvfile.is_file():
    print("BEFORE "+filename)
    yy = pd.read_csv(filename, index_col=0)
else:
    yy = joinyears6(3, 2015, 12, 2016)
    yy.to_csv(filename)

zz = zz.append(yy)
filename = 'mtsdebts_1701_1703.csv'
print("BEFORE "+filename)
yy = pd.read_csv(filename, index_col=0)
zz = zz.append(yy)

#filename = 'mtsdebts_1704_1812.csv'
filename = debt_filename_last
csvfile = Path(filename)
if csvfile.is_file():
    print("BEFORE "+filename)
    yy = pd.read_csv(filename, index_col=0)
else:
    #yy = joinyears6(4, 2017, 12, 2018)
    yy = joinyears6(4, 2017, month_last, year_last)
    yy.to_csv(filename)

zz = zz.append(yy)
zz.index = pd.to_datetime(zz.index)
#zz.to_csv('mtsdebts_1503_1812.csv')
zz.to_csv(debt_filename_all)

#zz = pd.read_html(filepath) # for html format
#print(zz)
#print(zz.info())
BEFORE mtsdebts_1409_1502.csv
BEFORE mtsdebts_1503_1612.csv
BEFORE mtsdebts_1701_1703.csv
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0417.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0517.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0617.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0717.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0817.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0917.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1017.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1117.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1217.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0118.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0218.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0318.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0418.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0518.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0618.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0718.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0818.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0918.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1018.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1118.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts1218.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0119.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0219.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0319.xls
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0419.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0519.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0619.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0719.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0819.xlsx
BEFORE https://www.fiscal.treasury.gov/files/reports-statements/mts/mts0919.xlsx

The following table and graph of the Monthly Treasury Statement numbers show the increase in the national debt to the end of 2018.

In [8]:
print('U.S. DEBT HELD BY THE PUBLIC AND GROSS DEBT ($billions)')
zz0 = zz
zz0 = zz0.drop('Intragov', 1)
print(zz0)
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
colors = ['C0','C3']
#ax.plot(zz0)
zz0[:].plot(ax = ax, color=colors)
ax.set_title('U.S. DEBT HELD BY THE PUBLIC AND GROSS DEBT')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(zz0.columns)
savefig_debts = "mts" + yrmo_last + "debts.png"
fig.savefig(savefig_debts)
U.S. DEBT HELD BY THE PUBLIC AND GROSS DEBT ($billions)
             Public    Gross
2014-09-01    12785  17824.1
2014-10-01  12857.1  17937.2
2014-11-01  12922.7  18005.5
2014-12-01    13024  18141.4
2015-01-01  12984.9  18082.3
2015-02-01    13074  18155.9
2015-03-01  13090.4  18152.1
2015-04-01  13053.7  18152.6
2015-05-01  13052.7  18152.9
2015-06-01  13076.4    18152
2015-07-01    13135  18151.3
2015-08-01  13119.8  18151.2
2015-09-01  13123.8  18150.6
2015-10-01  13060.7    18153
2015-11-01    13589  18827.3
2015-12-01  13672.5  18922.2
2016-01-01  13657.2  19012.8
2016-02-01  13785.2  19125.5
2016-03-01  13924.9  19264.9
2016-04-01  13841.2  19187.4
2016-05-01  13886.3  19265.5
2016-06-01  13932.7  19381.6
2016-07-01  13998.2  19427.7
2016-08-01  14104.1  19510.3
2016-09-01  14173.4  19573.4
2016-10-01  14286.5  19805.7
2016-11-01  14443.7  19948.1
2016-12-01  14434.8  19976.8
2017-01-01  14376.1  19937.3
2017-02-01  14411.4  19959.6
...             ...      ...
2017-04-01  14293.3  19846.1
2017-05-01    14299  19845.9
2017-06-01  14366.2  19844.6
2017-07-01  14360.9  19844.9
2017-08-01  14381.6  19844.5
2017-09-01  14673.4  20244.9
2017-10-01  14751.4  20442.5
2017-11-01  14918.7  20590.4
2017-12-01  14814.7  20492.7
2018-01-01  14803.2  20493.7
2018-02-01  15150.6  20855.7
2018-03-01    15428  21089.6
2018-04-01  15335.1  21068.2
2018-05-01  15426.9  21145.2
2018-06-01  15466.6  21195.1
2018-07-01  15569.5  21313.1
2018-08-01  15785.4  21458.8
2018-09-01  15761.2  21516.1
2018-10-01  15843.3  21702.4
2018-11-01  16044.3  21850.1
2018-12-01  16101.7  21974.1
2019-01-01  16101.2  21982.4
2019-02-01  16250.9  22115.5
2019-03-01  16204.4  22027.9
2019-04-01  16192.8  22027.7
2019-05-01  16202.3  22026.4
2019-06-01  16188.4  22023.3
2019-07-01  16211.2  22022.4
2019-08-01  16596.8  22460.5
2019-09-01  16809.1  22719.4

[61 rows x 2 columns]

As can be seen above, the gross federal debt rose to nearly \$22 trillion at the end of 2018. This is the "federal debt" referenced in the CNSNews.com article. Also shown is the Debt Held by the Public which rose to over \$16 trillion. The difference between these to measures of the debt is the Intragovernmental Holdings. This is described on Wikipedia as follows:

In the United States, intragovernmental holdings are primarily composed of the Medicare Trust Fund, the Social Security Trust Fund, and Federal Financing Bank securities. A small amount of marketable securities are held by government accounts.

An interesting thing apparent in the graph is how the debt totals went flat for most of 2015 and 2017. This was caused by the debt ceiling, explained by this article as follows:

On March 15, 2015, the nation reached the debt ceiling of \$18.113 trillion. In response, the Treasury Secretary stopped issuing new debt. He took extraordinary measures to keep the debt from exceeding the limit. For example, he stopped payments to federal employee retirement funds. He also sold investments held by those funds. He kept the debt under the limit until Congress passed the Bipartisan Budget Act of 2015 on November 15. The ceiling remained suspended until March 15, 2017. That means the Treasury Department could not allow the statutory debt limit to go one penny higher than the \$19.808 trillion it was on that day.

Treasury kept the debt under that ceiling until September 8, 2017.

As explained earlier in that article, that was the day that "President Trump signed a bill increasing the debt ceiling to December 8, 2017".

The following graph looks at the 12-month rolling change in these debts, along with the 12-month rolling sum of the deficit shown earlier.

In [9]:
zzdiff = zz.diff()
zzdiff = -zzdiff.iloc[1:,]
zzdiff['Deficit'] = defs.iloc[0:,2]
zzrs = zzdiff.rolling(window=12).sum()
zzrs = zzrs.iloc[11:,]
#print(zz)
#print(zzdiff)

print('U.S. DEBTS AND DEFICIT: 12-Month Rolling Change ($billions)')
print(zzrs)
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
colors = ['C0','C2','C3','C1']
#ax.plot(zzrs)
#zzrs[['Public','Intragov','Gross','Deficit']].plot(ax = ax, color=colors)
zzrs[:].plot(ax = ax, color=colors)
ax.set_title('U.S. DEBTS AND DEFICIT: 12-Month Rolling Change')
ax.set_xlabel(xlabel_last)
ax.set_ylabel('Billions of Dollars')
ax.grid(zorder=0)
ax.legend(zzrs.columns)
savefig_debts12m = "mts" + yrmo_last + "debts12m.png"
fig.savefig(savefig_debts12m)
U.S. DEBTS AND DEFICIT: 12-Month Rolling Change ($billions)
              Public  Intragov     Gross  Deficit
2015-09-01  -338.876    12.330  -326.547 -438.899
2015-10-01  -203.600   -12.221  -215.822 -453.744
2015-11-01  -666.306  -155.466  -821.774 -461.475
2015-12-01  -648.570  -132.164  -780.735 -477.783
2016-01-01  -672.224  -258.309  -930.535 -405.074
2016-02-01  -711.152  -258.448  -969.601 -405.334
2016-03-01  -834.478  -278.404 -1112.883 -460.459
2016-04-01  -787.513  -247.314 -1034.827 -510.713
2016-05-01  -833.596  -279.004 -1112.600 -479.152
2016-06-01  -856.329  -373.265 -1229.593 -523.387
2016-07-01  -863.175  -413.197 -1276.372 -487.019
2016-08-01  -984.361  -374.786 -1359.146 -529.711
2016-09-01 -1049.576  -373.251 -1422.827 -587.413
2016-10-01 -1225.844  -426.890 -1652.733 -496.686
2016-11-01  -854.711  -266.031 -1120.742 -568.806
2016-12-01  -762.320  -292.328 -1054.648 -581.699
2017-01-01  -718.984  -205.450  -924.433 -585.605
2017-02-01  -626.192  -207.947  -834.139 -585.039
2017-03-01  -444.804  -136.677  -581.481 -653.229
2017-04-01  -452.150  -206.592  -658.742 -577.256
2017-05-01  -412.674  -167.816  -580.490 -613.172
2017-06-01  -433.443   -29.520  -462.963 -709.657
2017-07-01  -362.725   -54.490  -417.214 -639.777
2017-08-01  -277.448   -56.788  -334.237 -640.354
2017-09-01  -500.005  -171.450  -671.455 -665.713
2017-10-01  -464.945  -171.812  -636.759 -683.096
2017-11-01  -475.036  -167.291  -642.327 -684.974
2017-12-01  -379.879  -136.040  -515.920 -680.829
2018-01-01  -427.031  -129.437  -556.469 -682.849
2018-02-01  -739.208  -156.869  -896.078 -706.044
2018-03-01 -1058.328  -184.895 -1243.223 -738.555
2018-04-01 -1041.783  -180.287 -1222.071 -706.728
2018-05-01 -1127.937  -171.337 -1299.273 -765.101
2018-06-01 -1100.378  -250.137 -1350.516 -749.726
2018-07-01 -1208.548  -259.603 -1468.152 -783.652
2018-08-01 -1403.827  -210.490 -1614.317 -890.111
2018-09-01 -1087.726  -183.433 -1271.158 -778.995
2018-10-01 -1091.883  -168.013 -1259.896 -816.272
2018-11-01 -1125.582  -134.120 -1259.702 -882.628
2018-12-01 -1286.946  -194.404 -1481.349 -872.975
2019-01-01 -1298.057  -190.636 -1488.693 -913.531
2019-02-01 -1100.309  -159.546 -1259.854 -932.269
2019-03-01  -776.382  -161.855  -938.237 -870.470
2019-04-01  -857.662  -101.807  -959.468 -924.421
2019-05-01  -775.369  -105.839  -881.209 -985.393
2019-06-01  -721.858  -106.356  -828.213 -919.012
2019-07-01  -641.692   -67.616  -709.308 -961.842
2019-08-01  -811.427  -190.190 -1001.617 -948.038
2019-09-01 -1047.937  -155.405 -1203.344 -984.386

As can be seen in the table and graph above, the 12-month changes in the public and gross debts were generally larger (negatively) than the 12-month rolling sum of the deficit. However, the change in the debts reached a minimum in October of 2015 and August of 2017. Non-coincidently, these were the final months of the debt crises after which the debts caught up and continued their prior trends. Since it's been well over a year since the 2017 debt ceiling crisis ended, the latest 12-month rolling changes should not be much affected by it. It's not surprising that the change in the gross federal debt is larger since it includes intergovernmental debt. However, it does seem strange that the change in the Debt Held by the Public is so much larger, at over \$1.287 trillion. This would seem to merit further investigation.

In any event, one likely factor in the increasing debts and deficits is the Tax Cuts and Jobs Act of 2017. The [aforementioned CNSNews.com article] (https://www.cnsnews.com/news/article/terence-p-jeffrey/1665484000000-feds-collect-record-individual-income-taxes-calendar) concluded:

Even as inflation-adjusted individual income taxes increased from calendar year 2017 to calendar year 2018, total federal tax collections declined.

In calendar 2017, total federal tax collections in constant December 2018 dollars were \$3,407,503,740,000. In calendar year 2018, they were \$3,330,470,000,000—a decline of \$77,033,740,000 from 2017.

Corporation income tax collections declined significantly from calendar year 2017 to calendar year 2018. In calendar 2017, the Treasury collected \$290,978,980,000 in corporation income taxes (in constant December 2018 dollars). In calendar 2018, the Treasury collected \$195,790,000,000 in corporation income taxes—a drop of \$95,188,980,000.

That was a decline in corporation income tax revenue of 32.7 percent.

Note: The Jupyter Notebook from which this post is generated can be found at http://econdataus.com/mts1909.ipynb. It is identical to the one at http://econdataus.com/mts1804.ipynb except that data on the debt was added in December 2018 and it has been updated through September 2019. Links to additional Jupyter Notebooks can be found at http://econdataus.com/jupyter.html.