1. En una empresa que ofrece servicios de análisis predictivo para el sector retail, se cuenta con una base de datos que incluye información de clientes, entre ellos su edad. Esta variable es importante, ya que permite segmentar el mercado, personalizar campañas y entender patrones de consumo.
# Generar vector con edades de 40 clientes
set.seed(8043)  # Fijar semilla para reproducibilidad
edades_clientes <- sample(18:70, 40, replace = TRUE)

# Mostrar las edades
print("Edades de los clientes:")
## [1] "Edades de los clientes:"
print(edades_clientes)
##  [1] 52 40 33 44 28 66 23 43 46 26 45 29 52 56 58 24 37 51 22 55 63 22 66 57 20
## [26] 29 37 64 50 70 25 56 69 22 60 50 45 18 60 20
# Calcular estadísticos descriptivos
media_edad <- mean(edades_clientes)
mediana_edad <- median(edades_clientes)
edad_max <- max(edades_clientes)
edad_min <- min(edades_clientes)

# Mostrar resultados
cat("Media de edades:", media_edad, "\n")
## Media de edades: 43.325
cat("Mediana de edades:", mediana_edad, "\n")
## Mediana de edades: 45
cat("Edad máxima:", edad_max, "\n")
## Edad máxima: 70
cat("Edad mínima:", edad_min, "\n")
## Edad mínima: 18

2.Una empresa de comercio electrónico quiere analizar el rendimiento anual de sus 5 productos más vendidos. Para ello, dispone de las cifras de ventas por trimestre: Q1 (enero-marzo), Q2 (abril-junio), Q3 (julio-septiembre) y Q4 (octubre-diciembre). Construya en R una matriz donde:

# Generar datos ficticios de ventas
ventas <- matrix(c(
  1200, 1500, 1800, 2100,  # Producto 1
  900,  1100, 1300, 1600,  # Producto 2
  500,  700,  1200, 1500,  # Producto 3
  2000, 2500, 2700, 3000,  # Producto 4
  800,  950,  1100, 1400   # Producto 5
), nrow = 5, byrow = TRUE)

# Asignar nombres a filas y columnas
rownames(ventas) <- paste("Producto", 1:5)
colnames(ventas) <- c("Q1", "Q2", "Q3", "Q4")

# Mostrar la matriz
print("Matriz de ventas trimestrales:")
## [1] "Matriz de ventas trimestrales:"
print(ventas)
##              Q1   Q2   Q3   Q4
## Producto 1 1200 1500 1800 2100
## Producto 2  900 1100 1300 1600
## Producto 3  500  700 1200 1500
## Producto 4 2000 2500 2700 3000
## Producto 5  800  950 1100 1400
# Calcular totales por producto (ventas anuales)
ventas_totales_producto <- rowSums(ventas)
print("Ventas anuales por producto:")
## [1] "Ventas anuales por producto:"
print(ventas_totales_producto)
## Producto 1 Producto 2 Producto 3 Producto 4 Producto 5 
##       6600       4900       3900      10200       4250
# Calcular totales por trimestre
ventas_totales_trimestre <- colSums(ventas)
print("Ventas totales por trimestre:")
## [1] "Ventas totales por trimestre:"
print(ventas_totales_trimestre)
##   Q1   Q2   Q3   Q4 
## 5400 6750 8100 9600
  1. Una empresa del sector financiero, el equipo de analítica de datos necesita crear una estructura en R para almacenar la información básica de los clientes y clasificarlos automáticamente según su nivel de riesgo financiero. Esta clasificación se hace con base en el saldo actual del cliente. El objetivo es que el sistema sea capaz de registrar nuevos clientes de forma automática y asignarles su categoría de riesgo.
# -------------------------------
# Función: crear_cliente()
# Clasifica riesgo según saldo
# -------------------------------
crear_cliente <- function(id, nombre, edad, ingresos_mensuales, saldo_actual) {
  # Clasificación de riesgo en función del saldo
  categoria <- ifelse(saldo_actual < 0, "Riesgo Alto", "Estable")
  
  # Estructura de salida (lista)
  cliente <- list(
    id = id,
    nombre = nombre,
    edad = edad,
    ingresos_mensuales = ingresos_mensuales,
    saldo_actual = saldo_actual,
    categoria_riesgo = categoria
  )
  
  return(cliente)
}

# -------------------------------
# Ejemplo: creación de un cliente
# -------------------------------
cliente_1 <- crear_cliente(
  id = "C101",
  nombre = "Juan Pérez",
  edad = 42,
  ingresos_mensuales = 3500,
  saldo_actual = -250   # Cambia este valor para probar la clasificación
)

