python拡張コードブロック

5197 ワード

# pandas dataFrame[col].value_counts()   
# Get number of unique entries in each column with categorical data
object_nunique = list(map(lambda col: X_train[col].nunique(), object_cols))
d = dict(zip(object_cols, object_nunique))

# Print number of unique entries by column, in ascending order
sorted(d.items(), key=lambda x: x[1]) 

ダミー変数処理、処理するフィーチャーの指定、カラム接頭辞の指定
for fea in feature_cols:       df = pd.get_dummies(df,columns=[fea],prefix=fea)
 
jionのときにバグがあるので、以下のフォーマットでは避けましょう.
embark_dummies= pd.get_dummies(train_data['Embarked'])
#get_dummies()この列にどれだけの可能な値があるかは、どれだけの列で表され、1つの列は、独熱符号化と同様の可能な値を表す
train_data = train_data.join(embark_dummies)
train_data.drop(['Embarked'],axis=1,inplace=True) embark_dummies = train_data[['S','C','Q']]
embark_dummies.head() 
  • categorical_features = 'all'、このパラメータはどの特徴を符号化するかを指定し、デフォルトではすべてのカテゴリを符号化します.どのフィーチャーを選択するかを自分で指定したり、インデックスまたはbool値で指定したりすることもできます.次の例を見てください.
  • # -*- coding: utf-8 -*- from sklearn.preprocessing import OneHotEncoder enc=OneHotEncoder(categorical_features=[0,2])#は[True,False,True]enc.fit([[0,0,3],[1,0],[0,2,1],[1,0,2])ans=enc.transform([[0,2,3]).toarray() 

  •  
    #等周波数切断変数def bin_frequency(x,y,n=10):#xはボックスを分ける変数であり、yはtarget変数である.nボックス数total=y.count()#1総サンプル数bad=y.sum()#2悪いサンプル数good=total-bad#3良いサンプル数ifx.value_を計算するcounts().shape[0]==2:#4変数値が0と1の場合、d 1=pdの2つのグループにのみ分けられる.DataFrame({'x':x,'y':y,'bucket':pd.cut(x,2)})      else:         d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.qcut(x,n,duplicates='drop')})5用pd.Cutは、等周波数分割箱d 2=d 1を実現する.groupby('bucket',as_index=True)#6分箱結果に従ってパケット重合d 3=pd.DataFrame(d2.x.min(),columns=['min_bin'])      d3['min_bin'] = d2.x.min()#7箱体の左境界d 3['max_bin']=d 2.x.max()#8箱体の右境界d 3['bad']=d 2.y.sum()#9各箱体における不良サンプルの数d 3['total']=d 2.y.count()#10箱体当たりの総サンプル数d 3['bad_rate']=d 3['bad']/d 3['otal']11箱体当たりの不良サンプルが総サンプル数に占める割合d 3['badattr']=d 3['bad']/bad#12箱体当たりの不良サンプルが不良サンプル総数に占める比例d 3['goodattr']=(d 3['otal']-d 3['bad'])/good#13各箱体中の良いサンプルが占めるサンプル総数の割合d 3['WOEi']=np.log(d 3['badattr']/d 3['goodattr'])#14は、各筐体のwoe値IV=((d 3['badattr']-d 3['goodattr'])*d 3['WOEi')を算出する.sum()#15変数のiv値d 3['IVi']=(d 3['badattr']-d 3['goodattr')*d 3['WOEi']#16 IVd 4=(d 3.sort_values(by='min_bin'))を算出する.reset_index(drop=True)#17箱体を大きいから小さいに並べ替えるcut=[]cut.append(float('-inf'))     for i in d4.min_bin:         cut.append(i)     cut.append(float('inf'))     WOEi = list(d4['WOEi'].round(3))     return IV,cut,WOEi,d4  
    columns_iv = ['7日以内に申請者が複数のプラットフォームで借入金を申請する','1ヶ月以内に申請者が複数のプラットフォームで借入金を申請する','3ヶ月以内に申請者が複数のプラットフォームで借入金を申請する','7日以内にP 2 Pネットローンプラットフォーム数を関連付け','1ヶ月以内にP 2 Pネットローンプラットフォーム数を関連付け','3ヶ月以内にP 2 Pネットローンプラットフォーム数を関連付け','X 3ヶ月以内に申請者の携帯電話番号が第2連絡先携帯電話番号として出現した回数','X 3ヶ月以内に申請者の携帯番号が最初の3つの連絡先の携帯番号として現れた回数']ivs=[]for i in columns_iv:     print(i)     IV,cut,WOEi,d4 = bin_frequency(df[i], df['flag'])     print('IV=', IV)     ivs.append(IV)     print(d4)  
    #カスタム切断変数def bin_Cut(x,y,cut):#xはボックスを分ける変数であり、yはtarget変数である.Cutはボックスのカットポイントtotal=y.count()#総サンプル数bad=y.sum()#悪いサンプル数good=total-bad#計算サンプル数bucket=cut if x.value_counts().shape[0]==2:         d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.cut(x,2)})      else:         d1 = pd.DataFrame({'x':x,'y':y,'bucket':pd.cut(x,cut)})#用pd.Cutは、ボックスd 2=d 1を実現する.グループ化d 3=pd.DataFrame(d2.x.min(),columns=['min_bin'])      d3['min_bin'] = d2.x.min()#箱体の左境界d 3['max_bin']=d 2.x.max()#箱体の右境界d 3['bad']=d 2.y.sum()#箱体当たりの不良サンプルの数d 3['total']=d 2.y.count()#箱体当たりの総サンプル数d 3['bad_rate']=d 3['bad']/d 3['otal']#箱体当たりの不良サンプルが総サンプル数に占める割合d 3['badattr']=d 3['bad']/bad#箱体当たりの不良サンプルが不良サンプル総数に占める割合d 3['goodattr']=(d 3['total']-d 3['bad'])/good#各箱体中の良いサンプルが占めるサンプル総数の割合d 3['WOEi']=np.log(d 3['badattr']/d 3['goodattr'])#各ボックスのwoe値IV=((d 3['badattr']-d 3['goodattr'])*d 3['WOEi')を算出する.sum()#計算変数のiv値d 3['IVi']=(d 3['badattr']-d 3['goodattr')*d 3['WOEi']d 4=(d 3.sort_values(by='min_bin').reset_index(drop=True)#箱体を大きいから小さいに並べ替えるcut=[]cut.append(float('-inf'))     for i in d4.min_bin:         cut.append(i)     cut.append(float('inf'))     WOEi = list(d4['WOEi'].round(3))     return IV,cut,WOEi,d4  
     
    IV,cut,WOEi,d4 = bin_Cut(df['3ヶ月以内関連P 2 Pネットローンプラットフォーム数'],df['y'],[-1,0,1,4,40])
    参照先:https://blog.csdn.net/qq_32532663/article/details/104583491?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf