Introduction

Currently, Virginia does not require/allow the creation of rental registries, making it challenging to describe the rental landscape, but this context (and its change over time) would aid advocacy for affordable housing. This project aims to identify rental property and ownership patterns. We do so by characterizing the location, structure (single-family homes, large complexes, etc.), and ownership (individual, trustee, corporate, etc.) of rental properties via a rental property dataset.

Data Sources

The city of Charlottesville makes parcel level data publicly available.

https://opendata.charlottesville.org/search?tags=Property%20%26%20Land

Housing Grades

Distribution of Housing Grades

Measure

graph_1 <- ggplot(master_data, aes(x = grade, y = num_units, fill = grade)) +
  geom_col() +
  scale_fill_manual(values = c("lightblue","cornflowerblue","deepskyblue",
                                          "blue1", "blue4", "darkblue"))

graph_1 + labs(title = "Distribution of Housing Units by Grades",
       caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")),
       x = "Housing Grade", y = "Number of Units") +
  theme(plot.title = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 14,
                                  hjust = 0.5,
                                  vjust = 0.1), 
        axis.text.x = element_text(family = "Times New Roman",
                                   size = 10, 
                                   vjust = 5, 
                                   hjust=0.5), 
        axis.title.x = element_text(face = "bold",
                                    size = 12,
                                    vjust = 1),
        axis.text.y = element_text(family = "Times New Roman",
                                   angle = 0, 
                                   vjust = 0.5, 
                                   hjust=1,
                                   size = 10),
        axis.title.y = element_text(face = "bold",
                                    size = 12,
                                    vjust = 1),
        panel.background = element_rect("white"),
        panel.grid.major.x = element_blank(),
        panel.grid = element_line("lightgrey"),
        axis.ticks = element_blank(),
        legend.position = "none",
        plot.background = element_rect(color = "black", fill = NA))

By Use Code

graph_2 <- ggplot(master_data, aes(x = grade, y = num_units, fill = grade)) + 
  geom_col() +
  scale_fill_manual(values = c("lightblue","cornflowerblue","deepskyblue",
                                          "blue1", "blue4", "darkblue")) +
  facet_wrap(vars(use_code))

graph_2 + labs(title = "Distribution of Housing Unit Grades by Use Code",
               caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")),
               x = "", y = "Number of Units", fill = "Housing Grade") +
  theme(plot.title = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 14,
                                  hjust = 0.5,
                                  vjust = 0.1), 
        axis.text.x = element_text(family = "Times New Roman",
                                   size = 10), 
        axis.title.x = element_text(face = "bold",
                                    size = 12,
                                    vjust = 1),
        axis.title.y = element_text(face = "bold",
                                    family = "Times New Roman",
                                    size = 12,
                                    vjust = 1),
        strip.text = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 11.5),
        legend.title = element_text(face = "bold",
                                    family = "Times New Roman"),
        panel.background = element_rect("white"), 
        panel.grid.major.x = element_blank(),
        panel.grid = element_line("lightgrey"),
        axis.ticks = element_blank(),
        plot.background = element_rect(color = "black", fill = NA))

By Housing Grade

graph_3 <- ggplot(master_data, aes(x = use_code, y = num_units, fill = use_code)) + 
  geom_col()+
  scale_fill_manual(values = c("lightblue","cornflowerblue","deepskyblue","blue1")) +
  facet_wrap(vars(grade))

graph_3 + labs(title = "Distribution of Housing Unit Use Codes by Grade",
               caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")), 
               x = "", y = "Number of Units", fill = "Use Code") +
  theme(plot.title = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 14,
                                  hjust = 0.5,
                                  vjust = 0.1), 
        axis.text.y = element_text(family = "Times New Roman"),
        axis.text.x = element_text(family = "Times New Roman",
                                   size = 9,
                                   angle = 45,
                                   vjust = 1,
                                   hjust = 1),
        axis.title.y = element_text(face = "bold",
                                    family = "Times New Roman",
                                    size = 12,
                                    vjust = 1),
        strip.text = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 11.5),
        legend.title = element_text(face = "bold",
                                    family = "Times New Roman"),
        panel.grid.major.x = element_blank(),
        panel.background = element_rect("white"), 
        panel.grid = element_line("lightgrey"),
        axis.ticks = element_blank(),
        plot.background = element_rect(color = "black", fill = NA))

About

Trend:

It appears that the distribution of housing grades is heavily skewed towards the middle range, with grade C being the most common followed by grade B. This suggests that there may be a large number of properties that are neither exceptionally good nor exceptionally poor.

