Histograma y diagrama de dispersión¶
Ejercicio histogram-and-scatter-annex.pdf · PDF
¿Son baratos o caros la mayoría de los juegos de Steam? Tienes 26,685 precios en games_clean. Una barra por precio exacto te daría cientos de barras: 0.99, 1.99, 2.49, 2.99... Nadie podría leer eso.
Los juegos competitivos resolvieron este problema hace tiempo. En el modo clasificatorio (ranked), nadie dibuja una barra por jugador. El juego corta la escala de puntuación en tramos, los llama Bronce, Plata, Oro, Platino y Diamante, y cuenta cuántos jugadores hay en cada uno. De un vistazo sabes dónde está la mayoría de la gente y lo raro que es llegar arriba.
Esa imagen es el primer gráfico de esta lección. El segundo responde a otro tipo de pregunta, también del modo clasificatorio: ¿tienen más rango los jugadores con más horas? Un solo número no puede responder a eso. Necesitas dos, en la misma imagen.
Qué aprenderás
- Decir qué muestra un histograma y en qué se diferencia de un gráfico de barras
- Elegir un número razonable de intervalos (bins) y ver qué hacen los valores atípicos a un histograma
- Leer una distribución con palabras: dónde están la mayoría de los valores, cuánto mide la cola
- Construir un diagrama de dispersión de dos columnas numéricas y decir qué representa un punto
- Describir una relación (dirección y fuerza) sin afirmar una causa
- Desactivar la trampa: por qué "la nube sube" no significa "una cosa causa la otra"
El histograma: la distribución de rangos¶
Un histograma corta una columna numérica en intervalos iguales y dibuja una barra por intervalo. La altura de cada barra es el número de filas que caen dentro.
Cada intervalo es un bin. La forma que dibujan las barras en conjunto es la distribución de la columna: dónde se amontonan los valores y dónde son raros.
En el modo clasificatorio, la columna numérica es la puntuación, los bins son los rangos y la altura es el número de jugadores. Con los precios de los juegos, la columna es price, cada bin es un tramo de precio y la altura es el número de juegos.
La palabra es más antigua que los videojuegos: el estadístico inglés Karl Pearson introdujo el término histograma en 1891.
Parece un gráfico de barras. No lo es¶
Los dos tienen barras, y ahí acaba el parecido.
| Gráfico de barras | Histograma | |
|---|---|---|
| Eje X | Categorías que ya existen (price_band) |
Una columna numérica cortada en bins iguales |
| Altura de la barra | Cualquier métrica por categoría | Siempre un recuento: las filas dentro del bin |
| Tú eliges | La dimensión y la métrica | La columna y el número de bins |
| Orden de las barras | Lo decides tú (ordena por valor) | Fijo: la recta numérica, de menor a mayor |
| Responde a | ¿Qué categoría es mayor? | ¿Qué forma tienen los valores? ¿Dónde están la mayoría? |
En Categorización construiste price_band a mano, con CASE WHEN. Esos tramos tenían anchuras desiguales que tú elegiste: Under 5, 5 to 15, 15 to 30. Un histograma es diferente: toma el mínimo y el máximo de los datos y corta todo lo que hay entre medias en bins de anchura igual.
Ese último detalle está a punto de morder.
Una barra gigante: lo que hacen los valores atípicos¶
Pide un histograma de price con 5 bins y obtienes el gráfico de la izquierda.
Una barra enorme y casi nada más: 26,658 productos en el primer bin, luego 22, 2, 2 y 1. El gráfico es correcto. También es inútil.
¿Por qué? Cinco bins iguales entre el producto más barato y el más caro. Entonces, ¿cuál es el más caro?
SELECT game, price FROM games_clean ORDER BY price DESC LIMIT 6;
game |
price |
|---|---|
| ADR-Labelling Game | 595.99 |
| GameMaker Studio 2 UWP | 399.99 |
| VEGAS Pro 16 Edit Steam Edition | 399.00 |
| Marvelous Designer 8 for Steam | 320.00 |
| Facerig Studio for Individual Creators | 299.99 |
| Silhouette | 199.99 |
Mira los nombres. La mayoría no son juegos: son programas de diseño y de vídeo vendidos en Steam. Un puñado de filas estira el eje hasta 595.99, así que cada uno de los 5 bins mide 119.2 de ancho, y casi todos los productos de la tabla caen en el primero.
Un valor atípico (outlier) es un valor que está muy lejos de casi todos los demás.
El arreglo tiene dos partes: mira solo el rango donde están los juegos y usa más bins. Filtra a precios de hasta 60, pide 12 bins y obtienes el gráfico de la derecha. El filtro deja fuera solo 83 de las 26,685 filas (0.3 %).
Cuidado: quitar valores atípicos de una imagen no es borrar datos
Esas 83 filas son productos reales con precios reales. Las quitaste de este gráfico porque la pregunta trata de juegos, y lo dices en el título: "precio hasta 60". Un valor atípico es un valor que hay que investigar, no que borrar por reflejo. Siguen estando en games_clean.
Leer una distribución con palabras¶
Un histograma está terminado cuando puedes decirlo en una frase. Para el gráfico de la derecha:
La mayoría de los juegos son baratos: 14,707 de 26,602 (55 %) cuestan menos de 5, y esa barra incluye los 3,094 juegos gratuitos.
Tres cosas que buscar en cualquier distribución:
| Busca | En el histograma de precios |
|---|---|
| ¿Dónde está el pico? | El primer bin, de 0 a 5 |
| ¿Hay cola? La parte baja que se alarga hacia un lado | Una larga cola a la derecha: cada vez menos juegos a medida que sube el precio |
| ¿Algo raro? | Un zigzag en la cola |
El zigzag tiene una explicación aburrida. A las tiendas les encantan los precios que acaban en .99, y 24.99 y 29.99 caen en bins distintos. Algunos bins contienen un precio popular y sus vecinos no.
Esta imagen también explica algo de Estadística exploratoria. El precio medio es 7.91 y la mediana es 4.99. ¿Por qué tan distintos? La larga cola derecha: unos pocos productos caros tiran de la media hacia arriba, mientras que la mediana se queda donde está la mayoría de los juegos. El histograma es la imagen de por qué difieren.
Cuidado: más bins no siempre es mejor
Muy pocos bins esconden la forma: con 5 bins viste una barra. Demasiados convierten la forma en ruido, con cientos de barras finas y huecos. Prueba dos o tres valores y quédate con el que cuenta la verdad con sencillez.
El diagrama de dispersión: un punto por jugador¶
De vuelta al modo clasificatorio. ¿Tienen más rango los jugadores con más horas? Un histograma no puede responder: mira un solo número. Toma a cada jugador, pon sus horas en el eje horizontal y su rango en el vertical, y dibuja un punto.
Un diagrama de dispersión (scatter plot) dibuja un punto por fila, colocado según dos columnas numéricas: una fija la posición horizontal, la otra la vertical. Muestra la relación entre las dos.
Aquí tienes uno real de la tabla de clase pokemon. Cada uno de los 949 puntos es un Pokémon, colocado según su attack y su defense:
Un diagrama de dispersión no se lee punto a punto. Se lee la forma de la nube:
| Forma de la nube | Lectura | Cuidado |
|---|---|---|
| Sube hacia la derecha | Relación positiva: cuando uno es alto, el otro tiende a ser alto | No dice cuál causa al otro |
| Baja hacia la derecha | Relación negativa: cuando uno es alto, el otro tiende a ser bajo | Misma advertencia |
| Mancha redonda | Sin relación clara | Eso también es una respuesta |
Esta nube sube hacia la derecha, de forma difusa: los Pokémon con más ataque tienden a tener más defensa. Tienden. La nube es ancha, y algunos puntos ignoran la regla por completo. El punto solitario de la esquina superior izquierda es Shuckle: ataque 10, defensa 230.
Lo apretada que está una nube tiene un número.
La correlación mide lo estrechamente que se mueven dos números juntos, desde -1 (una recta descendente perfecta) pasando por 0 (una mancha) hasta 1 (una recta ascendente perfecta).
En PostgreSQL la función es CORR:
SELECT CORR(attack, defense) FROM pokemon;
Devuelve 0.44: una relación positiva de fuerza moderada. El diagrama de dispersión es la imagen, y la correlación es su resumen en un número. Mira siempre también la imagen: en Los datos no hablan solos viste cuatro conjuntos de datos con los mismos números resumen y cuatro formas completamente distintas.
Correlación no es causalidad¶
Un diagrama de dispersión muestra que dos cosas van juntas. Nunca muestra que una cause la otra.
La causalidad significa que cambiar una cosa hace cambiar la otra. Un gráfico por sí solo no puede demostrarla.
Vuelve al modo clasificatorio. Supón que los jugadores con más horas sí tienen más rango. ¿Jugar más te hace mejor? Quizá. O quizá los buenos jugadores disfrutan más del juego y por eso juegan más: la flecha apunta al revés. O una tercera cosa empuja a ambas.
Los datos de clase tienen un ejemplo limpio. Entre los juegos de Steam que tienen puntuación de la crítica, los más caros puntúan un poco más alto. ¿Subir el precio mejora las reseñas? Claro que no. Los grandes estudios cobran más y tienen presupuestos mayores. El presupuesto está detrás de ambos números.
flowchart TB
B["<b>Una tercera cosa</b><br>un estudio grande<br>con un gran presupuesto"]
B --> P["<b>Precio más alto</b>"]
B --> M["<b>Mejores reseñas</b>"]
P -. "el gráfico muestra estas dos juntas.<br>No muestra una flecha" .- M
Cuidado: la frase honesta
Di lo que muestra el gráfico y nada más. "Entre los juegos con reseña, los más caros puntúan algo más alto de media" es honesto. "Sube el precio y las reseñas mejoran" es una afirmación que el gráfico no puede sostener.
Solo las filas que tienen el valor¶
Hay una trampa más en ese ejemplo de precio y reseñas, y trata de qué filas están en el gráfico.
La puntuación de la crítica es la columna metascore. Solo 2,849 de los 26,685 juegos tienen una: alrededor del 11 %. En Imputación decidiste no inventar las puntuaciones ausentes, y añadiste la columna has_metascore para distinguir los dos grupos.
Así que un gráfico de precio frente a metascore describe esos 2,849 juegos, no Steam. Y no son un 11 % al azar: la crítica reseña los juegos que reciben atención. Dilo en el título.
Esto es lo que dibuja Superset cuando pides un diagrama de dispersión de price y el metascore medio:
Cuidado: aquí cada punto es un precio, no un juego
El Scatter Plot de Superset agrupa por el eje X. Hay 58 puntos, uno por cada precio distinto, y la altura de un punto es el metascore medio de todos los juegos con reseña vendidos a ese precio. Compáralo con el gráfico de Pokémon, donde un punto era un Pokémon. Antes de leer cualquier gráfico, pregunta: ¿qué representa una marca?
La nube sube ligeramente. Pero mira en qué puntos puedes confiar:
| Precio | Metascore medio | Juegos detrás del punto |
|---|---|---|
| 0.00 | 71.9 | 159 |
| 4.99 | 67.8 | 202 |
| 9.99 | 71.6 | 661 |
| 19.99 | 74.1 | 504 |
| 29.99 | 74.1 | 165 |
| 39.99 | 74.8 | 75 |
| 59.99 | 77.8 | 39 |
| 0.54 (el punto más bajo) | 49.0 | 1 |
| 54.99 | 88.0 | 1 |
El punto de 9.99 es la media de 661 juegos. El punto de 54.99 es un único juego que casualmente sacó 88. Superset dibuja ambos con el mismo tamaño. En la figura de arriba los puntos de un solo juego están huecos para que puedas distinguirlos: 26 de los 58 puntos representan un solo juego.
Juego a juego, la relación es débil: CORR(price, metascore) sobre los 2,849 juegos con reseña es 0.16.
Pruébalo: precios, y precio frente a metascore¶
Ambos gráficos usan el dataset games_clean (consulta Recursos para los datos).
Gráfico 4 — Distribución de precios. ¿Dónde están la mayoría de los juegos y cuánto mide la cola?
| Paso | Haz esto en Superset | Deberías ver |
|---|---|---|
| 1 | Gráfico nuevo sobre games_clean, tipo de gráfico Histogram. No está en la primera lista (Featured): haz clic en All charts, o escribe histogram en el cuadro de búsqueda |
Un editor de gráficos vacío |
| 2 | Column: price. Row limit: cambia 10000 por 50000. Deja Bins en 5. Create chart |
Una barra enorme. Pasa el ratón por encima: 0 - 119.2 |
| 3 | Filters: price, operador Less or equal (<=), escribe 60 y elígelo en la lista, Save |
Un chip price <= 60 bajo Filters |
| 4 | Bins: escribe 12 y pulsa Enter. Update chart |
Doce barras, la primera la más alta, una cola hacia la derecha |
| 5 | Customize, Y Axis Format: ,d |
El cuadro al pasar el ratón dice 14,707 en lugar de 14.7k |
| 6 | Save, nombre UT3 · Price distribution |
El gráfico está en la lista de Charts |
No te saltes el límite de filas del paso 2. Un histograma se calcula a partir de las filas que recibe, y con el valor por defecto leería solo 10,000 de tus 26,685 juegos.
Las doce barras deben coincidir con estos recuentos:
| El bin empieza en | Juegos | El bin empieza en | Juegos | El bin empieza en | Juegos |
|---|---|---|---|---|---|
| 0 | 14,707 | 20 | 282 | 40 | 18 |
| 5 | 6,611 | 25 | 419 | 45 | 99 |
| 10 | 2,435 | 30 | 60 | 50 | 6 |
| 15 | 1,666 | 35 | 209 | 55 | 90 |
Gráfico 5 — Precio frente a metascore. ¿Los juegos más caros reciben mejores reseñas?
| Paso | Haz esto en Superset | Deberías ver |
|---|---|---|
| 1 | Gráfico nuevo sobre games_clean, tipo de gráfico Scatter Plot |
Un editor de gráficos vacío |
| 2 | X-axis: price. Metrics: pestaña Simple, columna metascore, agregado AVG |
La métrica AVG(metascore) |
| 3 | Filters: has_metascore, operador Is true, Save. Create chart |
Una nube de 58 puntos entre 0 y 60 en el eje X |
| 4 | Pasa el ratón por el punto de 9.99, el de 59.99 y el punto más bajo | 71.6, 77.8 y 49 |
| 5 | Save, nombre UT3 · Price vs metascore |
El gráfico está en la lista de Charts |
Los puntos son las 58 filas de esta consulta:
SELECT price, ROUND(AVG(metascore)::numeric, 1) AS avg_metascore, COUNT(*) AS games
FROM games_clean WHERE has_metascore GROUP BY price ORDER BY price;
Si algo no se ve bien
- La primera barra acaba cerca de 40 en lugar de 119, o las barras suman 10,000. Row limit sigue en 10,000, así que el gráfico leyó solo parte de la tabla. Ponlo en 50,000.
- Sigue habiendo una barra gigante tras el filtro. El filtro no se guardó (el chip
price <= 60debe aparecer bajo Filters), o no se pulsó Update chart. - "Must specify a value for filters with comparison operators". El chip dice
price <=sin número. Haz clic en él, escribe60, elígelo en la lista, Save. - Un diagrama de dispersión con un solo punto.
pricefue a Metrics en lugar de a X-axis. - Puntos repartidos uniformemente como en un gráfico de barras. Force categorical está marcado bajo el eje X. Desmárcalo.
Ve más allá: el histograma acumulado
En el histograma, marca Cumulative y actualiza el gráfico (no lo guardes). Cada barra suma ahora todas las barras anteriores. La segunda barra llega a 21,318: los dos primeros bins juntos. Así que el 80 % de estos 26,602 juegos cuesta menos de 10.
Ideas clave¶
- Un histograma corta una columna numérica en bins iguales y cuenta las filas de cada uno. Muestra una distribución: dónde se amontonan los valores y cuánto mide la cola.
- Un histograma no es un gráfico de barras: su eje X es una recta numérica, su altura es siempre un recuento y tú eliges el número de bins.
- Los valores atípicos estiran el eje y aplastan todo en una barra. Filtra el gráfico a un rango razonable, dilo en el título y no borres las filas.
- Un diagrama de dispersión coloca puntos según dos columnas numéricas y muestra su relación: ascendente, descendente o ninguna. La correlación le pone un número.
- Correlación no es causalidad. Dos cosas pueden moverse juntas porque una tercera empuja a ambas.
- Pregunta siempre qué representa una marca y qué filas están en el gráfico. El precio frente al metascore describe el 11 % de los juegos con reseña, y cada punto es un precio, no un juego.
Comprobación rápida¶
1. ¿Qué muestra siempre la altura de una barra en un histograma?
- La media de la columna dentro de ese bin
- El número de filas cuyo valor cae dentro de ese bin
- El mayor valor dentro de ese bin
- Cualquier métrica que elijas, como en un gráfico de barras
Un histograma cuenta. Cada bin es un tramo de una columna numérica, y la altura de la barra es cuántas filas caen en él. Elegir cualquier métrica por categoría es lo que hace un gráfico de barras.
2. ¿En qué se diferencia un histograma de price del gráfico de barras de price_band?
- No hay diferencia: los dos tienen barras
- El histograma usa colores y el gráfico de barras no
- El histograma corta el número en bins de anchura igual calculados a partir de los datos;
price_bandtiene tramos desiguales elegidos a mano - El gráfico de barras solo puede mostrar cinco barras
price_band se construyó con CASE WHEN y sus anchuras fueron tu elección. Un histograma toma el mínimo y el máximo de los datos y hace bins de anchura igual, que es exactamente por lo que los valores atípicos pueden romperlo.
3. Tu primer histograma de price muestra una barra gigante y cuatro casi vacías. ¿Cuál es la causa?
- La columna
priceestá guardada como texto - La mayoría de los juegos son gratuitos
- Unos pocos productos con precios de hasta 595.99 estiran el eje, así que cada uno de los 5 bins mide 119.2 de ancho
- Superset solo puede dibujar una barra en un histograma
Los bins se cortan entre el mínimo y el máximo. Un puñado de valores atípicos (software caro, no juegos) lleva el máximo a 595.99, y 26,658 productos caen en el primer bin.
4. Filtras el histograma a price <= 60. ¿Qué pasó con los 83 productos por encima de 60?
- Se borraron de
games_clean - Se movieron al último bin
- Siguen en la tabla; se dejaron fuera de este gráfico, y el título debería decirlo
- Su precio se cambió a 60
Un filtro de gráfico cambia la imagen, no los datos. Las filas son reales y se quedan en la tabla. Un valor atípico es un valor que hay que investigar, no que borrar por reflejo.
5. En el diagrama de dispersión de Pokémon, la nube sube de forma difusa hacia la derecha y CORR(attack, defense) es 0.44. ¿Qué puedes decir?
- Subir el ataque de un Pokémon hace que suba su defensa
- Los Pokémon con más ataque tienden a tener más defensa, con muchas excepciones
- Todo Pokémon con ataque alto tiene defensa alta
- Ataque y defensa no están relacionados
Una nube ascendente es una relación positiva, y 0.44 dice que es de fuerza moderada: una tendencia, no una regla. Shuckle tiene ataque 10 y defensa 230. Y una relación nunca demuestra una causa.
6. En el diagrama de dispersión de Superset del precio frente al metascore medio, ¿qué es un punto?
- Un juego
- Una editora
- Un precio: el metascore medio de todos los juegos con reseña vendidos a ese precio
- Una reseña escrita por un crítico
El Scatter Plot de Superset agrupa por el eje X, así que hay 58 puntos para 2,849 juegos. El punto de 9.99 promedia 661 juegos; el de 54.99 es un solo juego. Pregunta siempre qué representa una marca.
7. ¿Por qué no puedes decir \"en Steam, los juegos caros reciben mejores reseñas\" a partir de ese gráfico?
- Porque la correlación es negativa
- Porque el gráfico solo incluye el 11 % aproximado de juegos que tienen metascore, y esos no son una muestra aleatoria
- Porque los diagramas de dispersión no pueden usar precios
- Porque el gráfico tiene muy pocos bins
Solo 2,849 de 26,685 juegos tienen metascore, y la crítica reseña los juegos que reciben atención. El gráfico describe juegos con reseña. Un segundo problema: incluso ahí, una relación no es una causa.
8. Un amigo te enseña un histograma de los salarios de una empresa: una barra enorme a la izquierda y nada más visible. Luego dibuja el salario frente a los años en la empresa y dice \"quedarte más tiempo te hace ganar más\". Elige las dos respuestas correctas.
- Unos pocos salarios muy altos estiran el eje: filtra a un máximo razonable, dilo y usa más bins
- El diagrama de dispersión muestra que salario y años van juntos, no que uno cause el otro
- El histograma está roto porque los salarios son categorías
- El diagrama de dispersión demuestra la causa, porque la nube sube
La barra gigante es el efecto de los valores atípicos que viste con los precios, y el arreglo es el mismo. La segunda afirmación confunde correlación con causalidad: los dos se mueven juntos, y otra cosa (el tipo de puesto, por ejemplo) podría empujar a ambos.
Ya sabes mostrar cómo se reparte un número y cómo se relacionan dos. Aún faltan dos gráficos famosos, y uno de ellos es muy fácil de hacer mal: Sectores, mapa de calor y otros.