Professor Aven
Cultural Audit via Glassdoor Reviews



Tutorial Overview

Module Context

Module 4 of the final project: Cultural Environment Audit

This is the first of five diagnostic modules that build toward your comprehensive leadership profile:

  1. Class Network Analysis
  2. Professional Network Analysis (LinkedIn)
  3. Organizational Structure Diagnostic
  4. Cultural Environment Audit ← You are here
  5. Strategic Leadership Synthesis

🎯 LEARNING OBJECTIVES

By the end of this module, you will be able to:

  1. Distinguish between cultural content (what/why) and cultural strength (degree of sharing)
  2. Extract and analyze Glassdoor employee reviews to identify cultural patterns
  3. Apply AI tools (Microsoft Copilot, ChatGPT, Claude) for qualitative text analysis
  4. Diagnose organizational culture using the Culture Content Framework
  5. Assess cultural strength through consistency and behavioral enforcement
  6. Connect culture findings to strategic leadership implications
  7. Integrate culture analysis with network position and org structure diagnostics

📚 WHY ORGANIZATIONAL CULTURE MATTERS

Organizational culture is not a soft, fluffy concept—it is a critical mechanism of social control and motivation that fundamentally shapes:

  • Performance consistency: Strong cultures predict stable organizational outcomes (Burt et al., 1994)
  • Employee commitment: Culture provides identity and generates commitment to mission
  • Behavioral alignment: Shared values act as invisible constraints that guide behavior
  • Retention & attraction: Person-organization fit drives satisfaction and tenure (Chatman, 1989)
  • Enculturation trajectories: Linguistic and network patterns predict promotion and exit (Srivastava et al., 2016)

Key Insight for Leaders:

As a future leader, you must diagnose the existing culture before you can shape it. Understanding what is valued, what is rewarded, and how strongly these norms are enforced will determine your leadership effectiveness and career trajectory.


🧩 THEORETICAL FOUNDATION

1. Cultural Content vs. Cultural Strength

Dual Framework for Culture Analysis (O’Reilly & Chatman, 1996)
Dimension Definition Key Questions Measured By
Cultural Content How things are done and WHY they are done that way What values, beliefs, and norms guide behavior? Perceptions, stories, values, rewards (qualitative themes)
Cultural Strength The degree to which cultural content is SHARED and ENFORCED How widely held are these values? How consistently enforced? Consistency across reviews, behavioral enforcement, tenure effects

2. The Culture Content Framework

To diagnose cultural content, examine:

A. Perceptions (Overall Sentiment)
  • Are employee reviews predominantly positive, negative, or neutral?
  • What is the affective tone of language used?
  • Measurement: Sentiment analysis (positive/negative/neutral ratios)
B. Stories & Experiences (Behavioral Evidence)
  • What recurring themes emerge across employee narratives?
  • What specific experiences do employees highlight?
  • Measurement: Thematic analysis (recurring phrases, word clouds)
C. Values (What is Prized)
  • What behaviors, traits, or outcomes are celebrated?
  • What language do employees use to describe “what matters here”?
  • Measurement: Frequency of value-laden terms (innovation, collaboration, results, etc.)
D. Rewards (What is Reinforced)
  • What behaviors lead to promotion, recognition, or retention?
  • What behaviors lead to marginalization or exit?
  • Measurement: Explicit mentions of reward systems, promotion criteria

3. Strong vs. Weak Cultures: The Strength Dimension

Indicators of Cultural Strength
Characteristic Strong Culture Weak Culture
Value Consistency High agreement across reviews on what matters Divergent or contradictory values mentioned
Behavioral Alignment Clear norms enforced consistently Norms ambiguous or selectively enforced
Tenure Effects Long-tenured employees echo core values Values vary by tenure, role, or geography
Socialization Explicit onboarding rituals & language patterns Sink-or-swim; no clear cultural onboarding
Performance Consistency Predictable outcomes, low variance Unpredictable outcomes, high variance
Adaptability Resistance to change; homogeneity risk Easier to change; diversity of perspectives

4. Culture as Both Asset and Liability

When Culture Drives Performance:

  • Alignment with strategy: Culture supports the business model
  • Person-org fit: Selection attracts people who thrive in the culture
  • Behavioral consistency: Reduces coordination costs, increases efficiency

When Culture Becomes a Liability:

  • Environmental misalignment: Culture designed for past environment, not current reality
  • Barrier to change: Strong cultures suppress dissenting voices & innovation
  • Barrier to diversity: Pressure to conform stifles different perspectives
  • M&A failures: Cultural clashes destroy value (e.g., “Culture is what kills mergers”)