The fact that there are not a lot of AA++ housings is not surprising, as these grades likely correspond to higher-end properties that are more expensive and less common. On the other hand, the predominance of C and C-~D grades may suggest that there are a significant number of properties that are in need of improvement, with potential implications for the living conditions and well-being of tenants.

Overall, this distribution of housing grades highlights the importance of advocating for safe and affordable housing for all, particularly in areas where lower-grade housing is more prevalent. It may also suggest a need for increased enforcement of housing codes and regulations to ensure that rental properties meet basic standards of habitability.

Background on Housing Grades:

These are the possible factors of high C graded housings. Older housing stock may be more likely to have issues with maintenance and upkeep, which could result in a lower grade. The demographics of the area could also play a role. If there is a high demand for housing in the area but a limited supply, then landlords may not feel the need to invest in their properties because they know that they will be able to find tenants regardless. This could result in a higher number of Grade C properties that are not well-maintained.

Why is this important:

The distribution of housing grades can provide important insights into the quality of rental properties and potential ownership patterns. By analyzing the distribution of housing grades, we can identify patterns in the quality of rental properties and ownership, such as whether certain areas or landlords tend to have a higher percentage of properties with low grades, which could indicate substandard living conditions for tenants. Also, this information can be useful for advocacy efforts aimed at improving housing conditions and addressing housing instability.

Overall, analyzing the distribution of housing grades is an important step in understanding the state of housing in a given area and identifying potential areas for intervention and advocacy.

Further Considerations:

The distribution of housing grades provides valuable insights into the state of housing in a given area. One consideration is disparities in housing quality between different neighborhoods or regions. By investigating whether certain areas have a disproportionate number of lower-grade housing units and whether these areas correspond to particular demographics, such as low-income or marginalized populations, policy and advocacy efforts can be targeted towards addressing these disparities.

Affordability is another important consideration that can be gleaned from the distribution of housing grades. With higher-grade housing generally being more expensive, it is crucial to consider whether there are sufficient affordable housing options available, particularly for low-income households. Potential solutions such as subsidies or rent control should be explored to ensure that affordable housing options are available for all.

Maintenance and repair is a third consideration that can be made based on the distribution of housing grades. By investigating whether lower-grade housing units are more likely to have maintenance issues or to be in need of repair, policy solutions can be implemented to incentivize landlords to maintain their properties in good condition. This will not only improve living conditions for tenants but also prevent issues from becoming more severe and costly to repair in the long run.

Single Family Housing Grade Examples

Single Family Grade A

Single Family Grade A

Single Family Grade C

Single Family Grade C

Single Family Grade D

Single Family Grade D

Use Codes

Distribution of Use Codes

Measure

graph_4 <- ggplot(master_data, aes(x = use_code, y = num_units, fill = use_code)) +
  scale_fill_manual(values = c("lightblue","cornflowerblue","deepskyblue","blue1")) +
  geom_col()
 
graph_4 + labs(title = "Number of Units in Charlottesville by Use Codes", 
       caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")), 
       x = "", y = "Number of Units") +
  theme(plot.title = element_text(face = "bold",
                                  family = "Times New Roman",
                                  size = 14,
                                  hjust = 0.5,
                                  vjust = 0.1), 
        axis.text.x = element_text(face = "bold",
                                   family = "Times New Roman",
                                   angle = 0, 
                                   vjust = 5, 
                                   hjust = 0.5,
                                   size = 11), 
        axis.text.y = element_text(family = "Times New Roman",
                                   angle = 0, 
                                   vjust = 0.4, 
                                   hjust = 0.5,
                                   size = 10),
        axis.title.y = element_text(face = "bold",
                                    family = "Times New Roman",
                                    size = 12,
                                    vjust = 1),
        panel.grid.major.x = element_blank(),
        panel.background = element_rect("white"), 
        panel.grid = element_line("lightgrey"),
        axis.ticks = element_blank(),
        legend.position = "none",
        plot.background = element_rect(color = "black", fill = NA))

About

Trend:

The distribution of Use Codes can provide valuable insights into the types of properties and land use patterns in a particular area. In this case, the data shows that the highest number of properties are classified as single-family use, followed by condominiums and duplexes. This information can be used to identify trends and patterns in housing development in the area, as well as potential areas for improvement or concern.

The high number of single-family properties could indicate a lack of available multi-family or affordable housing options in the area, because single-family properties are often more expensive and may not be accessible to lower-income households.

