处理并补全缺失值和类型变量的方法

缺失值补全和变换

1、首先导入数据,然后进行变量的类型处理

df_tr = train.drop('Id',axis=1)
df_X = df_tr.drop('SalePrice',axis=1)
df_y = df_tr['SalePrice']
quantity = [attr for attr in df_X.columns if df_X.dtypes[attr] != 'object']  # 数值变量集合
quality = [attr for attr in df_X.columns if df_X.dtypes[attr] == 'object']  # 类型变量集合

for c in quality:  # 类型变量缺失值补全
    df_tr[c] = df_tr[c].astype('category')
    if df_tr[c].isnull().any():
        df_tr[c] = df_tr[c].cat.add_categories(['MISSING'])
        df_tr[c] = df_tr[c].fillna('MISSING')

# 连续变量缺失值补全 
quantity_miss_cal = df_tr[quantity].isnull().sum().sort_values(ascending=False)  # 缺失量均在总数据量的10%以下
missing_cols = quantity_miss_cal[quantity_miss_cal>0].index
df_tr[missing_cols] = df_tr[missing_cols].fillna(0.)  # 从这些变量的意义来看,缺失值很可能是取 0
df_tr[missing_cols].isnull().sum()  # 验证缺失值是否都已补全

2、对于离散变量,我们可以进行一元方差分析,获得各个离散变量对房价方差的影响:

# 一元方差分析(类型变量)
from scipy import stats
def anova(frame, qualitative):
    anv = pd.DataFrame()
    anv['feature'] = qualitative
    pvals = []
    for c in qualitative:
        samples = []
        for cls in frame[c].unique():
            s = frame[frame[c] == cls]['SalePrice'].values
            samples.append(s)  # 某特征下不同取值对应的房价组合形成二维列表
        pval = stats.f_oneway(*samples)[1]  # 一元方差分析得到 F,P,要的是 P,P越小,对方差的影响越大。
        pvals.append(pval)
    anv['pval'] = pvals
    return anv.sort_values('pval')

a = anova(df_tr,quality)
a['disparity'] = np.log(1./a['pval'].values)  # 悬殊度
fig, ax = plt.subplots(figsize=(16,8))
sns.barplot(data=a, x='feature', y='disparity')
x=plt.xticks(rotation=90)
plt.show()

3、由上图示分析可见,不少离散变量的具体取值对最终房价会产生较大影响(例如Neighborhood这个变量,实际上暗含了地段这个影响房价的重要因素),因此,我们可以按照各离散变量相应取值下房价的均值来给各个取值划定一个1,2,3,4来定量描述他们对房价的影响,也就是将离散变量转化为数值型的有序变量
 

def encode(frame, feature):
    '''
    对所有类型变量,依照各个类型变量的不同取值对应的样本集内房价的均值,按照房价均值高低
    对此变量的当前取值确定其相对数值1,2,3,4等等,相当于对类型变量赋值使其成为连续变量。
    此方法采用了与One-Hot编码不同的方法来处理离散数据,值得学习
    注意:此函数会直接在原frame的DataFrame内创建新的一列来存放feature编码后的值。
    '''
    ordering = pd.DataFrame()
    ordering['val'] = frame[feature].unique()
    ordering.index = ordering.val
    ordering['price_mean'] = frame[[feature, 'SalePrice']].groupby(feature).mean()['SalePrice']
    # 上述 groupby()操作可以将某一feature下同一取值的数据整个到一起,结合mean()可以直接得到该特征不同取值的房价均值
    ordering = ordering.sort_values('price_mean')
    ordering['order'] = range(1, ordering.shape[0]+1)
    ordering = ordering['order'].to_dict()
    for attr_v, score in ordering.items():
        # e.g. qualitative[2]: {'Grvl': 1, 'MISSING': 3, 'Pave': 2}
        frame.loc[frame[feature] == attr_v, feature+'_E'] = score

