Pandas: рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ: рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП get_dummies () рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдирд╡ре░ 2014  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pandas-dev/pandas

рдкрдВрдбреЛрдВ рдореЗрдВ get_dummies () рд╣реЛрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╕реНрдХреЗрд▓реЗрд░реЛрд▓реЙрдЬреА рдХреЗ рд╕рд╛рде рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ (рдпрд╛ "fit_transform" рдФрд░ "рд░реВрдкрд╛рдВрддрд░") рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рд▓реЛрдЧ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрдВрдбреЛрдВ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХреЛрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдпреЛрдЧрджрд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ)ред

Categorical Reshaping Usage Question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЪрд░ Categorical рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ

In [5]: df_train = pd.DataFrame({"car":Series(["seat","bmw"]).astype('category',categories=['seat','bmw','mercedes']),"color":["red","green"]})

In [6]: df_train
Out[6]: 
    car  color
0  seat    red
1   bmw  green

In [7]: pd.get_dummies(df_train )
Out[7]: 
   car_seat  car_bmw  car_mercedes  color_green  color_red
0         1        0             0            0          1
1         0        1             0            1          0

рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреИрд╕реЗ рдПрдХ рдирдореВрдирд╛ рдлреНрд░реЗрдо рд╕реЗ рдЖрджрд╛рдиреЛрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрджреНрдо рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛

@ chrish42 , рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

FYI рдХрд░реЗрдВ scikit-learn рдореЗрдВ OneHotEncoder рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдЙрдирдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

import pandas as pd
from sklearn.pipeline import TransformerMixin

class DummyEncoder(TransformerMixin):

    def __init__(self, columns=None):

        self.columns = columns

    def transform(self, X, y=None, **kwargs):

        return pd.get_dummies(X, columns=self.columns)

    def fit(self, X, y=None, **kwargs):

        return self

рджреЗ рд░рд╣реА рд╣реИ

In [15]: df
Out[15]: 
   A  B  C
0  1  a  a
1  2  b  a

In [16]: DummyEncoder().transform(df)
Out[16]: 
   A  B_a  B_b  C_a
0  1    1    0    1
1  2    0    1    1

рд╕реНрддрдВрднреЛрдВ рдХреЗ рдХреНрд░рдо рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред

@TomAugspurger , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдХреЗрд▓реЗрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╣реА рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд░реБрдЪрддреА рд╣реИред рдореИрдВ рдХрд┐рд╕реА рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ get_dummes () рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдХрд╣рд╛ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдареАрдХ рдЙрд╕реА рдХреЙрд▓рдо рдХреЛ рдмрдирд╛рддреЗ рд╣реБрдП), рднрд▓реЗ рд╣реА рджреВрд╕рд░реЗ рдбрд╛рдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЙрдкрд╕рдореВрд╣ рд╣реЛред рдХреБрдЫ рдХреЙрд▓рдо рдЖрджрд┐ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ "рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп"ред рдХреНрдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ? (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред)

рдореИрдВ sklearn рдореЗрдВ OneHotEncoder рд╡рд░реНрдЧ рд╕реЗ рдЕрд╡рдЧрдд рд╣реВрдБ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрдиреНрдп рд╕реАрдорд╛рдПрдБ рд╣реИрдВред

рдореИрдВрдиреЗ @ chrish42 рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ

рд╡рд░реНрддрдорд╛рди рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдбрдореА рдорд┐рд▓рддрд╛ рд╣реИ

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд df_train DataFrame рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

`` `
df_train = pandas.DataFrame ({"рдХрд╛рд░": ["рд╕реАрдЯ", "рдмреАрдПрдордбрдмреНрд▓реНрдпреВ"], "рд░рдВрдЧ": ["рд▓рд╛рд▓", "рд╣рд░рд╛"]})
pandas.get_dummies (df_train)

car_bmw car_seat color_green color_red
реж реж рез реж рез рез
рез рез реж рез рез реж


Then we are provided with

``` .python
df_test = pandas.DataFrame({"car":["seat","mercedes"], "color":["red","green"]})
pandas.get_dummies(df_test )

         car_mercedes  car_seat  color_green  color_red
