質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

698閲覧

リスト型のデータカラムを機械学習モデルに学習させたい

massan3

総合スコア1

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/04 10:23

編集2021/08/04 11:17

前提・実現したいこと

以下のようなcsvファイルがあり(5万行)、特徴量elementをモデルに学習させてミックスジュースの値段を予測する回帰モデルをpythonで作成したいと思っています。

No, element, price
1, "{banana, ""orange"", ""apple"", grape, peach}", 200
2, "{""orange"", grape, peach}", 180


50000, "{""orange"", ""apple""}", 100
(どういう意味があるのか不明ですが、リスト内の特定のワードが「""」で囲まれています)

リスト内のbananaや""orange""をそれぞれダミー変数化しようかと考えたのですが、いろいろ調べてもやり方が分かりませんでした。
上記の方法に限らず、このようなリスト型のカラムを特徴量として活用する方法をご存知の方がいらっしゃいましたら、アドバイスいただけますと幸いです。

試したこと

当然ですがそのままget_dummies()するとリスト全体が一つのダミー変数として処理されてしまいました。

python3

1fruits = pd.get_dummies(fruits) 2fruits.head() 3 4No element_{"orange", grape,peach} element_{"orange","apple"} element_{banana,"orange","apple",grape, peach} 51 0 0 1 62 1 0 0 73 0 1 0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/08/04 11:30 編集

カンマの後ろに空白がありますが、実際のデータにも存在しているのでしょうか?
massan3

2021/08/04 11:37

すみません、実際のcsvデータには空白はありません。見やすいようにと思って投稿時に空白を入れたのですが、余計な事をしてしまったかもしれません。
toast-uz

2021/08/04 11:38

テキストファイルとして1行ずつ読み込んで、パーサーをスクラッチで記述するのが早いと思います。なお、原材料が10種類あったとしてもミックスジュースの種類は高々約1000通りしかありません。同じ組み合わせなら同じ価格なのであれば、5万も教師データがあれば、機械学習は使わなくても価格は決定できるかもしれません。
meg_

2021/08/04 12:28

> リスト内のbananaや""orange""をそれぞれダミー変数化しようかと考えたのですが 「ダミー変数化」後のイメージはどのようなものでしょうか? つまり、ダミー変数化前のデータフレームはどんな形でしょうか?
massan3

2021/08/04 12:43

toast-uzさん、ありがとうございます。実は投稿した課題は、取り組んでいる課題を簡易的にアレンジしたものです(手元のデータが公開禁止のため)。その旨記述するべきでした。実際のデータは説明変数が30近くあり、その中にリスト型のカラムが混じっているという構造です。誤解を与えるような記述をしてしまい申し訳ありません。ご提案いただいた手法は調べて試してみます。
guest

回答1

0

求めているものか分かりませんが下記で"{}"内のデータを列に展開出来ます。

Python

1# データ 2'''No,element,price 31,"{banana, ""orange"", ""apple"", grape, peach}",200 42,"{""orange"", grape, peach}",180 550000,"{""orange"", ""apple""}",100 6''' 7 8print(df) 9# No element price 10#0 1 {banana, "orange", "apple", grape, peach} 200 11#1 2 {"orange", grape, peach} 180 12#2 50000 {"orange", "apple"} 100 13 14df['element'] = df['element'].str[1:-1].str.replace('"', '').str.split(',') 15df = pd.concat([df, df['element'].apply(pd.Series)], axis=1) 16print(df) 17# No element price 0 1 2 3 4 18#0 1 [banana, orange, apple, grape, peach] 200 banana orange apple grape peach 19#1 2 [orange, grape, peach] 180 orange grape peach NaN NaN 20#2 50000 [orange, apple] 100 orange apple NaN NaN NaN

投稿2021/08/04 12:47

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

massan3

2021/08/04 12:58

meg_さん、ありがとうございます。回答が追い付かず申し訳ありません。ダミー変数化後のイメージは漠然とですが、例えば{banana,""orange""}の要素の行であればelement_bananaやelement_""orange""のカラムを生成して0 or 1が入る、というような事を想像していました。プログラミング初心者なもので、頓珍漢な事を申していたら恐縮です。ご提案いただいた手法で一度試してみます。
meg_

2021/08/04 13:16

課題とのことなので頑張ってください。分からない箇所は試行錯誤の過程を示した上で講師に質問すれば良いのでは?(それとも質問は一切禁止なのでしょうか?)
massan3

2021/08/04 14:56

ありがとうございます。とある学習プログラムに応募する為の、足きり試験のような課題なので講師に質問などはできない状況です。リストの特徴量を使わなくてもモデルの精度はそこそこ出ているのですが、どうも気になってしまって質問させていただきました。ご丁寧にアドバイス下さりありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問