ExploraciónExploration
1. Ver la estructura real de una tabla
1. Inspect the real structure of a table
Antes de limpiar o analizar, R permite revisar tipos de datos, valores faltantes y forma general del dataset.
Before cleaning or analyzing, R helps inspect data types, missing values, and the overall shape of the dataset.
library(readr)
library(dplyr)
data <- read_csv("survey_results.csv")
glimpse(data)
summary(data)
LimpiezaCleaning
2. Limpiar columnas de texto con espacios y mayúsculas
2. Clean text columns with spaces and casing issues
Estandariza campos como departamento, programa o modalidad para evitar categorías duplicadas.
Standardize fields such as department, program, or modality to avoid duplicate categories.
library(stringr)
data <- data %>%
mutate(
department_clean = department %>%
str_squish() %>%
str_to_title()
)
Valores faltantesMissing values
3. Medir el porcentaje de data faltante por columna
3. Measure missing data percentage by column
Sirve para saber qué variables son confiables y cuáles necesitan revisión antes de un dashboard.
Useful for knowing which variables are reliable and which ones need review before a dashboard.
missing_summary <- data %>%
summarise(across(
everything(),
~ mean(is.na(.)) * 100
))
missing_summary
DuplicadosDuplicates
4. Identificar registros duplicados por combinación
4. Identify duplicates by field combination
Detecta duplicados usando una combinación de campos, no solo un ID.
Detect duplicates using a combination of fields, not just one ID.
duplicates <- data %>%
group_by(first_name, last_name, date_of_birth) %>%
filter(n() > 1) %>%
arrange(last_name, first_name)
duplicates
FechasDates
5. Crear variables de año, mes y trimestre
5. Create year, month, and quarter variables
Convierte una fecha en variables útiles para tendencias y análisis temporal.
Turn one date into useful variables for trend and time-based analysis.
library(lubridate)
data <- data %>%
mutate(
date_clean = mdy(transaction_date),
year = year(date_clean),
month = month(date_clean, label = TRUE),
quarter = quarter(date_clean)
)
ResumenSummary
6. Crear resumen estadístico por grupo
6. Create statistical summaries by group
Resume métricas por departamento, campus, programa o cualquier grupo administrativo.
Summarize metrics by department, campus, program, or any administrative group.
summary_by_dept <- data %>%
group_by(department_clean) %>%
summarise(
records = n(),
avg_score = mean(score, na.rm = TRUE),
median_score = median(score, na.rm = TRUE)
) %>%
arrange(desc(records))
VisualizaciónVisualization
7. Graficar distribución de una variable
7. Plot the distribution of a variable
Ayuda a ver si una métrica está concentrada, dispersa, sesgada o con valores extremos.
Helps reveal whether a metric is concentrated, dispersed, skewed, or affected by outliers.
library(ggplot2)
ggplot(data, aes(x = score)) +
geom_histogram(bins = 30) +
labs(
title = "Score Distribution",
x = "Score",
y = "Records"
)
OutliersOutliers
8. Detectar valores extremos con IQR
8. Detect outliers using IQR
Encuentra valores que se salen del comportamiento típico sin asumir una distribución normal.
Find values outside typical behavior without assuming a normal distribution.
q1 <- quantile(data$amount, 0.25, na.rm = TRUE)
q3 <- quantile(data$amount, 0.75, na.rm = TRUE)
iqr <- q3 - q1
outliers <- data %>%
filter(amount < q1 - 1.5 * iqr | amount > q3 + 1.5 * iqr)
CruceJoining
9. Unir dos tablas por llave común
9. Join two tables by a common key
Combina una tabla de respuestas con una tabla maestra de empleados, estudiantes o cuentas.
Combine a response table with a master table of employees, students, or accounts.
master <- read_csv("employee_master.csv")
combined <- data %>%
left_join(master, by = "employee_id")
AntijoinAnti-join
10. Encontrar registros que no cruzan
10. Find records that do not match
Detecta empleados, estudiantes o transacciones que aparecen en una tabla pero no en la maestra.
Detect employees, students, or transactions that appear in one table but not in the master table.
not_found <- data %>%
anti_join(master, by = "employee_id")
not_found
Tablas dinámicasPivot tables
11. Crear una tabla tipo pivot
11. Create a pivot-style table
Genera una matriz resumida similar a Excel, útil para validar antes de Power BI.
Generate an Excel-like summary matrix, useful for validation before Power BI.
pivot_table <- data %>%
count(department_clean, status) %>%
tidyr::pivot_wider(
names_from = status,
values_from = n,
values_fill = 0
)
LikertLikert
12. Convertir respuestas Likert en números
12. Convert Likert responses into numbers
Transforma encuestas de opinión en valores numéricos para promedios y comparaciones.
Transform opinion surveys into numeric values for averages and comparisons.
likert_map <- c(
"Strongly Disagree" = 1,
"Disagree" = 2,
"Neutral" = 3,
"Agree" = 4,
"Strongly Agree" = 5
)
data <- data %>%
mutate(q1_score = recode(q1_response, !!!likert_map))
Texto abiertoOpen text
13. Contar palabras frecuentes en comentarios
13. Count frequent words in comments
Crea una primera lectura de temas repetidos en respuestas abiertas.
Create a first reading of repeated themes in open-ended responses.
library(tidytext)
word_counts <- data %>%
unnest_tokens(word, comment) %>%
anti_join(stop_words, by = "word") %>%
count(word, sort = TRUE)
head(word_counts, 20)
CorrelaciónCorrelation
14. Medir relación entre dos variables
14. Measure relationship between two variables
Evalúa si dos métricas se mueven juntas, por ejemplo satisfacción y tiempo de respuesta.
Evaluate whether two metrics move together, such as satisfaction and response time.
correlation <- cor(
data$satisfaction_score,
data$response_time,
use = "complete.obs"
)
correlation
Prueba estadísticaStatistical test
15. Comparar promedios entre dos grupos
15. Compare averages between two groups
Permite probar si la diferencia observada entre dos grupos puede ser significativa.
Test whether the observed difference between two groups may be statistically meaningful.
test_result <- t.test(
score ~ training_received,
data = data
)
test_result
Modelo simpleSimple model
16. Crear una regresión lineal básica
16. Create a basic linear regression
Modela una variable continua usando factores explicativos simples.
Model a continuous variable using simple explanatory factors.
model <- lm(
satisfaction_score ~ response_time + training_hours,
data = data
)
summary(model)
SegmentaciónSegmentation
17. Crear grupos por comportamiento con clustering
17. Create behavior groups using clustering
Agrupa registros parecidos según variables numéricas para descubrir segmentos.
Group similar records based on numeric variables to discover segments.
features <- data %>%
select(score, response_time, training_hours) %>%
na.omit() %>%
scale()
set.seed(123)
clusters <- kmeans(features, centers = 3)
clusters$centers
Series de tiempoTime series
18. Analizar tendencia mensual
18. Analyze monthly trend
Convierte transacciones diarias en una vista mensual para detectar crecimiento, caída o estacionalidad.
Convert daily transactions into a monthly view to detect growth, decline, or seasonality.
monthly_trend <- data %>%
mutate(month_start = floor_date(date_clean, "month")) %>%
group_by(month_start) %>%
summarise(total_amount = sum(amount, na.rm = TRUE))
ggplot(monthly_trend, aes(month_start, total_amount)) +
geom_line() +
labs(title = "Monthly Trend")
ExportaciónExport
19. Exportar resultados a Excel con múltiples hojas
19. Export results to Excel with multiple sheets
Entrega resultados limpios, resúmenes y excepciones en un solo archivo revisable.
Deliver clean results, summaries, and exceptions in one reviewable workbook.
library(writexl)
write_xlsx(
list(
Clean_Data = data,
Missing_Summary = missing_summary,
Duplicates = duplicates,
Outliers = outliers
),
"r_data_quality_report.xlsx"
)
Reporte reproducibleReproducible report
20. Crear un reporte reproducible en R Markdown
20. Create a reproducible R Markdown report
Documenta análisis, código, gráficos y conclusiones en un reporte que se puede volver a generar.
Document analysis, code, charts, and conclusions in a report that can be regenerated.
library(rmarkdown)
render(
input = "analysis_report.Rmd",
output_format = "html_document",
output_file = "analysis_report.html"
)