def ordinal_encoder(self, df, configger): """ :param df: the train dataset. :param configger: the json str of configger setting, the params means: verbose: int integer indicating verbosity of the output. 0 for none. cols: list a list of columns to encode, if None, all string columns will be encoded. drop_invariant: bool boolean for whether or not to drop columns with 0 variance. return_df: bool boolean for whether to return a pandas DataFrame from transform (otherwise it will be a numpy array). mapping: list of dict a mapping of class to label to use for the encoding, optional. the dict contains the keys 'col' and 'mapping'. the value of 'col' should be the feature name. the value of 'mapping' should be a dictionary of 'original_label' to 'encoded_label'. example mapping: [{'col': 'col1', 'mapping': {None: 0, 'a': 1, 'b': 2}}] handle_unknown: str options are 'error', 'return_nan' and 'value', defaults to 'value', which will impute the category -1. handle_missing: str options are 'error', 'return_nan', and 'value, default to 'value', which treat nan as a category at fit time, or -2 at transform time if nan is not a category during fit. :return: the transform result """ X, y, encode_col = self.get_Xy(df, configger) drop_invariant = set_default_vale("drop_invariant", configger, False, is_bool=True) handle_missing = set_default_vale("handle_missing", configger, "value") handle_unknown = set_default_vale("handle_unknown", configger, "value") encoder = OrdinalEncoder(verbose=1, cols=encode_col, drop_invariant=drop_invariant, return_df=True, handle_unknown=handle_unknown, handle_missing=handle_missing) res = encoder.fit_transform(X, y) return res
def fetch_TICTACTOE(path, valid_size=0.2, test_size=0.2, seed=None): path = Path(path) data_path = path / 'tic-tac-toe.data' if not data_path.exists(): path.mkdir(parents=True, exist_ok=True) download( 'https://archive.ics.uci.edu/ml/machine-learning-databases/tic-tac-toe/tic-tac-toe.data', data_path) data = pd.read_csv(data_path, names=np.arange(10)) encoder = OrdinalEncoder(return_df=False) data = encoder.fit_transform(data) X, Y = (data[:, :-1]).astype(np.float32), (data[:, -1] - 1).astype(int) X_train, X_test, y_train, y_test = train_test_split(X, Y, stratify=Y, test_size=test_size, random_state=seed) X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, stratify=y_train, test_size=valid_size / (1 - test_size), random_state=seed) return dict(X_train=X_train, y_train=y_train, X_valid=X_val, y_valid=y_val, X_test=X_test, y_test=y_test)
class Ordinal_encode(Preprocess): def __init__(self): super().__init__() def ordinal_encode(self,data): """ 複数のカテゴリ変数をベクトル化して、それぞれ変換規則を保存する関数です。 ベクトル化したデータセットを返します。 変換規則はenc_dictに保存されています。 :param data: 学習で用いるデータセット(Dataset型の属性dataを受け取る) """ org_order=data.columns #self.enc_dict={} self.model=OrdinalEncoder(cols=self.columns,handle_unknown="inpute") oe_data=self.model.fit_transform(data) oe_data=oe_data.ix[:,org_order] return oe_data def make_parser(self): """ parse_argsによって内部的に呼ばれる関数です。 共通オプションを追加するsuper().make_parser()を実行した後、固有オプションを追加したパーサーを返します。 """ # 固有部分 parser=super().make_parser() #parser.add_argument("-c","--columns",dest="columns",help="select colums you wish to normalize",default=None,type=str) return parser def set_parsed_args_unique(self,parsed): """ 固有のオプションを属性に追加する関数です。 :param parsed: コマンドライン引数をパースしたもの """ #self.columns=parsed.columns def parse_args(self,args): """ コマンドライン引数をパースする関数です。 すべてのオプションをパースしたものを返します。 :param args: コマンドライン引数 """ parser=self.make_parser() return parser.parse_args(args) def main(self,args): """ メイン関数です 受けたcsv形式のデータフレームに対して、指定された列のラベルエンコードを行います 出力はラベルエンコード後のデータフレーム(csv形式)です また、変換規則に関するファイルlabel.jsonが生成されます 上記ファイルをpredict.py実行時に指定してください """ parsed=self.parse_args(args) self.set_parsed_args_common(parsed) self.set_parsed_args_unique(parsed) #入力ファイル読み込み data=self.read_data() self.columns=self.get_col_list() #ラベルエンコード data.data=self.ordinal_encode(data.data) #前処理をフローに追加 data.add_preprocess(self.model) """ #変換規則のファイル出力 with open(self.temp_files_path+"label.pickle","wb") as f: pickle.dump(self.enc_dict,f) #前処理の順番を保存 self.write_order() """ #エンコード後のデータセットの出力 self.write_data(data)
def ordinal_encode(self, df, column, map_list): mapping_dict = [{'col': column, 'mapping': map_list}] enc = OrdinalEncoder(mapping=mapping_dict) return enc.fit_transform(df[column])
# ENCODING from category_encoders.ordinal import OrdinalEncoder # choose one encoder encoder = OrdinalEncoder() #from category_encoders.one_hot import OneHotEncoder #encoder = OneHotEncoder() golf_encoded = encoder.fit_transform( golf[['Outlook', 'Temperature', 'Humidity', 'Wind']]) print(golf_encoded.head()) # BINNING ## EQUAL WIDTH import pandas as pd items = [0, 4, 12, 16, 16, 18, 24, 26, 28] pd.cut(items, bins=3) ## EQUAL FREQUENCY pd.qcut(items, q=3) ## APPLY TO DATASET iris = pd.read_csv("iris.csv") pd.cut(iris['SepalLength'], bins=3, labels=['low', 'middle', 'high']) ## CREATE BINNED DATASET iris_binned = pd.DataFrame( dict(SepalLength=pd.cut(iris['SepalLength'], bins=3, labels=['low', 'middle', 'high']), SepalWidth=pd.cut(iris['SepalWidth'], bins=3,