Habitación 2: Tipos de Pokémon
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(count) do
case count == 18 do
true -> Helpers.Messages.correct(
"04.livemd",
"Existen 18 tipos de Pokémon."
)
_ ->
Helpers.Messages.error(
"La puerta sigue cerrada... Revisa bien los datos y cuenta nuevamente los tipos de Pokémon."
)
end
|> Kino.Markdown.new()
end
end
Contexto
El sistema del laboratorio sigue bloqueado…
En la pantalla aparece un nuevo mensaje del Profesor Oak:
> “Un buen Científico de Datos debe ser capaz de responder preguntas simples con datos. > ¿Cuántos Pokémon de cada tipo existen?”
Para contar cuántos Pokémon hay por tipo puedes usar:
conteo =
df
|> DF.frequencies(["Type 1"])
|> DF.sort_by(desc: counts)
Si se quiere contar la cantidad total de filas
conteo
|> DF.n_rows()
Para graficar los resultados se utiliza Vega-lite:
alias VegaLite, as: Vl
chart =
Vl.new()
|> Vl.data_from_values(conteo)
|> Vl.mark(:bar)
|> Vl.encode_field(:x, "Type 1", type: :nominal, title: "Tipo")
|> Vl.encode_field(:y, "counts", type: :quantitative, title: "Cantidad")
Desafío de la habitación
- Crea la variable conteo que contenga la cantidad de Pokémon por Type 1.
- Genera un gráfico de barras con ese conteo.
- Verifica tu respuesta.
require Explorer.DataFrame, as: DF
alias VegaLite, as: Vl
file = Path.expand("../files/pokemon.csv", __DIR__) # "pokemon.csv"
df = file
# |> Kino.FS.file_path()
|> DF.from_csv!()
Contar los elementos
conteo =
df
|> DF.frequencies(["Type 1"])
|> DF.sort_by(desc: counts)
Crear la gráfica
chart =
Vl.new(title: "Cantidad de Pokémon por Tipo")
|> Vl.data_from_values(conteo)
|> Vl.mark(:bar)
|> Vl.encode_field(:x, "Type 1", type: :nominal, title: "Tipo")
|> Vl.encode_field(:y, "counts", type: :quantitative, title: "Cantidad")
Obtener la respuesta
respuesta =
conteo
|> DF.n_rows()
Verificar tu respuesta
Room.verify(respuesta)