Habitación 4: Visualización de Combate
Mix.install([
{:explorer, "~> 0.11.1"},
{:kino, "~> 0.19.0"},
{:kino_explorer, "~> 0.1.25"},
{:kino_vega_lite, "~> 0.1.13"},
{:helpers, path: Path.expand("../helpers", __DIR__)}
])
defmodule Room do
require Explorer.DataFrame, as: DF
def verify(answer) do
if answer == "AggronMega Aggron" do
Helpers.Messages.correct(
"06.livemd",
"Has dominado la visualización y el análisis de datos"
)
else
Helpers.Messages.error(
"Revisa bien... parece que no sumaste correctamente o elegiste mal el Pokémon."
)
end
|> Kino.Markdown.new()
end
end
Contexto
La sala está llena de pantallas mostrando batallas Pokémon.
El Profesor Oak te deja un nuevo mensaje:
Antes de elegir al Pokémon más fuerte, un buen Científico de Datos debe visualizar los datos. No siempre sumar estadísticas tiene sentido… ¡Primero observa, luego decide!
Recuerda
El gráfico de dispersión nos permite observar:
- Si las estadísticas están relacionadas.
- Si sumar tiene sentido o si las variables son muy distintas.
Luego de observar, podemos ordenar la tabla y tomar una mejor decisión.
Desafío de la habitación
-
Elegir dos estadísticas de combate (
col_xycol_y) — por ejemploAttackyDefense. - Crear un gráfico de dispersión para ver cómo se relacionan.
-
Crear una nueva columna llamada
sumasumando esas dos estadísticas. -
Mostrar los 5 mejores Pokémon con mayor
suma. -
Definir en
respuestael nombre del Pokémon con la mayorsuma.
Crear DataFrame
require Explorer.DataFrame, as: DF
alias Explorer.Series
alias VegaLite, as: Vl
file = Path.expand("../files/pokemon.csv", __DIR__) # "pokemon.csv"
df = file
# |> Kino.FS.file_path()
|> DF.from_csv!()
Elegir columnas
Elegir dos estadísticas de combate (col_x y col_y) — por ejemplo Attack y Defense.
col_x = "Attack" # Por ejemplo: 'Attack', 'Defense', 'HP', 'Speed'
col_y = "Defense" # Por ejemplo: 'Attack', 'Defense', 'HP', 'Speed'
Columna suma
Crear una nueva columna llamada Suma, sumando esas dos estadísticas.
df =
df
|> DF.mutate(Suma: col(^col_x) + col(^col_y))
Gráfico de dispersión
Crear un gráfico de dispersión para ver cómo se relacionan las columnas seleccionadas
color = "green" # Por ejemplo: 'orange', 'green', 'blue', 'red'
Vl.new(width: 700, height: 400, title: "#{col_x} vs #{col_y} de Pokémon")
|> Vl.data_from_values(df)
|> Vl.mark(:point, color: color)
|> Vl.encode_field(:x, col_x, type: :quantitative)
|> Vl.encode_field(:y, col_y, type: :quantitative)
Top 5 Pokémon
Mostrar los 5 mejores Pokémon con mayor suma.
df
|> DF.select(["Name", col_x, col_y, "Suma"])
|> DF.sort_by(desc: col("Suma"))
|> DF.head(5)
Definir respuesta
Definir en respuesta el nombre del Pokémon con la mayor suma.
respuesta =
df
|> DF.sort_by(desc: col("Suma"))
|> DF.pull("Name")
|> Series.first()
Verificar tu respuesta
Room.verify(respuesta)