예제 #1
0
    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
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
    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])
예제 #5
0
# 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,