0             0         1            0          1
1             1         0            1          0

рдЪреВрдБрдХрд┐ рдореИрдВрдиреЗ df_train рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ "рдХрд╛рд░" рдХреЗ рд▓рд┐рдП "рдорд░реНрд╕рд┐рдб" рдорд╛рди рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

`` `
car_bmw car_seat color_green color_red
реж реж рез реж рез рез
рез реж реж рез рез реж


Where the column car_mercedes actually never appears.

This could be solved by allowing get_dummies to receive an input dictionary stating the accepted values that we allow for each column.  

Returning to the previous example, we could give as input to get_dummies the following dict of sets

``` .python
accepted_values_per_column = {'car': {'bmw', 'seat'}, 'color': {'green', 'red'}}

рдФрд░ рд╣рдо get_dummies рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ

`` `
get_dummies (df_test, accept_values_per_column = Accept_values_perm_column)

       car_bmw  car_seat  color_green  color_red

реж реж рез реж рез рез
рез реж реж рез рез реж
`` `

рдФрд░ рдЙрдореНрдореАрдж рдХрд░реЗрдВ рдХрд┐ get_dummies (df_test) рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реМрдЯрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдпрджрд┐ рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЪрд░ Categorical рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ

In [5]: df_train = pd.DataFrame({"car":Series(["seat","bmw"]).astype('category',categories=['seat','bmw','mercedes']),"color":["red","green"]})

In [6]: df_train
Out[6]: 
    car  color
0  seat    red
1   bmw  green

In [7]: pd.get_dummies(df_train )
Out[7]: 
   car_seat  car_bmw  car_mercedes  color_green  color_red
0         1        0             0            0          1
1         0        1             0            1          0

рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред

рдФрд░ рдЬрдм рдЖрдк рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рд╡рд╛рдкрд╕ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк gradorical.from_codes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдФрд░ рдмрд┐рдЯ рдХреА рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕рд▓рд╛рд╣ред рдпрджрд┐ рдЖрдк рд╡рд░реНрдЧреАрдХрд░рдгреЛрдВ рдкрд░ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рдХреЙрд▓рдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реИ) рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреАрдХреЛрд▓рд┐рдирд░рд┐рдЯреА рд╣реЛрдЧреАред

5 рдЕрдХреНрдЯреВрдмрд░, 2015 рдХреЛ 05:34 рдкрд░, рдЬреЗрдл рд░реАрдмреИрдХ рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпрджрд┐ рдЖрдк рд╕рдВрднрд╡рддрдпрд╛ рдЕрдирдмреЛрд▓реНрдб рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдЪрд░ рдХреЛ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ

[рел]: df_train = pd.DataFrame ({"рдХрд╛рд░": рд╢реНрд░реГрдВрдЦрд▓рд╛ (["рд╕реАрдЯ", "рдмреАрдПрдордбрдмреНрд▓реНрдпреВ"]) рдореЗрдВред ), "рд░рдВрдЧ": [ "рд▓рд╛рд▓", "рд╣рд░реА"]})

[рем] рдореЗрдВ: df_train
рдЖрдЙрдЯ [6]:
рдХрд╛рд░ рдХрд╛ рд░рдВрдЧ
0 рд╕реАрдЯ рд▓рд╛рд▓
1 рдмреА.рдПрдо.рдбрдмреНрд▓реНрдпреВ рд╣рд░рд╛

[M] рдореЗрдВ: pd.get_dummies (df_train)
рдЖрдЙрдЯ [7]:
car_seat car_bmw car_merrs color_green color_red
реж рез реж реж реж рез
рез реж рез реж рез рез реж
рдореВрд▓ рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдкрдиред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред

@TomAugspurger @jreback рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛

train_a = pd.DataFrame ({"IsBadBuy": [0,1,0], "Make": ['Toyota', 'Mazda', 'BMW']})