The high number of condominiums could indicate a trend towards denser housing development, which could have both positive and negative implications. On the one hand, denser housing development can increase the availability of housing options in the area, which can help to address issues of housing instability. On the other hand, it could also contribute to gentrification and displacement if the development is not balanced with affordable housing options. The low number of apartment units (1-20 units) could also be a concern, as these types of properties are often more affordable and accessible to lower-income households.

Why is this important:

The distribution of Use Codes can provide important insights into the types of properties and land use patterns within a particular area. The Use Codes assigned to properties can provide information on how a particular property is being used or zoned, which can help to identify trends in land use and development patterns. This information can be used to identify areas of potential concern or opportunity for policy and advocacy efforts related to housing justice and stability.

The Use Code data could help to identify areas where affordable housing options are lacking, or where there is a concentration of certain types of housing, such as single-family homes or multi-family units. This information can then be used to inform policy and advocacy efforts aimed at increasing the availability of affordable housing options or promoting more diverse and inclusive housing developments.

Overall, analyzing the distribution of Use Codes can help to identify trends and patterns in land use and development that can inform policy and advocacy efforts related to housing justice and stability.

Further Considerations:

Further considerations of the Use Codes data could include exploring how the distribution varies across different geographic regions within the area. For example, Are there certain neighborhoods or zip codes where the distribution of Use Codes is significantly different from the overall average? Understanding these variations could provide more targeted insights for policy and advocacy efforts aimed at addressing housing instability in specific regions or neighborhoods.

In addition, it may be beneficial to examine how the distribution of Use Codes varies based on other demographic factors, such as income, race, and age. Are there certain groups of people who are more likely to live in certain types of housing, and if so, why? Understanding these patterns could help to identify potential barriers to accessing affordable and accessible housing options for all members of the community, and inform policy and advocacy efforts aimed at promoting equity in housing development and access.

Living Space

Distribution of Living Space

Measure

graph_5 <- ggplot(master_data, aes(x = square_footage_finished_living, after_stat(density), fill = use_code)) + 
  coord_cartesian(xlim = c(0,5000)) +
  scale_fill_manual(values = c("lightblue","cornflowerblue","deepskyblue","blue1")) +
  geom_density(alpha = 0.8)


graph_5 + labs(title = "Density Distribution of Living Space by Use Code", 
       caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")), 
       x = "Square Footage of Living Space", y = "Density", fill = "Use Code") +
  theme(plot.title = element_text(face = "bold",
                                  family = "Times New Roman",
                                  hjust = 0.5,
                                  size = 14), 
        legend.title = element_text(face = "bold",
                                    size = 10,
                                    family = "Times New Roman",
                                    hjust = 0,
                                    margin = margin(t = -15, r = 10)),
        axis.title.x = element_text(face = "bold"), 
        axis.title.y = element_text(face = "bold"), 
        text = element_text(size = 10, family = "Times New Roman"), 
        panel.background = element_rect("white"), 
        panel.grid = element_line("lightgrey"),
        axis.ticks = element_blank(),
        plot.background = element_rect(color = "black", fill = NA))

About

Trend:

It appears that 1000 square footage finished living is the most common among the living spaces being analyzed. This could suggest that this is a popular size for living spaces, or that it may be a standard size for certain types of homes or apartments. Additionally, it seems that condominiums have a higher square footage finished living than every other type of living space. This could be due to the fact that condominiums are typically designed with more luxurious amenities and larger living spaces than apartments or other types of homes. It also appears that there is a significant drop in the square footage finished living around the 2000 mark. This could be due to a number of factors, such as the cost of construction or the availability of land to build on.

Overall, these observations about the data graph suggest some interesting trends and patterns in the relationship between square footage finished living and the count of living spaces in different categories.

Why is this important:

Examining the distribution of living space in this project could provide valuable insights into the availability and accessibility of affordable and adequate housing in the area. By understanding the distribution of living space across different types of housing units, such as apartments, single-family homes, and condominiums, we can gain a better understanding of the types of housing that are most commonly available and affordable for individuals and families in the area.

In addition, examining the distribution of living space can provide insights into the potential challenges that individuals and families may face in accessing adequate and affordable housing. For example, if the majority of housing units have a small amount of living space, it may be more difficult for families with children to find adequate housing that meets their needs.

Further Considerations:

It would be helpful to know more about the purpose of the properties. For example, are they primarily used as primary residences, vacation homes, or rental properties? The purpose of the property can have a significant impact on the desired square footage finished living.