quality_encoded = []
# 由于qualitative集合中包含了非数值型变量和伪数值型变量(多为评分、等级等,其取值为1,2,3,4等等)两类
# 因此只需要对非数值型变量进行encode()处理。
# 如果采用One-Hot编码,则整个qualitative的特征都要进行pd,get_dummies()处理
for q in quality:
    encode(df_tr, q)
    quality_encoded.append(q+'_E')
df_tr.drop(quality, axis=1, inplace=True)  # 离散变量已经有了编码后的新变量,因此删去原变量
# df_tr.shape = (1460, 80)
print(quality_encoded, '\n{} qualitative attributes have been encoded.'.format(len(quality_encoded)))

这里大部分参考https://blog.csdn.net/qilixuening/article/details/75153131

### 回答1: 查找缺失值是数据预处理的重要步骤之一, 因为缺失值可能会对机器学习模型造成负面影响, 如降低模型的准确性和稳健性. 如果不清楚缺失值的分布, 可能会导致错误的做法, 例如删除或填充错误的数据. 因此, 查找缺失值是数据预处理中非常重要的一个步骤. ### 回答2: 数据预处理是一个数据分析的关键步骤,而查找缺失值是数据预处理中的一项重要任务。主要有以下几个原因: 首先,缺失值会导致数据分析结果的不准确性。如果数据中存在缺失值,直接进行分析可能会带来误导性的结果。例如,某个样本的某一特征值缺失,若不进行处理,可能会导致对于该特征的统计分析结果出现偏差,无法得到准确的结论。 其次,缺失值会影响数据模型的建立。对于机器学习和统计建模等数据分析任务来说,缺失值的存在会对模型的训练和评估带来困难。模型需要完整的数据集来进行建模和预测,如果存在缺失值,就会影响建模的准确性和预测结果的可靠性。 此外,查找缺失值有助于决定合适的缺失值处理方法。通过查找缺失值,我们能够了解缺失值的出现情况和原因,进而根据具体情况选择合适的处理方法。常见的处理方法包括删除缺失值补全缺失值和使用专门的缺失值处理算法等。 最后,查找缺失值还可以帮助发现数据收集过程中的问题。在数据收集环节中,缺失值的出现可能意味着数据收集过程存在问题,例如问卷调查中的遗漏,传感器故障等。通过查找缺失值,可以帮助我们发现这些问题,并采取相应措施来提高数据的质量。 综上所述,查找缺失值是数据预处理中的重要步骤,其目的是为了保证数据分析结果的准确性和可靠性,以及决定合适的缺失值处理方法,并帮助发现数据收集过程中的问题。 ### 回答3: 数据预处理是数据挖掘过程中的重要步骤,用于处理原始数据集中的噪声、异常值和缺失值等问题,以提高数据质量和模型的准确性。在数据预处理过程中,查找缺失值是必要且重要的步骤。 首先,查找缺失值可以帮助我们了解数据集的完整性。缺失值是指数据集中某些属性或变量的值为空白或未记录,如果不进行查找,可能会因为数据缺失而导致后续数据挖掘分析的偏差。通过查找缺失值,我们可以确定数据集的完整性,从而对数据集进行合理的操作。 其次,查找缺失值使我们能够评估数据集的质量。数据集中的缺失值可能会对后续分析产生影响,降低模型的准确性和可靠性。通过查找缺失值,我们可以了解到缺失值的分布情况,进而评估数据集的质量,判断数据缺失的原因并采取相应的处理措施,例如对缺失值进行填补或删除。 此外,查找缺失值还可以帮助我们选择合适的缺失值处理方法。不同的缺失值处理方法适用于不同的情况,通过查找缺失值,我们可以了解到数据集中缺失值类型和缺失的模式,进而选择合适的缺失值处理方法,如均值插补、回归插补或使用插值算法等。 综上所述,数据预处理中的查找缺失值是必要的,它可以帮助我们了解数据集的完整性和质量,评估缺失值处理的效果,并选择合适的缺失值处理方法,从而提高数据的可靠性和分析结果的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值