msa = read_csv("https://raw.githubusercontent.com/georgehagstrom/DATA608Fall2026/main/website/assignments/stories/data/story_1/MSA_permits_demography.csv")
zori = read_csv("https://raw.githubusercontent.com/georgehagstrom/DATA608Fall2026/main/website/assignments/stories/data/story_1/zori_lab1.csv")
# Lets make a bad figure
raw <- zori |>
mutate(year = year(date)) |>
group_by(cbsa,Region,year) |>
summarise(zori = mean(zori,na.rm=TRUE),.groups="drop")
p1 = msa |> filter(year == 2025,
population > 100000) |>
arrange(units_total) |> rename(RegionName = Region) |> left_join(raw,by=c('cbsa','year')) |> head(10) |>
ggplot(aes(RegionName,zori)) +
geom_col_pattern(pattern = "image",
pattern_filename="https://raw.githubusercontent.com/georgehagstrom/DATA608Fall2026/main/website/assignments/stories/data/story_1/skyscraper.png",
pattern_type = 'tile') +
labs(title = "Low Permit Metros") +
coord_cartesian(ylim = c(750, 3500)) +
theme(axis.text.y = element_blank()) +
theme(axis.text.x = element_blank()) +
theme(text = element_text(family = "Lobster Two", size = 20),
plot.title = element_text(family = "Lobster Two", size = 30, colour = "#1A9850"),
panel.grid.major = element_line(colour = "#1A9850"),
panel.border = element_rect(colour = "#1A9850", fill = NA, linewidth = 1.5))
p2 = msa |> filter(year == 2025,
population > 100000) |>
arrange(desc(units_total)) |> rename(RegionName = Region) |> left_join(raw,by=c('cbsa','year')) |> head(10) |>
ggplot(aes(RegionName,zori)) +
geom_col_pattern(pattern = "image",
pattern_filename="https://raw.githubusercontent.com/georgehagstrom/DATA608Fall2026/main/website/assignments/stories/data/story_1/skyscraper.png",
pattern_type = 'tile') +
labs(title="High Permit Metros") +
coord_cartesian(ylim = c(750, 3500)) +
theme(axis.text.y = element_blank()) +
theme(axis.text.x = element_blank()) +
theme(text = element_text(family = "Roboto Condensed", size = 20),
plot.title = element_text(family = "Roboto Condensed", face="bold", size = 30, colour = "#A50026"),
panel.grid.major = element_line(colour = "#A50026"),
panel.border = element_rect(colour = "#A50026", fill = NA, linewidth = 1.5))Story 1: Housing Policy and Affordability
Overview
For this assignment, you are assuming the role for a data scientist working for a city government and you have been tasked with providing technical advice to the mayor and city council about whether or not permitting reform could help address housing affordability. You have access to a dataset which which provides demographic and economic information at a number of different organizational levels across the country. The assignment will consist of parts where you will answer questions about visualizations that are presented to you, and other parts where you improve upon them to make them more informative or so that they tell a better story.
Background
In recent years, many parts of the United States have experienced an increase in housing costs. The Harvard University Joint Center for Housing Studies published a report on the State of the Nation’s Housing in 2026. Amongst the 10 takeaways from that report include a major decline in residual income for renters earning under $30,000 dollars per year, record high median homeownership costs, and an increase in price of the cheapest rental units. High housing prices have been implicated as a cause of homelessness and other major problems in large metro areas, according to a report by the Pew Foundation.
Many different policies have been proposed to address this issue, including permitting reform. Recent data suggests that increased permitting slows or reverses increases in housing prices, with rent declines in fast-growing sun-belt cities such as Austin being held up as exemplars of this policy, see for example Austin’s Surge of New Housing Construction Drives Down Rents, which describes the issue in Austin primarily, and New Housing Slows Rent Growth Most for Older, More Affordable Units. However, this is still an area of active research where there is much debate about the causal factors of housing costs. If you want to learn more about the nuances here are some references:
- E. Glaeser and J. Gyourko. The Economic Implications of Housing Supply. JEP (2018). 32:1
- V. Been, I. Gould Ellen, and K. O’Reagan. _Supply Skepticism Revisited. Housing Policy Debate. (2025). 35.1
- A. Damiano. Supply Skepticism or Supply Realism?. Housing Policy Debate. (2025). 35.1
Problem 1: Bars and Dots
Consider Figure 2 from New Housing Slows Rent Growth Most for Older, More Affordable Units:

This figure allows you to make two types of comparisons: (1) differences in rent changes across different building classes within the same city and (2) differences in rent changes across different cities. Which perceptual visualization tasks might you use when making these comparisons using Figure 2?
The data is available to you in the file pew_fig2_rent_change_class.csv, with pew_fig2_dict.qmd describing the data source and variables. Visualize this data in two different ways: (1) using a Cleveland dot plot and (2) splitting the bar-plots onto multiple axes (see UCRs dot-plot page or Wilke chapter 6 ). Compare these two images to the original Figure 2, what are the pros and cons of each?
Problem 2: Fixing a Bad Figure
- Analyze the problems with a bad figure. Your predecessor on the data team had been working on a presentation about permiting reform and left you the following figure. There are a number of problems with the figure, and it has a surprising conclusion given the recent research. Take a close look at the figure and code and list all of the ways that the figure is bad/ugly/wrong.
p1 + p2
- Create a data story about this data. You have been given datasets with information about rent, building permits, and demographics (population and net-migration) in metropolitan statistical areas, covering a period from 2015 to 2026 (rents) and 2021 to 2025 (permits and demographics). You should create several figures (2-3) to explain whether or not building permits policy can help reduce rents. Assume that your audience is the city government at a large city in the United States (e.g. New York City). Your story must be entirely told by your figures, though you may use text sparingly in the title/subtitle and annotations to enhance your story. Provide a one to two paragraph explanation of the choices you made for your figure. Do not include exploratory figures/discussion.