# -------------------------------
# Verificación/impresión
# -------------------------------
print(cliente_1)
## $id
## [1] "C101"
## 
## $nombre
## [1] "Juan Pérez"
## 
## $edad
## [1] 42
## 
## $ingresos_mensuales
## [1] 3500
## 
## $saldo_actual
## [1] -250
## 
## $categoria_riesgo
## [1] "Riesgo Alto"
  1. Una consultora de análisis de datos está realizando un estudio de segmentación de clientes para una tienda online. Para iniciar el análisis, es necesario estructurar un conjunto de datos que contenga información básica de los consumidores. Cree en R un data frame con la información de 50 clientes ficticios que incluya las siguientes columnas:
# -------------------------------
# Creación de datos ficticios
# -------------------------------
set.seed(8045) # Para reproducibilidad

# Generar vectores
nombres <- paste("Cliente", 1:50)
edades <- sample(18:70, 50, replace = TRUE)
ingresos <- round(runif(50, 1000, 6000), 2)  # entre 1000 y 6000 dólares
estado_civil <- sample(c("Soltero", "Casado", "Divorciado"), 50, replace = TRUE)

# Crear data frame
clientes <- data.frame(
  Nombre = nombres,
  Edad = edades,
  Ingresos = ingresos,
  Estado_Civil = estado_civil,
  stringsAsFactors = FALSE
)

# Convertir Estado Civil a factor
clientes$Estado_Civil <- as.factor(clientes$Estado_Civil)

# -------------------------------
# Justificación del uso de factores
# -------------------------------
# En ciencia de datos, convertir variables categóricas en factores es crucial
# porque permite:
# 1. Optimizar el uso de memoria al almacenar categorías como niveles.
# 2. Facilitar análisis estadísticos y modelado, ya que funciones como lm() o glm()
#    tratan correctamente las variables categóricas.
# 3. Mejorar la interpretación de resultados, ya que los factores identifican
#    explícitamente que los valores no son continuos, sino categorías.

# -------------------------------
# Análisis estadístico
# -------------------------------
summary(clientes)
##     Nombre               Edad          Ingresos        Estado_Civil
##  Length:50          Min.   :20.00   Min.   :1065   Casado    :21   
##  Class :character   1st Qu.:31.25   1st Qu.:2113   Divorciado: 7   
##  Mode  :character   Median :43.00   Median :3081   Soltero   :22   
##                     Mean   :45.30   Mean   :3221                   
##                     3rd Qu.:61.50   3rd Qu.:4352                   
##                     Max.   :70.00   Max.   :5811
# Interpretación esperada:
# - Edad: revisar media, mínimo y máximo
# - Ingresos: revisar media y rango
# - Estado Civil: contar cuántos en cada categoría

# -------------------------------
# Filtrar clientes con ingresos > 3000 y solteros
# -------------------------------
clientes_filtrados <- subset(clientes, Ingresos > 3000 & Estado_Civil == "Soltero")