IsBadBuy Make_BMW Make_Mazda Make_Toyota
реж реж реж реж рез
рез рез реж рез рез реж
реи реж рез реж реж

test_a = pd.DataFrame ({"Make": ['Toyota', 'BMW']})
рдкреНрд░рд┐рдВрдЯ pd.get_dummies (test_a, рдХреЙрд▓рдо = ['рдореЗрдХ'])

Make_BMW Make_Toyota
реж реж рез
рез рез реж

рдпрд╣рд╛рдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ Make_Mazda рдХреЙрд▓рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ ML рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдЯреНрд░реЗрди рдореЗрдВ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реЛрдВрдЧреЗред

рдПрдХ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рдд рджреА рд╣реИ рдпрджрд┐ рдЖрдк https://m.youtube.com/watch?v=KLPtEBokqQ0 рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ

    _____________________________

рдкреНрд░реЗрд╖рдХ: рдЕрдЬрдп рд╕рдХреНрд╕реЗрдирд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рдкреНрд░реЗрд╖рд┐рдд: рдЧреБрд░реБрд╡рд╛рд░, 12 рдЬрдирд╡рд░реА, 2017 18:31
рд╡рд┐рд╖рдп: рдкреБрди: [рдкрдВрдбреЛрдВ-рджреЗрд╡ / рдкрдВрдбреЛрдВ] рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА: get_dummies () рдЯреНрд░реЗрди / рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ (# 8918) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп
To: рдкрдВрдбреЛрдВ-рджреЗрд╡ / рдкрдВрдбреЛрдВ [email protected]
Cc: рдЯреЙрдо рдСрдЧреНрд╕рдкрд░реНрдЧрд░ [email protected] , рдЙрд▓реНрд▓реЗрдЦ рдЙрд▓реНрд▓реЗрдЦ @noreply.github.com

@jreback рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛

train_a = pd.DataFrame ({"IsBadBuy": [0,1,0], "Make": ['Toyota', 'Mazda', 'BMW']})

IsBadBuy Make_BMW Make_Mazda Make_Toyota
реж реж реж реж рез
рез рез реж рез рез реж
реи реж рез реж реж

test_a = pd.DataFrame ({"Make": ['Toyota', 'BMW']})
рдкреНрд░рд┐рдВрдЯ pd.get_dummies (test_a, рдХреЙрд▓рдо = ['рдореЗрдХ'])

Make_BMW Make_Toyota
реж реж рез
рез рез реж

рдпрд╣рд╛рдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ Make_Mazda рдХреЙрд▓рдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ ML рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдЯреНрд░реЗрди рдореЗрдВ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реЛрдВрдЧреЗред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж @TomAugspurger

PyTata Chicago 2016 рдореЗрдВ @TomAugspurger рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдмрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреА рдЧрдИ рдереАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрди рд╕рднреА рдХрд╛рд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг рдпрд╣ рдореБрджреНрджрд╛ / рдЕрдиреБрд░реЛрдз рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред IMHO рдпрд╛ рддреЛ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ DummyEncoder рдпрд╛ рдХреБрдЫ рдЙрдЪрд┐рдд рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рдкрдВрдбреЛрдВ рдореЗрдВ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ, рдореИрдВ рдЙрд╕рдХреЗ рдЧрд┐рддреБрдм рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ рдХреА рдирдХрд▓ / рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛-рдореЙрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдЬрд▓реНрджреА рдЬрд╛рддрд╛ рд╣реИ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рдкрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдкрд╛рдВрдбрд╛ scikit- рд╕реАрдЦрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рд╣реИ
рджреЛрдиреЛрдВ рдХреЗ рдКрдкрд░ рдмрдиреА рдПрдХ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдХрдорд░рд╛ред

рдмреБрдз рдкрд░, 10 рдордИ, 2017 рдХреЛ рд╢рд╛рдо 6:13 рдмрдЬреЗ, рдмреНрд░рд╛рдпрди рд╡рд╛рдпрд▓реА рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

PyData Chicago 2016 рдХреА рдмрд╛рдд @TomAugspurger рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╣реИ
https://github.com/TomAugspurger рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕рдиреЗ рдП
рдЗрд╕ рдореБрджреНрджреЗ / рдЕрдиреБрд░реЛрдз рдкрд░ рд╕рднреА рдХрд╛рд░рдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХрд╛ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред IMHO рдпрд╛ рддреЛ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ DummyEncoder рдпрд╛ рдХреБрдЫ рдЙрдЪрд┐рдд
рдкрдВрдбреЛрдВ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ рдореИрдВ рдЙрд╕рдХреЗ рдЧрд┐рддреБрдм рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ
рдФрд░ рдЙрд╕рдХреА рдХрдХреНрд╖рд╛ рдХреА рдирдХрд▓ рдХрд░реЗрдВ / рдЙрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред

BTW рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @TomAugspurger https://github.com/TomAugspurger рдореЗрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдирдпрд╛ рдкрд╕рдВрджреАрджрд╛ Pyata рдЧреБрд░реБред рдореИрдВ рд╕рдм рдХреБрдЫ рд╡рд╣ рдиреАрдЪреЗ рд╢рд┐рдХрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ
рдХрд┐рдпрд╛ / рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрд╡рд╢реЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ .. рдПрдХ рдбрд░рд╛рд╡рдирд╛ / рдкреАрдЫрд╛ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ .. рдЖрдк
рдмрд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред :)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/pandas-dev/pandas/issues/8918#issuecomment-30062538888 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABQHIpTqgHSE7iFVF9Pp4_YoKB9DPLcEks5r4kSrgaJpZM4DB6Hb
ред

рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рдЯ / рдкрд░рд┐рд╡рд░реНрддрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдбрдореА рдЪрд░ред

https://github.com/joeddav/get_smarties

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдпреЛрдЧрджрд╛рди рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛!

рдпрд╣ # 14017 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЯреНрд░реЗрди рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдЪрд░ред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдорд╢реАрди рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред

https://github.com/yashu-seth/dummyPy

рдЖрдк рдЗрд╕ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдП рдЧрдП рд▓реЛрдЧ dask-ml рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ

@TomAugspurger рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЙрдЯ рдПрдиреНрдХреЛрдбреЗрдб рдХреЙрд▓рдо рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ?

рдЖрдпрд╛рдд pyodbc
рдЖрдпрд╛рдд рдЕрдЪрд╛рд░
Sklearn.linear_model рдЖрдпрд╛рдд рд╕реЗ LogisticRegression
sklearn.linear_model рд╕реЗ LinearRegression рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЖрдпрд╛рдд рдПрдирдкреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди
рдкреАрдбреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдкрд╛рдВрдбрд╛
sklearn.pipeline рд╕реЗ TransformerMixin рдЖрдпрд╛рдд рдХрд░реЗрдВ
sklearn.pipeline рд╕реЗ make_pipeline рдЖрдпрд╛рдд рдХрд░реЗрдВ

