title: “TripAdvisor Strategic Analysis” author: “Judy Shulman” output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill theme: cosmolibrary(flexdashboard) library(tidyverse) library(plotly)

Load data - Please check your file path

df <- read_csv(“C:6d5d96-2f75-489e-ad9d-6ddf1ed58265_tripadvisor_hotel_reviews_dataset.zip.265__MACOSX._tripadvisor_hotel_reviews_dataset.csv”) %>% mutate( has_response = !is.na(management_response), word_count = str_count(review_text, “\S+”), trip_type = str_to_title(ifelse(is.na(trip_type) | trip_type == “NONE”, “Other”, trip_type)) ) Executive Summary {data-navmenu=“Project Info”}Column {data-width=1000}Overview of ResearchI investigated the management approach to customer reviews on properties visited during vacations. The goal was to understand if management priorities align with guest effort and dissatisfaction levels.Data Background:This analysis uses 1,098 reviews from the TripAdvisor Hotel Reviews Dataset. We focus on the gap between satisfied and unsatisfied guests.My Questions {data-navmenu=“Project Info”}Column {data-width=1000}Research ObjectivesI focused on three primary areas of investigation:Prioritization: Is management focusing on happy or unhappy customers?The Venting Archetype: Does dissatisfaction lead to longer, more detailed reviews?Demographics: How do expectations and ratings vary across different traveler types (Business, Family, etc.)?Main AnalysisColumn {data-width=650}Management Response StrategyVisual: The Red-to-Green Gradient Lollipop.Notice the high response rate for 1-star reviews. Management is currently in “Damage Control” mode—they spend the most time responding to the 1 and 2 star reviews to mitigate brand risk.response_summary <- df %>% group_by(rating) %>% summarize(rate = mean(has_response) * 100)

p1 <- ggplot(response_summary, aes(x = as.factor(rating), y = rate, fill = as.factor(rating))) + geom_segment(aes(x = as.factor(rating), xend = as.factor(rating), y = 0, yend = rate), color = “grey”) + geom_point(aes(color = rate), size = 5) + scale_color_gradient(low = “#e41a1c”, high = “#4daf4a”) + coord_flip() + theme_minimal() + theme(legend.position = “none”)

ggplotly(p1) The ‘Venting’ ArchetypeVisual: Faceted Scatter with Regression.According to the data—unhappy guests talk more. As ratings go up, word count goes down. When guests feel wronged, they write ‘novels’ to justify their score.p4 <- df %>% filter(word_count < 1000 & !is.na(trip_type) & !trip_type %in% c(“Other”, “NONE”)) %>% ggplot(aes(x = rating, y = word_count, color = as.factor(rating))) + geom_jitter(alpha = 0.3) + geom_smooth(method = “lm”, color = “black”, se = FALSE) + facet_wrap(~trip_type) + scale_color_brewer(palette = “RdYlGn”, direction = -1) + theme_minimal() + theme(legend.position = “none”)

ggplotly(p4) Column {data-width=350}Satisfaction DensityVisual: Violin Plot by Traveler Type.The wide sections of the violins show where most ratings fall. The long ‘tails’ reaching down to 1-star represent the high-impact risk areas that management focuses on.violin_data <- df %>% filter(!is.na(trip_type) & !trip_type %in% c(“NONE”, “Other”))

p2 <- ggplot(violin_data, aes(x = trip_type, y = rating, fill = trip_type)) + geom_violin(alpha = 0.5) + geom_boxplot(width = 0.1, outlier.shape = NA) + coord_flip() + theme_minimal() + theme(legend.position = “none”)

ggplotly(p2) Demographic ConsistencyVisual: Faceted Boxplots.Across almost every group, 1-star reviews result in much higher word counts than 5-star reviews. This confirms dissatisfaction creates a heavier workload for management regardless of guest type.boxplot_data <- df %>% filter(!is.na(trip_type) & !trip_type %in% c(“Other”, “NONE”))

p3 <- ggplot(boxplot_data, aes(x = as.factor(rating), y = word_count, fill = as.factor(rating))) + geom_boxplot(outlier.shape = NA, alpha = 0.7) + facet_wrap(~trip_type) + coord_cartesian(ylim = c(0, 600)) + scale_fill_brewer(palette = “RdYlGn”, direction = -1) + theme_minimal() + theme(legend.position = “none”)

ggplotly(p3)