2

私の質問は、パンダ データ フレームに非常に多くの列があり、次のような sklearn-pandas ライブラリのデータフレーム マッパーを使用して sklearn 前処理を適用しようとしていることです。

mapper= DataFrameMapper([
    ('gender',sklearn.preprocessing.LabelBinarizer()),
    ('gradelevel',sklearn.preprocessing.LabelEncoder()),
    ('subject',sklearn.preprocessing.LabelEncoder()),
    ('districtid',sklearn.preprocessing.LabelEncoder()),
    ('sbmRate',sklearn.preprocessing.StandardScaler()),
    ('pRate',sklearn.preprocessing.StandardScaler()),
    ('assn1',sklearn.preprocessing.StandardScaler()),
    ('assn2',sklearn.preprocessing.StandardScaler()),
    ('assn3',sklearn.preprocessing.StandardScaler()),
    ('assn4',sklearn.preprocessing.StandardScaler()),
    ('assn5',sklearn.preprocessing.StandardScaler()),
    ('attd1',sklearn.preprocessing.StandardScaler()),
    ('attd2',sklearn.preprocessing.StandardScaler()),
    ('attd3',sklearn.preprocessing.StandardScaler()),
    ('attd4',sklearn.preprocessing.StandardScaler()),
    ('attd5',sklearn.preprocessing.StandardScaler()),
    ('sbm1',sklearn.preprocessing.StandardScaler()),
    ('sbm2',sklearn.preprocessing.StandardScaler()),
    ('sbm3',sklearn.preprocessing.StandardScaler()),
    ('sbm4',sklearn.preprocessing.StandardScaler()),
    ('sbm5',sklearn.preprocessing.StandardScaler())
 ])

多くの変数を明示的に書き出さずに一度に前処理するための、より簡潔な方法が他にないかどうか疑問に思っています。

少し面倒だと思ったもう 1 つのことは、すべての pandas データ フレームを sklearn が使用できる配列に変換すると、列名の機能が失われ、選択が非常に難しくなることです。パンダのデータ フレームを np 配列に変更するときに、列名をキーとして保持する方法を知っている人はいますか?

どうもありがとう!

4

1 に答える 1

9
from sklearn.preprocessing import LabelBinarizer, LabelEncoder, StandardScaler
from sklearn_pandas import DataFrameMapper

encoders = ['gradelevel', 'subject', 'districtid']
scalars = ['sbmRate', 'pRate', 'assn1', 'assn2', 'assn3', 'assn4', 'assn5', 'attd1', 'attd2', 'attd3', 'attd4', 'attd5', 'sbm1', 'sbm2', 'sbm3', 'sbm4', 'sbm5']
mapper = DataFrameMapper(
    [('gender', LabelBinarizer())] +
    [(encoder, LabelEncoder()) for encoder in encoders] +
    [(scalar, StandardScaler()) for scalar in scalars]
)

これを頻繁に行う場合は、独自の関数を作成することもできます。

mapper = data_frame_mapper(binarizers=['gender'],
    encoders=['gradelevel', 'subject', 'districtid'],
    scalars=['sbmRate', 'pRate', 'assn1', 'assn2', 'assn3', 'assn4', 'assn5', 'attd1', 'attd2', 'attd3', 'attd4', 'attd5', 'sbm1', 'sbm2', 'sbm3', 'sbm4', 'sbm5'])
于 2014-07-14T22:58:53.593 に答える