рд╡рд░реНрдЧ рдбрдореАрдЗрдВрдХреЛрдбрд░ (рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░рдХреНрд╕рд┐рди):
рдбреАрдлрд╝ рдлрд┐рдЯ (рд╕реНрд╡, рдПрдХреНрд╕, рд╡рд╛рдИ = рдХреЛрдИ рдирд╣реАрдВ):
self.index_ = X.index
self.columns_ = X.columns
self.cat_columns_ = X.select_dtypes (рд╢рд╛рдорд┐рд▓ = ['рд╢реНрд░реЗрдгреА'] рдХреЙрд▓рдо
self.non_cat_columns_ = X.columns.drop (self.cat_columns_)

    self.cat_map_ = {col: X[col].cat for col in self.cat_columns_}

    left = len(self.non_cat_columns_)
    self.cat_blocks_ = {}
    for col in self.cat_columns_:
        right = left + len(X[col].cat.categories)
        self.cat_blocks_[col], left = slice(left, right), right
    return self

def transform(self, X, y=None):
    return np.asarray(pd.get_dummies(X))

def inverse_transform(self, X):
    non_cat = pd.DataFrame(X[:, :len(self.non_Cat_columns_)],
                             columns=self.non_cat_columns_)
    cats = []
    for col, cat in self.cat_map_.items():
        slice_ = self.cat_blocks_[col]
        codes = X[:, slice_].argmax(1)
        series = pd.Series(pd.Categorical.from_codes(
                codes, cat.categories, ordered=cat.ordered
        ), name=col)
        cats.append(series)
    df = pd.concat([non_cat] + cats, axis=1)[self.columns_]
    return df

SQL рд╕реЗ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореЗрдВ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ

cnxn = pyodbc.connect ('DRIVER = {SQL Server}; SERVER = {XXXXX}; DATABASE = {ML_Learn_Taxi}; UID = {XXXX}; PWD = XXXX}');
sql = "" "
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key]) order_key
, CONVERT (int, [service_date_key]) service_date_key
, [Order_source_desc]
, 1 рдХреЗ рд░реВрдк рдореЗрдВ 'рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ'
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреЗрд╕] = 'рдСрдирд▓рд╛рдЗрди'
рд╕рдВрдШ
рд╢реАрд░реНрд╖ 2 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key])
, CONVERT (int, [service_date_key])
, [Order_source_desc]
2
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреИрд╕реА] = 'рдЗрдирдмрд╛рдЙрдВрдб рдХреЙрд▓'
рд╕рдВрдШ
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key])
, CONVERT (int, [service_date_key])
, [Order_source_desc]
, 1
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджрд┐рд▓] = 'рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдХреЙрд▓'
"" "