Another important consideration is the amenities that come with the properties may also be an important consideration. For instance, if a property comes with a large outdoor living space or access to community amenities like a gym or pool, this may offset a smaller square footage finished living.

Rental Property Owners

Distribution of Out-of-State vs. In-State Owners

Out-of-State Owners

graph_6 <- plot_usmap(data = out_map, values = "percent", 
           regions = "states", labels = FALSE, color = "black") + 
  scale_fill_continuous(low = "lightblue", high = "darkblue", 
                        na.value = "white", name = "Percent Ownership")


graph_6 + labs(title = "Where Do Out-of-State Charlottesville Homeowners Live?",
              caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")))  +
  theme(panel.background = element_rect(fill = "white", colour = NA), 
        text = element_text(size = 10, family = "Times New Roman"),
        legend.position = "bottom", 
        legend.justification = "center",
        legend.title = element_text(face = "bold",
                                    size = 10,
                                    family = "Times New Roman",
                                    angle = 0, 
                                    hjust = 0.5,
                                    margin = margin(t = -15, r = 10)),
        plot.title = element_text(size = 14, 
                                  hjust = 0.5,
                                  vjust = 0.1,
                                  family = "Times New Roman",
                                  face = "bold"),
        plot.caption = element_text(size = 8, 
                                    hjust = 1, 
                                    vjust = 1),
        plot.background = element_rect(color = "black", fill = NA),
        axis.text.x = element_blank(), 
        panel.grid = element_line("white"))

In-State Owners

states <- states(cb = TRUE)

st_crs(states)

not48 <- c("02", "15", "60", "66", "69", "72", "78")

states48 <- states %>%
  filter(!(GEOID %in% not48))

va <- states48 %>%
  filter(GEOID == "51")

va_counties <- counties(state = 51, cb = TRUE) 

va_counties <- va_counties %>% 
  left_join(county_map, by = c("NAMELSAD" = "county"))

graph_7 <- ggplot() +
  geom_sf(data = va, size = 1) +
  geom_sf(data = va_counties, aes(fill = percent), size = 0.5) +
  scale_fill_continuous(low = "lightblue", high = "darkblue",
                        na.value = "white", name = "Percent Ownership") +
  theme_void()

graph_7 + labs(title = "Where Do In-State Charlottesville Homeowners Live?",
               caption = expression(italic("Source: City of Charlottesville Publicly Available Parcel-Level Data (2023)")))  +
  theme(legend.position = "bottom",
        legend.justification = "center",
        legend.title = element_text(face = "bold",
                                    size = 10,
                                    family = "Times New Roman",
                                    angle = 0, 
                                    hjust = 0.8,
                                    margin = margin(t = -15, r = 10)),
        plot.title = element_text(size = 14, 
                                  hjust = 0.5,
                                  vjust = 0.1,
                                  family = "Times New Roman",
                                  face = "bold"),
        plot.caption = element_text(size = 8, 
                                    hjust = 0.95, 
                                    vjust = 1),
        plot.background = element_rect(color = "black", fill = NA))

About

Trend:

Why is this important:

Further Considerations:

Parcel Map

Charlottesville Parcel Map

Out-of State vs. In-State Owners

parcelboundary <- read_sf("datadownloads/Parcel_Area_Details.geojson") %>% 
  clean_names()

parcelboundary <- parcelboundary %>% 
  mutate(ownercity = substr(owner_city_state, start = nchar(owner_city_state) - 1, stop = nchar(owner_city_state)))

parcelboundary <- parcelboundary %>% 
  mutate(ownership = ifelse(ownercity %in% c("VA"), "Virginia", "Non Virginia"),
         ownership = ifelse(file_type %in% c("C", "E"), "Non Residence", ownership))

pal <- colorFactor(c( "grey", "blue1", "cornflowerblue"), parcelboundary$ownership)

leaflet() %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addPolygons(data = parcelboundary,
              fillColor = pal(parcelboundary$ownership), 
              fillOpacity = .7, 
              weight = 0.5,
              color = "grey",
              highlight = highlightOptions(
                weight = 3,
                fillOpacity = 0.9,
                bringToFront = T),
              popup = paste0(
                "Parcel ID: ", parcelboundary$parcel_number, "<br>",
                "Ownership: ", parcelboundary$ownership, "<br>",
                "Address: ", parcelboundary$street_number, " ", parcelboundary$street_name)) %>% 
  addLegend("bottomright", pal = pal, values = parcelboundary$ownership, 
            title = "Out-of-State vs In-State Owners: Where Do They Live?", opacity = .7)

About

Trend:

Why is this important:

Further Considerations: