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 = nil # Por ejemplo: 'Attack', 'Defense', 'HP', 'Speed'
col_y = nil # Por ejemplo: 'Attack', 'Defense', 'HP', 'Speed'
Columna suma
Crear una nueva columna llamada Suma, sumando esas dos estadísticas.
Usando DF.mutate(df, Suma: col(^col_x) + col(^col_y)).
df = nil
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.
-
DF.sort_by(desc: col("Suma")): Ordena descendente según la columna “Suma”. -
DF.pull("Name"): Obtiene solamente el valor de la columna “Name”. -
Series.first(): Obtiene solamente el primer resultado.
respuesta = nil
Verificar tu respuesta
Room.verify(respuesta)