prod_sql = "" "
рд╢реАрд░реНрд╖ 1 CONVERT рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (int, [order_key]) order_key
, CONVERT (int, [service_date_key]) service_date_key
, [Order_source_desc]
, 1 рдХреЗ рд░реВрдк рдореЗрдВ 'рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ'
[ML_Return_Customer] рд╕реЗред [Dbo] [ред
рдЬрд╣рд╛рдВ [рдХреНрд░рдо_рд╕реНрд░реЛрдд_рджреЗрд╕] = 'рдСрдирд▓рд╛рдЗрди'
"" "

InputDataSet = pd.read_sql (sql, cnxn)
рдкреНрд░реЛрдбрдбреИрдЯрд╕реЗрдЯ = pd.read_sql (prod_sql, cnxn)

рдкреНрд░рд┐рдВрдЯ (" * * * * * рдбреЗрдЯрд╛

* * * * * ")
рдкреНрд░рд┐рдВрдЯ (InputDataSet)

рдкреНрд░рд┐рдВрдЯ (" * рд╢реНрд░реЗрдгреА рдХреЙрд▓рдо рдЬрд╛рдирдХрд╛рд░реА"

* * ")
рдХреЙрд▓рдо = ['order_source_desc']
InputDataSet [рдХреЙрд▓рдо] = InputDataSet [рдХреЙрд▓рдо] .apply (рд▓реИрдореНрдмреНрдбрд╛ x: x.astype ('рд╢реНрд░реЗрдгреА'))

InputDataSet.info ()

рдкреНрд░рд┐рдВрдЯ (" * рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди)

* * ")

X = InputDataSet.drop ('рд░рд┐рдЯрд░реНрди_рдлреНрд▓реИрдЧ', рдЕрдХреНрд╖ = 1)
y = InputDataSet ['return_flag']

A = ProdDataSet.drop ('рд░рд┐рдЯрд░реНрди_рдлреНрд▓реИрдЧ', рдЕрдХреНрд╖ = 1)
рдмреА = рдкреНрд░реЛрдбрдбрд╕реЗрдЯрд╕реЗрдЯ ['рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ']

рдПрдирдХреЗ = рдбрдореАрдиреЗрдХрд░ ()
enc.fit (рдПрдХреНрд╕)

рдмрд╛рд░рд┐рд╢ = рдПрдирдХрд╛рдЙрдВрдЯрд░рдлреЙрд░реНрдо (рдПрдХреНрд╕)

рдЙрддреНрдкрд╛рджрди = рдПрдирдХрд╛рдЙрдВрдЯрд░рдлреЙрд░реНрдо (рдП)

рдкреНрд░рд┐рдВрдЯ (рдкреНрд░реЙрдб)

OUTPUT: * * * * рдбреЗрдЯрд╛

* * * *
order_key service_date_key order_source_desc return_flag
0 10087937 20151214 рдСрдирд▓рд╛рдЗрди 1
1 10088174 20151201 рдЗрдирдмрд╛рдЙрдВрдб рдХреЙрд▓ 2
2 10088553 20151217 рдЗрдирдмрд╛рдЙрдВрдб рдХреЙрд▓ 2
3 663478 20160806 рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдХреЙрд▓ 1
* рд╢реНрд░реЗрдгреА рдХреЙрд▓рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА * *

рд░реЗрдВрдЬрдЗрдВрдбреЗрдХреНрд╕: 4 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ, 0 рд╕реЗ 3
рдбреЗрдЯрд╛ рдХреЙрд▓рдо (рдХреБрд▓ 4 рдХреЙрд▓рдо):
order_key 4 рдЧреИрд░-рдЕрд╢рдХреНрдд int64
service_date_key 4 рдЧреИрд░-рдЕрд╢рдХреНрдд int64
order_source_desc 4 рдЧреИрд░-рдЕрд╢рдХреНрдд рд╢реНрд░реЗрдгреА
рд╡рд╛рдкрд╕реА_рдлреНрд▓реИрдЧ 4 рдЧреИрд░-рдЕрд╢рдХреНрдд int64
dtypes: рд╢реНрд░реЗрдгреА (1), int64 (3)
рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ: 284.0 рдмрд╛рдЗрдЯреНрд╕
* рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдЧрдорди * * *
[[10087937 20151214 1]]

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдореИрдВ рдПрдХ рдХреЙрд▓рдо рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ "рдлрд┐рдЯ" рдХреЙрд▓ рдореЗрдВ рдЖрдк рдмрд╕ рдХрд░рддреЗ рд╣реИрдВ:

categories = sorted(training_data.iloc[:, column_index].value_counts(dropna=True).index)

рдлрд┐рдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЖрдк рдЬрд┐рд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдЖрдк categories рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рдлрд┐рд░ "рдкрд░рд┐рд╡рд░реНрддрди" рдореЗрдВ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ:

from pandas.api import types as pandas_types

categorical_data = testing_data.iloc[:, [column_index]].astype(
    pandas_types.CategoricalDtype(categories=categories),
)
one_hot_encoded = pandas.get_dummies(categorical_data)

рдФрд░ рдпрд╣ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореИрдкрд┐рдВрдЧ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рдореМрдЬреВрдж рдирд╣реАрдВ рдереЗ, рддреЛ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди NaN рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдореВрд▓реНрдп рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореИрдВ рдмрд╕ рд╣рд░ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЙрд╕реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред ;-)

@ рдЕрдореНрдмрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЕрдЪреНрдЫрд╛, рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдПрдХ рд▓рдВрдмреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рдПрдХ рдиреЛрдЯрдмреБрдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧреА / рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддреА рд╣реИ: https://nbviewer.jupyter.org/github/SuperCowPowers/scp-labs/blob/master/notebook/Categorical_Encoding_Dangers.ipynb

Kaggle XGBoost рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрд╛ред рдпрд╣ рдЯреНрд░рд┐рдХ рдХрд░рддрд╛ рд╣реИред

X_train = pd.get_dummies(X_train)
X_valid = pd.get_dummies(X_valid)
X_test = pd.get_dummies(X_test)
X_train, X_valid = X_train.align(X_valid, join='left', axis=1)
X_train, X_test = X_train.align(X_test, join='left', axis=1)

рдореИрдВрдиреЗ рднреА рдХрдИ рдмрд╛рд░ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдиреАрдЪреЗ рдПрдХ рд╡рд░реНрдЧ (рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд▓реЗрддреЗ рд╣реБрдП) рд▓рд┐рдЦрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЧрдИ рд╣реИрдВред

import pandas
from sklearn.preprocessing import LabelEncoder

class CategoryEncoder:
    '''
    labelEncoding : boolean -> True If the categorical columns are to be label encoded
    oneHotEncoding : boolean -> True If the categorical columns are to be one hot encoded (using pandas.get_dummies method)
    dropFirst : boolean -> True if first column is to be dropped (usually to avoid multi-collinearity) post one hot encoding
                           Doesn't matter if oneHotEncoding = False

    df : pandas.DataFrame() -> dataframe object that needs to be encoded
    catCols : list -> list of the categorical columns that need to be encoded
    '''
    def __init__(self,labelEncoding=True,oneHotEncoding=False,dropFirst=False):
        self.labelEncoding = labelEncoding
        self.oneHotEncoding = oneHotEncoding
        self.dropFirst = dropFirst
        self.labelEncoder = {}
        self.oneHotEncoder = {}

    def fit(self,df,catCols=[]):
        df1 = df.copy()
        if self.labelEncoding:
            for col in catCols:
                labelEncoder = LabelEncoder()
                labelEncoder.fit(df1.loc[:,col].astype(str))
                df1.loc[:,col] = labelEncoder.transform(df1.loc[:,col])
                self.labelEncoder[col] = labelEncoder.classes_

        if self.oneHotEncoding:
            for col in catCols:
                cats = sorted(df1.loc[:,col].value_counts(dropna=True).index)
                self.oneHotEncoder[col] = cats

    def transform(self,df,catCols=[]):
        df1 = df.copy()
        if self.labelEncoding:
            for col in catCols:
                labelEncoder = self.labelEncoder[col]
                labelEncoder = {v:i for i,v in enumerate(labelEncoder.tolist())}
                print(labelEncoder)
                df1.loc[:,col] = df1.loc[:,col].map(labelEncoder)

        if self.oneHotEncoding:
            for col in catCols:
                oneHotEncoder = self.oneHotEncoder[col]
                df1.loc[:,col] = df1.loc[:,col].astype(pandas.CategoricalDtype(categories=oneHotEncoder))
            df1 = pandas.get_dummies(df1,columns=catCols,drop_first=self.dropFirst)

        return df1

рдПрдирдХреЛрдбрд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЖрд░рдВрдн рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

enc1 = CategoryEncoder(True,False)     # Will label encode but not one-hot encode
enc2 = CategoryEncoder(False,True,True)     # Will one-hot encode but not label encode
enc3 = CategoryEncoder(True,True,True)     # Will label encode first and then one-hot encode

# List of categorical columns you want to encode
categorical_columns = ['col_1', 'col_2']

enc1.fit(train_df, categorical_columns)
enc1.transform(test_df, categorical_columns) # Returns the dataframe encoded columns

рдиреЛрдЯ: рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рд╕реНрддрдВрдн рдирд╛рдо рдЬреЛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jaradc picture jaradc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

venuktan picture venuktan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BDannowitz picture BDannowitz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tade0726 picture tade0726  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

andreas-thomik picture andreas-thomik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
bleepcoder.com рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд GitHub рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо GitHub, Inc. рдпрд╛ рдХрд┐рд╕реА рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╡реАрдбрд┐рдпреЛ рдпрд╛ рдЪрд┐рддреНрд░ рдХреА рдореЗрдЬрдмрд╛рдиреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд╣реИрдВред
рдЗрд╕ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рд╕реЛрд░реНрд╕: рд╕реНрд░реЛрдд

рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ
рд▓реЛрдХрдкреНрд░рд┐рдп рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ
рдЕрдзрд┐рдХ рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ

┬й 2024 bleepcoder.com - Contact
Made with in the Dominican Republic.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.