shahryarjb

shahryarjb

Hello, I started the ml elixir book, the first code in this book has error for me :smiling_face_with_tear:

require Explorer.DataFrame, as: DF
iris = Explorer.Datasets.iris()
cols = ["sepal_width", "sepal_length", "petal_length", "petal_width"]

DF.mutate(iris,
  for col <- across(cols) do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

Errors

** (ArgumentError) undefined variable "cols"
    (explorer 0.6.1) lib/explorer/query.ex:365: Explorer.Query.traverse/3
    (elixir 1.15.2) lib/enum.ex:1819: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
    (explorer 0.6.1) lib/explorer/query.ex:375: Explorer.Query.traverse/3
    (explorer 0.6.1) lib/explorer/query.ex:401: Explorer.Query.traverse_for/3
    (explorer 0.6.1) lib/explorer/query.ex:298: anonymous fn/3 in Explorer.Query.traverse/2
    (elixir 1.15.2) lib/enum.ex:1819: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3
    (explorer 0.6.1) lib/explorer/query.ex:296: Explorer.Query.traverse/2
    (explorer 0.6.1) expanding macro: Explorer.Query.query/1

I am using LiveBook v0.10.0 and these deps:

Mix.install([
  {:axon, "~> 0.5"},
  {:nx, "~> 0.5"},
  {:explorer, "~> 0.5"},
  {:kino, "~> 0.5"}
])

It should be noted if I use the list directly it has not problem

require Explorer.DataFrame, as: DF
iris = Explorer.Datasets.iris()

DF.mutate(iris,
  for col <- across( ["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

why it has this error?
Thank you in advance

Showing Posts 1 to 6

NickGnd

NickGnd

Hey @shahryarjb :wave:

I didn’t try and I don’t own the book (yet), but based on the documentation if you want to access to all the columns in a for comprehension loop you just need to use across().

See this section Explorer.Query — Explorer v0.11.1

A for-comprehension can have multiple generators and filters. For instance, if you want to apply standardization to all float columns, we can use across/0 to access all columns and then use a filter to keep only the float ones:

Hope it helps, enjoy the reading :slight_smile:

shahryarjb

shahryarjb OP

These are not all the columns

but based on my top code, it I use

for col <- across( ["sepal_width", "sepal_length", "petal_length", "petal_width"]) do

it works but the

cols = ["sepal_width", "sepal_length", "petal_length", "petal_width"]

DF.mutate(iris,
  for col <- across(cols) do

does not work.

If I use

DF.mutate(iris,
  for col <- across() do

it shows me

** (ArgumentError) Explorer.Series.mean/1 not implemented for dtype :string. Valid dtypes are [:integer, :float]
    (explorer 0.6.1) lib/explorer/series.ex:4692: Explorer.Series.dtype_error/3
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:7: (file)
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:6: (file)
    /Users/shahryar/Desktop/ml.livemd#cell:anjlmkx4hegczaf3ubcadze2wqyuweq5:5: (file)
NickGnd

NickGnd

Ah I see, sorry I missed that.

I guess you can apply a filter based on the column type:

DF.mutate(iris,
  for col <- across(), col.dtype == :float do
    {col.name, (col - mean(col)) / variance(col)}
  end
)

:thinking:

Honestly, I don’t know why the book suggests an usage of the across macro that is not contemplated by the documentation, or maybe I’m missing something :upside_down_face:

codeanpeace

codeanpeace

It seems like Explorer.Query adopted a similar approach to Ecto.Query in its use of ^ for interpolation.

reference: Interpolation and Casting | Ecto.Query & Interpolation | Explorer.Query

p.s. It’s worth noting that the ^ in Ecto and Explorer is not the same as the ^ pin operator in Elixir – learn more about it here: https://stackoverflow.com/questions/73588330/why-do-ecto-queries-need-the-pin-operator

shahryarjb

shahryarjb OP

I think the author should change it in the book, @seanmor5

seanmor5

seanmor5

Author of Genetic Algorithms in Elixir
— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
matt-savvy
Anyone here using Honeybadger? My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of Bandit.HTTPError...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews