Assignment 5

#install.packages("readxl")
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.1     ✔ readr     2.2.0
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.3     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
df <- read_excel("Airbnb_DC_25.csv")
df
# A tibble: 6,257 × 18
      id name       host_id host_name neighbourhood_group neighbourhood latitude
   <dbl> <chr>        <dbl> <chr>     <lgl>               <chr>            <dbl>
 1  3686 Vita's Hi…    4645 Vita      NA                  Historic Ana…     38.9
 2  3943 Historic …    5059 Vasa      NA                  Edgewood, Bl…     38.9
 3  4197 Capitol H…    5061 Sandra    NA                  Capitol Hill…     38.9
 4  4529 Bertina's…    5803 Bertina   NA                  Eastland Gar…     38.9
 5  5589 Cozy apt …    6527 Ami       NA                  Kalorama Hei…     38.9
 6  7103 Lovely gu…   17633 Charlotte NA                  Spring Valle…     38.9
 7 11785 Sanctuary…   32015 Teresa    NA                  Cathedral He…     38.9
 8 12442 Peaches &…   32015 Teresa    NA                  Cathedral He…     38.9
 9 13744 Heart of …   53927 Victoria  NA                  Columbia Hei…     38.9
10 14218 Quiet Com…   32015 Teresa    NA                  Cathedral He…     38.9
# ℹ 6,247 more rows
# ℹ 11 more variables: longitude <dbl>, room_type <chr>, price <dbl>,
#   minimum_nights <dbl>, number_of_reviews <dbl>, last_review <dttm>,
#   reviews_per_month <dbl>, calculated_host_listings_count <dbl>,
#   availability_365 <dbl>, number_of_reviews_ltm <dbl>, license <chr>
room_prices <- df %>%
  filter(!is.na(price), price > 0, price <= 1000,
         !is.na(room_type)) %>%
  group_by(room_type) %>%
  summarize(avg_price = mean(price))

ggplot(room_prices,
       aes(x = reorder(room_type, -avg_price),
           y = avg_price,
           fill = room_type)) +
  geom_col() +
  labs(
    title = "Average Airbnb Listing Price by Room Type",
    x = "Room Type",
    y = "Average Price per Night (USD)",
    fill = "Room Type",
    caption = "Source: Airbnb_DC_25 dataset; listings above $1,000/night excluded."
  ) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

This bar graph compares the average nightly prices of different Airbnb room types in Washington, D.C. The graph shows that hotel rooms have the highest average price, at approximately $335 per night, followed by entire homes or apartments at about $177. Private rooms average around $97 per night, while shared rooms have the lowest average price at approximately $69. One key insight is that the average price varies considerably depending on the type of accommodation, with hotel rooms costing much more on average than shared rooms. This information could help travelers compare accommodation options based on their budgets.