#number of unique categories for each feature dict_={} for feature in df.columns: dict_[feature]=df[feature].value_counts().shape[0] pd.DataFrame(dict_,index=['unique_counts']).transpose()
时间: 2023-12-14 14:03:31 浏览: 126
您的代码看起来几乎正确。但是,请注意,您需要确保在运行此代码之前,先导入pandas库并将您的数据框命名为df。可以使用以下代码:
import pandas as pd
df = pd.read_csv('C:\\Users\\16215\\Desktop\\diabetes_prediction_dataset.csv')
接下来,您可以使用以下代码计算每个特征的唯一类别数量并创建一个包含结果的数据框:
dict_ = {}
for feature in df.columns:
dict_[feature] = df[feature].value_counts().shape[0]
result = pd.DataFrame(dict_, index=['unique_counts']).transpose()
现在,您可以打印result以查看每个特征的唯一类别数量。
相关问题
if not os.path.exists('model/easy_feature_select.csv'): df_importances = df_importances[:150] df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据筛选后的特征重新加载数据 x_train, x_test, y_train, y_test, df_ft = set_data(df_0, df_1, df_9, cfg_dict) # 相关系数,补充未被筛选为重要特征但与重要特征相关性较大的其他特征 feature_list = x_train.columns.tolist() df_corr = x_train.corr() df_corr = df_corr.replace(1, 0) # 筛选出相关系数大于0.85的特征 for i in range(len(df_corr.columns)): if i >= len(df_corr.columns): break column = df_corr.columns[i] names = df_corr[abs(df_corr[column]) >= 0.85].index.tolist() if names: print(column, '的强相关特征:', names) feature_list = [i for i in feature_list if i not in names] df_corr = x_train[feature_list].corr() continue #feature_list = list(set(feature_list + ['呼叫次数', '入网时长(月)', # 'MOU_avg', 'DOU_avg', '省外流量占比_avg'])) df_feature = pd.DataFrame(feature_list, columns=['features']) df_importances = pd.merge(df_feature, df_importances, on='features', how='left') df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据筛选后的特征重新加载数据 x_train, x_test, y_train, y_test, df_ft = set_data(df_0, df_1, df_9, cfg_dict) # 重新训练 bst = fit(cfg_dict, x_train, y_train, x_test, y_test) df_importances = feature_imp(model=bst, x_train=x_train, plot=True) df_importances.to_csv('model/easy_feature_select.csv', encoding='gbk', index=False) # 根据重新排序的特征训练模型 x_train, x_test, y_train, y_test, df_ft = set_data(df_0, df_1, df_9, cfg_dict) bst = fit(cfg_dict, x_train, y_train, x_test, y_test)
这段代码用于特征选择和重新训练模型的过程。
首先,代码通过判断是否存在 'model/easy_feature_select.csv' 文件来判断是否需要进行特征选择。如果文件不存在,则进行特征选择的步骤。
在特征选择的过程中,首先将 df_importances 数据框的前150个特征保存到 'model/easy_feature_select.csv' 文件中,然后重新加载数据,获取新的训练集和测试集。
接着,计算特征之间的相关系数,并筛选出相关系数大于0.85的特征。如果存在相关系数大于0.85的特征,则将这些特征从特征列表 feature_list 中移除,并重新计算相关系数。
然后,将筛选后的特征列表 feature_list 和 df_importances 数据框进行合并,并将合并结果保存到 'model/easy_feature_select.csv' 文件中。再次重新加载数据,获取新的训练集和测试集。
接下来,重新训练模型,并将训练好的模型保存到 bst 变量中。然后,通过调用 feature_imp 函数获取新模型的特征重要性信息,并将其保存到 'model/easy_feature_select.csv' 文件中。
最后,再次重新加载数据,获取新的训练集和测试集。重新训练模型,并将训练好的模型保存到 bst 变量中。
这段代码的作用是进行特征选择和重新训练模型的过程。在特征选择中,通过计算特征之间的相关系数,筛选出与重要特征相关性较大的其他特征,并将这些特征从特征列表中移除。然后,重新训练模型,并保存新模型的特征重要性信息。最后,再次重新加载数据,重新训练模型。
解释这个代码def Agg(Feature): for dataset in [df_train,df_test]: for feat_1 in ['year','month','WeekOfYear','day']: dataset[f'{Feature}_Agg_{feat_1}_mean'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].mean())) dataset[f'{Feature}_Agg_{feat_1}_median'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].median())) dataset[f'{Feature}_Agg_{feat_1}_std'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].std())) dataset[f'{Feature}_Agg_{feat_1}_min'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].min())) dataset[f'{Feature}_Agg_{feat_1}_max'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].max())) dataset[f'{Feature}_Agg_{feat_1}_sum'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].sum())) dataset[f'{Feature}_Agg_{feat_1}_range'] = dataset[f'{Feature}_Agg_{feat_1}_max'] - dataset[f'{Feature}_Agg_{feat_1}_min'] dataset[f'{Feature}_Agg_{feat_1}_var'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].var())) dataset[f'{Feature}_Agg_{feat_1}_skew'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].skew())) for n in [0.10,0.25,0.75,0.90]: dataset[f'{Feature}_Agg_{feat_1}_quantile_{n}'] = dataset[feat_1].map(dict(df_train.groupby(feat_1)[Feature].quantile(n))) feats = ['meantemp'] for feat in feats: Agg(feat) print('处理删除前的特性: ', df_train.shape) cols = df_train.columns dup = [] for feat_1 in tqdm(cols): if (feat_1 in dup): continue for feat_2 in cols.drop(feat_1): if (feat_2 in dup): continue if (df_train[feat_1].equals(df_train[feat_2])): df_train.drop(feat_2,inplace=True,axis=1) dup.append(feat_2) for feat in tqdm(df_test.columns): if ((len(df_train[feat].value_counts().keys()) == 1) | (len(df_test[feat].value_counts().keys()) == 1)): df_train.drop(feat,inplace=True,axis=1) df_test.dr
op(feat,inplace=True,axis=1)
这个代码实现了对特征进行聚合的操作,将每个特征在年、月、周、日等维度上的均值、中位数、标准差、最小值、最大值、求和、极差、方差、偏度、分位数等统计量都计算出来,并且添加到原始数据集中。最后删除相同的特征和唯一值特征。
阅读全文