Your Task: Diagnose whether the culture is an asset or liability for you as a leader.


🔬 METHODOLOGICAL APPROACH: Simple Linguistic Analysis

📊 STEP-BY-STEP TUTORIAL


STEP 1: Data Collection from Glassdoor

1.1 Select Your Organization

Criteria for firm selection: - Company must have 15+ reviews on Glassdoor.com - Ideally a firm you are interested in working for OR currently work at - Should be the same firm you analyzed in Module 3 (Organizational Structure)

1.3 Random Sampling Protocol

Why random? To avoid selection bias (don’t cherry-pick positive or negative reviews).

How to randomize: - Use a random number generator (e.g., sample(1:100, 15) in R) - If Glassdoor shows 100 reviews, generate 15 random numbers between 1-100 - Select the reviews corresponding to those positions

1.4 Extract Review Content & save to csv file

For each review, provide an ID (you can just number them) and the comment


STEP 2: Load Your Data into R and Take a Look

library(tidyverse)
library(tm)
library(wordcloud)
library(tidytext)
library(ggraph)
library(igraph)
library(sentimentr)
#install.packages('topicmodels')
library(topicmodels)
library(LDAvis)

data<-read.csv("1_MON_Culture_2025FT,v1.csv", header=T)
names(data)
## [1] "id"                                                                                 
## [2] "X1061625..How.would.you.describe.the.culture.or.your.experience.thus.far.at.Tepper."
#This variable name changes
my_data_culture <- tibble(id = data[,1], 
                          culture = as.character(data[,2]))

head(my_data_culture)

STEP 3: Clean and prep data for analysis

Here you can remove stop words and any other terms that are not relevant to your analysis.

text <- as.character(my_data_culture$culture)

#FUNCTIONS======
clean.text = function(x)
{
  
  # tolower
  x = tolower(x)
  # remove rt
  x = gsub("rt", "", x)
  # remove at
  x = gsub("@\\w+", "", x)
  # remove punctuation
  x = gsub("[[:punct:]]", "", x)
  # remove numbers
  x = gsub("[[:digit:]]", "", x)
  # remove links http
  x = gsub("http\\w+", "", x)
  # remove links https
  x = gsub("https\\w+", "", x)
  # remove tabs
  x = gsub("[ |\t]{2,}", "", x)
  # remove blank spaces at the beginning
  x = gsub("^ ", "", x)
  # remove blank spaces at the end
  x = gsub(" $", "", x)
  return(x)
}

#Prep data for analysis (calls the function I defined above)
cleanText <- clean.text(text)

#Remove stop words (you can change vector as needed)
remwords <- c("tepper","culture","class", "like", "classmates", "bit", "thus", "want","take", 'experi')

STEP 4: WordCloud

  1. Identify the most frequent words in the statements
  2. Discover patterns of themes and anomalies
  3. Briefly describe your intuitive impression of the statements


#Here we create a function to clean our data and then pass our data to it.

MON.wordcloud <- function(x, lang="english", excludeWords=NULL, 
                          textStemming=T)
{ 
  # Load the text as a corpus
  docs <- Corpus(VectorSource(text))
  # Convert the text to lower case
  docs <- tm_map(docs, content_transformer(tolower))
  # Remove numbers
  docs <- tm_map(docs, removeNumbers)
  # Remove stopwords for the language 
  docs <- tm_map(docs, removeWords, stopwords(lang))
  # Remove punctuations
  docs <- tm_map(docs, removePunctuation)
  # Eliminate extra white spaces
  docs <- tm_map(docs, stripWhitespace)
  # Remove your own stopwords
  if(!is.null(excludeWords)) 
    docs <- tm_map(docs, removeWords, excludeWords) 
  # Text stemming
  if(textStemming) docs <- tm_map(docs, stemDocument)
  # Create term-document matrix
  tdm <- TermDocumentMatrix(docs)
  m <- as.matrix(tdm)
  v <- sort(rowSums(m),decreasing=TRUE)
  d <- data.frame(word = names(v),freq=v)
  
  wordcloud(d$word,d$freq, scale=c(3,0.3), max.words=200,  random.order=FALSE, 
            excludeWords = NULL, 
            rot.per=0.35, colors=brewer.pal(5,"Dark2"))
  
}

#Call the function with our cleaned data
MON.wordcloud(cleanText, excludeWords=remwords, textStemming=T)




STEP 5: Sentiment Analysis

Here we classify positive and negative language.

Can you tell whether the statements are in general positive or negative, and why?

#Simple Sentiment Analysis ====-

text_with_pol <- 
  cleanText %>% 
  get_sentences() %>% 
  sentiment() %>% 
  mutate(polarity_level = ifelse(sentiment == 0,"Neutral", ifelse(sentiment < 0, "Negative","Positive")))

