library(ggplot2)
load("data/datosVisualizacion.RData")Tema 02 - Visualización de datos
Ejercicios del tema
Antes de empezar
Estos ejercicios se van haciendo durante las clases del tema: las transparencias indican en qué momento toca cada uno.
Si no lo has hecho ya, lee Cómo trabajar en cada tema: la carpeta del tema con su subdirectorio data, cómo se crea el documento, qué va en la cabecera (con embed-resources: true), la primera celda y cómo se entrega. Vale para todo el curso.
De este tema, lo que te hace falta:
- Los datos son
datosVisualizacion.RDatayempresas.RData, de la página Datos. Descárgalos en tu subdirectoriodata. - Un documento por ejercicio,
T02_E<n>_<ID>.qmd:T02_E1_12345678.qmdpara el ejercicio 1,T02_E2_12345678.qmdpara el 2, y así. Cada uno carga sus propios datos en su primera celda.
Entrega 1: la clientela
Trabajamos con clientes: 300 fichas de la clientela de nuestra cadena de gimnasios.
Apartado a)
Dibuja la relación entre
ingresosygastocongeom_point().Pinta TODOS los puntos de rojo, de verdad (que no aparezca ninguna leyenda).
Ejecuta esto y describe qué ves: ¿de qué color salen los puntos? ¿qué dice la leyenda? ¿por qué?
ggplot(clientes, aes(x = ingresos, y = gasto)) +
geom_point(aes(color = "red"))Distingue el
segmentopor color y elcanalpor forma. Y ahora añade ademássize = edad. ¿Se lee el gráfico con tres variables encima? ¿Cuántas cosas a la vez puede leer quien lo mira? Quédate con la versión que sí se lee y di por qué.Añade
size = 4dentro deaes()y luego fuera. Una de las dos no tiene sentido: ¿cuál y por qué? En una frase, ¿qué regla te sirve para decidirlo?
Apartado b): capas con sus propios datos
Sobre el gráfico del apartado a), con el segmento por color.
Etiqueta a quienes más gastan. Como solo quieres unas pocas fichas, esa capa lleva sus propios datos, igual que hicimos en clase con los países:
top <- clientes[clientes$gasto > 8000, ]y encima una capa
geom_text_repel(data = top, aes(label = cliente)).¿Por qué esa capa necesita sus propios datos, y qué pasaría si le dieras
clientesentero?
Apartado c): el gráfico cuenta por ti
Número de clientes de cada
segmento, congeom_bar(). ¿Dónde está la tabla de frecuencias que has usado?Lo mismo, pero con la PROPORCIÓN que representa cada segmento, sin calcular nada aparte: tienes el patrón con
after_stat(prop)en las transparencias.
- En una frase: ¿qué significa que un
geom“tiene una estadística por defecto”?
Apartado d): distribuciones
Distribución de los
ingresoscongeom_histogram(), probandobins = 10,bins = 40ybinwidth = 3. ¿Cuál de las tres le enseñarías a dirección y por qué?Con una de esas tres se ve un grupo de clientes de ingresos muy bajos y con las otras no. ¿Con cuál, y qué te dice eso sobre elegir los intervalos?
Compara el
gastoentresegmentocon ungeom_boxplot().
Apartado e): contexto y aspecto
Vuelve al gráfico del apartado a) y añádele una recta de tendencia con
geom_smooth(method = "lm", se = FALSE). ¿Qué dice esa recta que no dijera la nube de puntos?Divídelo en facetas por
canal. ¿Se lee mejor así o con el color? ¿Por qué?Añade una línea de referencia horizontal en el gasto medio, discontinua, y anótala con
annotate()para que se entienda qué marca.Ponle
labs()completo: título, ejes con sus unidades y uncaptioncon la fuente.Prueba al menos dos temas y quédate con uno. Prueba también uno profesional, de
ggthemes:library(ggthemes) mi_grafico + theme_economist()
Entrega 2: corporaciones y startups
Una consultora de inversión compara el perfil de ingresos de cinco grandes corporaciones y cinco startups. Los datos están en la página Datos del curso, y traen su propio diccionario:
load("data/empresas.RData")
empresas_info # qué es cada variableDiagrama de cajas de
ingresos_millonesportipo, en escala normal.El mismo gráfico con
scale_y_log10().Comparando los dos: ¿qué diferencias hay en la posición central y en la variabilidad dentro de cada grupo? ¿Cuál de los dos gráficos es más informativo, y por qué?
Si esa variabilidad mide el riesgo de una inversión, ¿dónde es más arriesgado invertir?
Entrega 3: reservas de hotel
Aquí nadie te dice qué gráfico dibujar: elegirlo es parte del ejercicio.
El fichero hotels.csv tiene una reserva por fila (descripción de las variables):
hoteles <- rio::import("https://raw.githubusercontent.com/albarran/00datos/main/hotels.csv")Una cadena hotelera quiere lanzar promociones por segmento de mercado, y antes necesita saber cuántas reservas vienen de cada segmento y si eso depende del tipo de hotel.
market_segmentdice de dónde viene la reserva (Online TAson agencias de internet,Corporateempresas,Groupsgrupos,Directreservas directas…) yhoteldistingue el hotel urbano del vacacional.Dibuja la visualización que les permita decidir. Ajústala hasta que se entienda sola: título, etiquetas legibles, colores con sentido.
Un directivo afirma que quien viaja con hijos reserva con más antelación, y quiere centrar ahí las promociones. Comprueba si es verdad con un gráfico. Tienes
lead_time(días entre la reserva y la llegada) ychildren(número de niños).En dos frases: ¿qué le contestas al directivo? Si los datos no le dan la razón, dilo.
Antes de escribir código, escribe en una línea qué pregunta tiene que contestar el gráfico y qué variables la contestan.
Cómo se entrega
Cada ejercicio es una entrega, por el formulario de entrega:
- Entrega 1: la clientela.
T02_E1_ID.zip - Entrega 2: corporaciones y startups.
T02_E2_ID.zip - Entrega 3: las reservas de hotel.
T02_E3_ID.zip
Subid en cada una un solo .zip con el .qmd y el .html dentro. El ID es el mismo identificador que escribís en el formulario (ver Cómo trabajar). Por ejemplo, T02_E1_12345678.zip.
Se os dirá en clase cuáles de las tres hay que entregar y cuándo.
Comprobad que el nombre sea exacto, o la entrega se rechazará. Recibiréis un correo de confirmación si la entrega es correcta, o de rechazo si no lo es.
Renderizad con embed-resources: true para que el .html se vea por sí solo.
No se valora que esté perfecto: se valora el progreso y que se vea lo que habéis entendido. Si os quedáis a medias, entregad lo que tengáis.
Las entregas que se hagan en clase se cierran al acabar la sesión, con un margen de 15 minutos desde el final. La hora de envío queda registrada.