2017-02-03 17 views
0

列車とテスト行列を構築するために、いくつかのカテゴリデータをベクトル化したいと思います。カテゴリデータをベクトル化する方法

私は都市に依存し、1または0で行ごとにベクトルを持っていると思い、私は85の都市があると私は、282520行の行列を取得したいと思い、すべての行が

[1 0 0 ..., 0 0 0] 

ようなベクターであります

print(df['city']) 
0   METROPOLITANA DE SANTIAGO 
1   METROPOLITANA DE SANTIAGO 
2   METROPOLITANA DE SANTIAGO 
3   METROPOLITANA DE SANTIAGO 
4       COQUIMBO 
5       SANTIAGO 
6       SANTIAGO 
7   METROPOLITANA DE SANTIAGO 
8   METROPOLITANA DE SANTIAGO 
9   METROPOLITANA DE SANTIAGO 
10       BIO BIO 
11       COQUIMBO 
...        ... 
282520 METROPOLITANA DE SANTIAGO 
Name: city, dtype: object 

これは私が試したものです::ので、その結果、すべての都市は、列でなければなりません

from sklearn import preprocessing 

list_city = getList(df,'city') 
le = preprocessing.LabelEncoder() 
le.fit(list_city) 

print(le.transform(['AISEN'])) 
print(le.transform(['TARAPACA'])) 
print(le.transform(['AISEN DEL GENERAL CARLOS IBANEZ DEL CAMP'])) 

私は次の出力を取得しています:

[0] 
[63] 
[1] 

問題は、私はちょうど街のインデックスを取得しています、私はデータをベクトル化する方法を提案を探していますということです。

+0

あなたは[OneHotEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessingを探していないよろしいです.OneHotEncoder)?それはあなたが私に探しているもののように聞こえる。 – patrick

答えて

3

1つのオプションはpd.get_dummies(これは完全にエコシステムの外にあります)です。

df = pd.DataFrame(['METROPOLITANA DE SANTIAGO', 'COQUIMBO', 'SANTIAGO', 'SANTIAGO'], 
        columns=['city']) 
pd.get_dummies(df) 
city_COQUIMBO city_METROPOLITANA DE SANTIAGO city_SANTIAGO 
0    0        1    0 
1    1        0    0 
2    0        0    1 
3    0        0    1 

あなたがnumpyの配列が必要な場合は、単にvaluesをつかみます。

pd.get_dummies(df).values 
[[0 1 0] 
[1 0 0] 
[0 0 1] 
[0 0 1]] 

別のアプローチは、LabelEncoderOneHotEncoderの組み合わせを使用することです。あなたが気づいたように、LabelEncoderは、任意のラベルの配列のカテゴリインデックスを返します。 OneHotEncoderは、これらのインデックスを1対1の符号化方式に変換します。

le = LabelEncoder() 
enc = OneHotEncoder(sparse=False) 
enc.fit_transform(le.fit_transform(df.city.values).reshape(-1, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 

さらに別のオプションは、DictVectorizerです。

dv = DictVectorizer(sparse=False) 
dv.fit_transform(df.apply(dict, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 
+0

これは非常にhelpulですしかし、これは私に85列を与えるつもりです、私は行列を構築するためにnumpy配列でこの85列を変換する方法を見つける必要があります – neo33

+0

@neo私は表示するために私の答えを編集'pd.get_dummies'の結果から' ndarray'を抽出する方法、さらに2つのアプローチがあります。 –

+0

助けを賜りたいと思います、本当に感謝しています。ありがとう – neo33

関連する問題