#Plots sentiment by valence (positive sentiment is above zero and negative sentiment is below zero)
ggplot(text_with_pol, aes(x=sentiment)) +
  geom_histogram(color="darkblue", fill="lightblue", binwidth = 0.1)+
  geom_vline(xintercept= 0, colour = "red") + 
  labs(title="Cultural Sentiment Histogram Plot",x="Sentiment", y = "Counts") +
  theme_classic()




STEP 6: Text Network Analysis

Word Co-occurrence Network (filtered @ 4)


The co-occurrence graph visualizes the relationships between words in the statements, with which you can identify clusters or groups of related words or terms. Can you tell which pairs of words co-occur the most and what does it tells you about the statements?


set.seed(1234)
data_culture_word_pairs %>%
  filter(n >= 4) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "royalblue") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()



Word Co-occurrence Network (filtered @ 6)
set.seed(1234)
data_culture_word_pairs %>%
  filter(n >= 6) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "royalblue") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()



#### STEP 7: Shared Language Network (filtered @ 4) Here we can start to look at shared strength of the culture in your cohort.

data_culture_student_pairs_2 <- 
  data_culture2 %>% 
  widyr::pairwise_count(id, word, sort = TRUE, upper = FALSE)

data_culture_student_pairs_2 %>%
  filter(n >= 4) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "royalblue") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()



Person Shared Language Network (filtered @ 6)
data_culture_student_pairs_2 %>%
  filter(n >= 6) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "royalblue") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()




📝 DELIVERABLE: Culture Write-Up

Cultural Content Summary

  • 1: State the dominant sentiment and overall cultural “vibe”
  • 2: Identify the 3-4 core values that emerge from reviews
  • 3: Describe what behaviors are rewarded vs. punished
  • 4: Transition to strength assessment

Cultural Strength & Strategic Implications

  • 1: Assess cultural strength (strong/moderate/weak) with evidence
  • 2: Explain whether culture is an asset or liability (or both)
  • 3: Connect to your leadership style and goals
  • 4: End with actionable insight or strategic recommendation

🔗 INTEGRATION WITH OTHER MODULES

Your culture analysis does NOT stand alone—it must connect to:

Module 1: Class Network Analysis

  • Connection: Does your network position (centrality, brokerage) align with the culture?
    • High Betweenness in a collaborative culture = asset
    • High Betweenness in a competitive culture = liability (others may see you as political)
  • Example: “My low Eigenvector Centrality suggests I am not embedded in the dominant coalition. In a strong culture that rewards conformity, this could limit my influence. However, in a moderate culture with weak socialization, my peripheral position allows me to challenge norms without threatening core insiders.”

Module 2: LinkedIn Network Analysis

  • Connection: Does your external network composition align with the culture’s expectations?
    • Culture values “innovation” → Do you have ties to startups, venture capital, academia?
    • Culture values “execution” → Do you have ties to operations-focused roles?
  • Example: “My LinkedIn network skews heavily toward academia (45%), which aligns with this firm’s stated value on ‘intellectual rigor.’ However, my underrepresentation in industry-specific ties (Tech: 15%) may signal to insiders that I lack practical execution experience—a potential cultural misfit risk.”

Module 3: Organizational Structure Diagnostic

  • Connection: How does culture relate to formal structure?
    • Matrixed structure + weak culture = coordination nightmare
    • Hierarchical structure + strong culture = efficient but rigid
  • Example: “The firm’s highly matrixed structure (identified in Module 3) combined with a weak collaboration culture creates a ‘structural hole trap’: silos exist, but crossing them is not culturally rewarded. This explains why high Betweenness individuals report frustration rather than leverage.”

Module 5: Strategic Leadership Synthesis

  • Your culture diagnosis feeds directly into your leadership action plan:
    • Cultural Adaptation: What norms must you adopt to survive (first 90 days)?
    • Cultural Leverage: Where can you influence culture to amplify your leadership impact?
    • Cultural Exit Signals: What cultural red flags would trigger a career pivot?

🎓 FINAL THOUGHT: Culture is Your Leadership Canvas

Your task is not to fit into the culture you diagnosed. Your task is to: 1. Understand what is valued, rewarded, and enforced 2. Leverage cultural elements that amplify your leadership strengths 3. Shape cultural elements that constrain your impact—gradually, strategically, authentically

Leadership is not about adapting to culture. Leadership is about architecting culture.


Tutorial created by Prof. Brandy Aven, PhD
Carnegie Mellon University | Tepper School of Business
Course: People Analytics & Strategic Leadership