Oak Park has 6 main entities that collect taxes and provide services within Oak Park.
We started with The Village of Oak Park’s budget because it is the governing body for the community.
The Village of Oak Park operates under the Village Manager form of government. An elected Village Board president and six trustees set policy, but hire a professional manager to oversee day-to-day operations and the delivery of municipal government services.
The Village of Oak Park is largely responsible for providing for services that support public safety, public health, maintain infrastructure, and foster economic development.
The budgets are posted on The Village of Oak Park’s website.
The web site includes all expenses. Actual spending amounts for 2013-2015 can be found in the fiscal year 2017 Approved Budget. Actual spending amounts for 2016 and 2017 can be found in the fiscal year 2019 Approved Budget. The fiscal year 2021 Approved Budget includes actual spending amounts for 2018 and 2019, as well as, estimated amounts for 2020 and 2021. Actual expenses for each of these years were imported into the dataset for this site. The Village of Oak Park’s budget includes inter-fund transfers as expenses, which are also included as expenses in this web site.
This project had two primary parts to it: the data collection and cleanup and the website itself. All the code and data are open source on GitHub.
The website was built by Derek and is based off of the open source Budget Breakdown code developed by Derek Eder, Nick Rougeux, Open City and DataMade, which has been used to visualize budgets for Cook County and Macoupin County, IL, the City of New Orleans, Washington State and New York State. We customized the code to fit Oak Park’s budget and match the colors of the Village flag.
The data was collected, extracted, and cleaned by Alicia. Using an open source tool called Tabula, we were able to select and extract budget tables from the fiscal year 2017, 2019 and 2021 adopted budget PDFs. Once the data was converted to 3 separate spreadsheets, we merged them together into one spreadsheet with 9 years of budget data using our data cleanup script.
To understand the process we used to verify that the converted budget data match the source PDF, it is helpful to know what information the budget PDFs include. Each budget PDF we reviewed includes expense line items. Each line item includes:
To illustrate this format, here is page 58 of the Fiscal Year 2017 Budget:
Though the budget contains line items’ actual amounts, it does not report a total for these actual amounts for the entire budget. The budget only publishes a total for the estimated expenses for that single budget’s fiscal year. This means that we could not verify if the totals calculated in our spreadsheets for actual line item amounts matched a total value reported in the same budget. To compensate for the budget’s lack of total actual amounts, we ensured that the budget’s reported total estimated expenses for its fiscal year matched the total calculated for the same estimates in our spreadsheets. If those totals matched, we were assured that the applicable line items had been converted successfully and completely. Once the totals matched, we visually compared our spreadsheet with the source PDF to catch any omissions or errors from other reported years.
There were several issues we encountered when preparing the budget data for this site:
As explained above, budget data was only made available in PDF documents published on The Village of Oak Park’s website. We used a very helpful tool called Tabula to help convert the tables within these books into spreadsheets, but it was a time-consuming process. This project would have been much easier if we had the spreadsheets provided directly by the Village.
Our imported total expenses and the budget’s reported total expenses matched for the fiscal year 2019 and 2021 budgets. However, this process was not successful for the 2017 budget. The 2017 budget reports its total estimated expenses for fiscal year 2017 to be $176,038,974, but our imported amount totals to $176,404,247, a difference of $365,373. Despite importing the data multiple times, this discrepancy remained. We totaled the individual tables and all of those totals matched the totals shown in the PDF budget. We are confident that the imported expenses match the expenses in the fiscal year 2017 budget. We do not have an explanation for why the fiscal year 2017 budget reports a total estimated expense amount different from the total derived from the line items the same PDF contains.
We used a combination of Fund ID, Department ID, Program ID, and Account ID to identify and group each line item in the budget across all nine years. However, in doing so, we discovered that there were a number of duplicate line items. To resolve this, we aggregated matching line items and combined them into one row. You can see how we did this in our data cleanup script.
Budget: Oak Park continues to be a work in progress. As more people use it, we plan to add improvements and features to the tool. If you have a feature suggestion or notice a bug, please file a ticket here.
If you have additional questions not already answered in this FAQ, please email us at firstname.lastname@example.org.