10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 6

【TIPS】マップリストにpandasのget_dummiesっぽいダミー値処理をする①

Last updated at Posted at 2024-12-03

この記事は、Elixir Advent Calendar 2024 シリーズ9 の6日目です


【本コラムは、10分で読め、5分で試せます】

piacere です、ご覧いただいてありがとございます :bow:

pandasのget_dummiesは、AI・LLMの前処理における「ワン・ホット・エンコーディング」、つまり「ダミー値処理」を実現します

これにより、数値しか行列処理では扱えないAI・LLMに対し、数値以外の値(カテゴリ値と言います)のバリエーションごとにデータの数値化を行うことで、行列処理を可能とし、傾向分析を可能とします

たとえば、下記マップリストのc1/c3キーをダミー値処理すると、下記の結果のように、c1/c3の値が数値化されます(なお簡略化のため、今回はget_dummiesのように値のバリエーションごとに列生成せず、元の列の値を通番で数値化しています)

maplist = [
  %{"c1" => "v1", "c2" => 2, "c3" => true}, 
  %{"c1" => "v1", "c2" => 5, "c3" => false}
]
keys = ["c1", "c3"]

結果:[
  %{"c1" => 0, "c2" => 2, "c3" => 0}, 
  %{"c1" => 0, "c2" => 5, "c3" => 1}
]

これを実装すると、こんなコードになります

maplist = [%{"c1" => "v1", "c2" => 2, "c3" => true}, %{"c1" => "v2", "c2" => 5, "c3" => false}]
keys = ["c1", "c3"]

Enum.reduce(keys, maplist, fn key, acc -> 
  categories = 
    Enum.map(maplist, & &1[key]) 
    |> Enum.uniq 
    |> Enum.with_index 
    |> Enum.into(%{})
  acc
  |> Enum.map(& Map.put(&1, key, categories[&1[key]]))
end)

結果:[
  %{"c1" => 0, "c2" => 2, "c3" => 0}, 
  %{"c1" => 0, "c2" => 5, "c3" => 1}
]

コード解説ですが、全体としては、ダミー値処理を各キーごとに行い、ダミー値化した結果をaccに積み続けます

最初に、各キーごとに、カテゴリ値に値のバリエーションをEnum.uniqでユニーク化し、Enum.with_indexで通番化された数値を付与したものを、下記のように値をキーとして通番を値として返せる categories として保持します

c1分
categories = %{"v1" => 0, "v2" => 1}
c3分
categories = %{false: 1, true: 0}

次に、Enum.mapでマップリストを回し、各マップをMap.putを使ってダミー値化した値を categories から取り出して、マップの値を置き換えます

p.s.このコラムが、面白かったり、役に立ったら…

image.png にて、どうぞ応援よろしくお願いします :bow:

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?