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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

533閲覧

テーブルの正規化をしたい

MOSMOS2

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/12 06:14

例えば、下記のような表があったとします。
No. 好きな食べ物
1 カレー
2 ハンバーグ
3 カレー
4 ハンバーグ
5 ハンバーグ
6 スパゲティ
7 ピザ
これを、Pythonで以下のようにテーブルを正規化したいのですが、
No. カレー ハンバーグ スパゲティ ピザ
1 1 0 0 0
2 0 1 0 0
3 1 0 0 0
4 0 1 0 0
5 0 1 0 0
6 0 0 1 0
7 0 0 0 1

どのようにしたらよいでしょうか。よろしくお願いします。

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

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

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

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

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

yambejp

2018/06/12 06:19 編集

RDBですよね?何をご利用ですか?ちなみにやろうとしていることは正規化とは違う次元の処理にみえます
guest

回答2

0

pandas.get_dummiesでどうでしょうか?
参考:pandasでカテゴリ変数をダミー変数に変換(get_dummies)

Python

1import pandas as pd 2df = pd.DataFrame({'food':['カレー','ハンバーグ','カレー','ハンバーグ','ハンバーグ','スパゲティ','ピザ']}) 3print(df) 4df2 = pd.get_dummies(df['food']) 5print(df2) 6""" 7 カレー スパゲティ ハンバーグ ピザ 80 1 0 0 0 91 0 0 1 0 102 1 0 0 0 113 0 0 1 0 124 0 0 1 0 135 0 1 0 0 146 0 0 0 1 15""" 16 17# 列の並びを整えたければ、適切な列名リストを生成して以下で並べ替える 18cols = ['カレー','ハンバーグ','スパゲティ','ピザ'] 19df2 = df2.ix[:,cols] 20print(df2)

投稿2018/06/12 06:46

can110

総合スコア38266

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

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

MOSMOS2

2018/08/12 13:09

ありがとうございました。
guest

0

ベストアンサー

One-hot表現が欲しいと解釈して、sklearnでやってみました。こんな感じで使えます。

python

1from sklearn.preprocessing import LabelEncoder, OneHotEncoder 2 3lst = ["カレー","ハンバーグ","カレー","ハンバーグ","ハンバーグ","スパゲティ","ピザ"] 4 5le = LabelEncoder() 6ohe = OneHotEncoder(sparse=False) # 返り値がsparse matrixでよければ指定する必要はありません 7 8X = ohe.fit_transform(le.fit_transform(lst).reshape(-1, 1)) # reshape必須 9print(le.classes_) 10print(X) 11 12""" => 13['カレー' 'スパゲティ' 'ハンバーグ' 'ピザ'] 14[[1. 0. 0. 0.] 15 [0. 0. 1. 0.] 16 [1. 0. 0. 0.] 17 [0. 0. 1. 0.] 18 [0. 0. 1. 0.] 19 [0. 1. 0. 0.] 20 [0. 0. 0. 1.]] 21"""

投稿2018/06/12 11:24

hayataka2049

総合スコア30933

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

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

MOSMOS2

2018/08/12 13:09

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問