# -------------------------------
# Clasificación de ingresos con bucle for
# -------------------------------
for (i in 1:nrow(clientes)) {
  if (clientes$Ingresos[i] < 2000) {
    categoria <- "Bajo"
  } else if (clientes$Ingresos[i] <= 4000) {
    categoria <- "Medio"
  } else {
    categoria <- "Alto"
  }
  cat(clientes$Nombre[i], "- Ingreso:", clientes$Ingresos[i], 
      "- Categoría:", categoria, "\n")
}
## Cliente 1 - Ingreso: 4617.4 - Categoría: Alto 
## Cliente 2 - Ingreso: 4351.59 - Categoría: Alto 
## Cliente 3 - Ingreso: 2099.49 - Categoría: Medio 
## Cliente 4 - Ingreso: 4351.68 - Categoría: Alto 
## Cliente 5 - Ingreso: 2154.64 - Categoría: Medio 
## Cliente 6 - Ingreso: 1496.76 - Categoría: Bajo 
## Cliente 7 - Ingreso: 1264.7 - Categoría: Bajo 
## Cliente 8 - Ingreso: 2528.69 - Categoría: Medio 
## Cliente 9 - Ingreso: 1835.39 - Categoría: Bajo 
## Cliente 10 - Ingreso: 4497.26 - Categoría: Alto 
## Cliente 11 - Ingreso: 2577.53 - Categoría: Medio 
## Cliente 12 - Ingreso: 4417.01 - Categoría: Alto 
## Cliente 13 - Ingreso: 4499.92 - Categoría: Alto 
## Cliente 14 - Ingreso: 5810.7 - Categoría: Alto 
## Cliente 15 - Ingreso: 2911.87 - Categoría: Medio 
## Cliente 16 - Ingreso: 3743.41 - Categoría: Medio 
## Cliente 17 - Ingreso: 3573.43 - Categoría: Medio 
## Cliente 18 - Ingreso: 1817.67 - Categoría: Bajo 
## Cliente 19 - Ingreso: 1485.26 - Categoría: Bajo 
## Cliente 20 - Ingreso: 1845.07 - Categoría: Bajo 
## Cliente 21 - Ingreso: 1233.47 - Categoría: Bajo 
## Cliente 22 - Ingreso: 2342.82 - Categoría: Medio 
## Cliente 23 - Ingreso: 3172.85 - Categoría: Medio 
## Cliente 24 - Ingreso: 1065.21 - Categoría: Bajo 
## Cliente 25 - Ingreso: 5226.92 - Categoría: Alto 
## Cliente 26 - Ingreso: 4224.51 - Categoría: Alto 
## Cliente 27 - Ingreso: 3175.14 - Categoría: Medio 
## Cliente 28 - Ingreso: 1300.65 - Categoría: Bajo 
## Cliente 29 - Ingreso: 2548.25 - Categoría: Medio 
## Cliente 30 - Ingreso: 2621.92 - Categoría: Medio 
## Cliente 31 - Ingreso: 2619.66 - Categoría: Medio 
## Cliente 32 - Ingreso: 2876.1 - Categoría: Medio 
## Cliente 33 - Ingreso: 4018.27 - Categoría: Alto 
## Cliente 34 - Ingreso: 4261.26 - Categoría: Alto 
## Cliente 35 - Ingreso: 1470.93 - Categoría: Bajo 
## Cliente 36 - Ingreso: 1261.88 - Categoría: Bajo 
## Cliente 37 - Ingreso: 2015.19 - Categoría: Medio 
## Cliente 38 - Ingreso: 5438.87 - Categoría: Alto 
## Cliente 39 - Ingreso: 4940.22 - Categoría: Alto 
## Cliente 40 - Ingreso: 2568.58 - Categoría: Medio 
## Cliente 41 - Ingreso: 2990.03 - Categoría: Medio 
## Cliente 42 - Ingreso: 5419.68 - Categoría: Alto 
## Cliente 43 - Ingreso: 3631.51 - Categoría: Medio 
## Cliente 44 - Ingreso: 5196.81 - Categoría: Alto 
## Cliente 45 - Ingreso: 3259.31 - Categoría: Medio 
## Cliente 46 - Ingreso: 2646.86 - Categoría: Medio 
## Cliente 47 - Ingreso: 4106.98 - Categoría: Alto 
## Cliente 48 - Ingreso: 5314.65 - Categoría: Alto 
## Cliente 49 - Ingreso: 4914.71 - Categoría: Alto 
## Cliente 50 - Ingreso: 3303.57 - Categoría: Medio
  1. Una planta de producción de alimentos desea implementar un sistema de control de calidad automatizado para monitorear la temperatura de un lote de productos durante el empaquetado. El sensor de temperatura toma mediciones de forma continua y el sistema debe detenerse inmediatamente si se detecta un valor superior a 30°C, ya que esto representa un riesgo para la calidad del producto.
# -----------------------------------------
# Simulación de control de calidad - Temperatura
# -----------------------------------------

set.seed(123)              # Para reproducibilidad (opcional)
temperaturas <- numeric(0) # Vector para guardar las lecturas

repeat {
  # Generar una lectura aleatoria entre 20 y 35 °C
  lectura <- runif(1, min = 20, max = 35)
  
  # Guardar la lectura
  temperaturas <- c(temperaturas, lectura)
  
  # Imprimir la lectura (sin paste / sprintf)
  cat("Lectura:", round(lectura, 2), "°C\n")
  
  # Condición de parada: si supera 30 °C, detenemos
  if (lectura > 30) break
}
## Lectura: 24.31 °C
## Lectura: 31.82 °C
# Temperatura media hasta el momento de corte (incluye la lectura de corte)
media_temp <- mean(temperaturas)

cat("\nResumen de la simulación:\n")
## 
## Resumen de la simulación:
cat("Cantidad de lecturas:", length(temperaturas), "\n")
## Cantidad de lecturas: 2
cat("Temperatura media hasta el corte:", round(media_temp, 2), "°C\n")
## Temperatura media hasta el corte: 28.07 °C
cat("Primera lectura:", round(temperaturas[1], 2), "°C\n")
## Primera lectura: 24.31 °C
cat("Última lectura (corte):", round(tail(temperaturas, 1), 2), "°C\n")
## Última lectura (corte): 31.82 °C