头歌平台数据挖掘之数据预处理

第一关:使用中位数填充中位值

任务描述

本关任务:使用中位数填充缺失值。

相关知识

根据样本之间的相似性填补缺失值是指用这些缺失值最可能的值来填补它们,通常使用能代表变量中心趋势的值进行填补,代表变量中心趋势的指标包括平均值、中位数、众数等,本次任务使用中位数填充缺失值

代码

# -*- coding: utf-8 -*-
def fill_median(data):
    """填充数据中的缺失值
    参数:
        data - pandas.dataframe格式,原始数据

    返回值:
        processed_data - 填充后的数据
    """
    processed_data = data
    #   请在此添加实现代码     #
    #********** Begin *********#
    processed_data = data.copy()  # 复制原始数据,避免原始数据丢失
    processed_data.fillna(processed_data.median(), inplace=True) #中位数填充缺失值

    #********** End ***********#
    return processed_data

解释相关代码:

   fillna函数可以将缺失值填充为指定数值,这里指定的数值是processed_data.median()中位数。

   inplace=True 可以让填充立马生效,也就是直接填充不用再创建新的对象。

第二关:离散化

任务描述

本关任务:将原数据集中的年龄离散化。

按下表标准进行离散化

相关知识

连续属性的离散化就是在数值的取值范围内设定若干点离散的划分点,划分区间,然后用不同的符号去表示落在每个子区间的数据值。

离散化涉及两个任务,确定分类数以及将连续属性值映射到这些分类值。

代码: 

# -*- coding: utf-8 -*-

def discretization(data):
    """对连续型数据离散化
     0-17 -> 0
    18-44 -> 1
    45-59 -> 2
    60-   -> 3
    参数:
        data - pandas.dataframe格式,原始数据中的一列

    返回值:
        processed_data - 离散化后的数据
    """
    processed_data = data
    #   请在此添加实现代码     #
    #********** Begin *********#
    processed_data = data.copy() # 复制原始数据,避免原始数据丢失

    # 根据区间设置离散化的规则
    processed_data = processed_data.apply(lambda x: 0
     if x <= 17 
     else (1 
            if x <= 44
            else (2 
                  if x <= 59 
                  else 3)))
    #********** End ***********#
    return processed_data

解释相关代码: 

lambda x:0  中的lambda函数表示对传入的参数x进行处理,如果x的值符合某个条件(在这里是x <= 17),则返回0。

if-else解释:

  1. 第一个if-else语句:

    • if x <= 17: 如果数据x的值小于等于17,则返回0。

    • else: 如果数据x的值大于17,则执行下一个if-else语句。

  2. 第二个if-else语句:

    • if x <= 44: 如果数据x的值大于17且小于等于44,则返回1。

    • else: 如果数据x的值大于44,则执行下一个if-else语句。

  3. 第三个if-else语句:

    • if x <= 59: 如果数据x的值大于44且小于等于59,则返回2。

    • else: 如果数据x的值大于59,则返回3。 

第三关:规范化-——最小最大规范化

任务描述

本关任务:编写程序,将给定的数据进行0-1规范化。

相关知识

为了消除指标之间的量纲和取值范围差异的影响,需要进行规范化(归一化)处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。

数据规范化方法主要有:

  • 最小-最大规范化
  • 零-均值规范化
最小-最大规范化

最小—最大规范化对原始数据进行线性变换。

假设某一属性A的最小值和最大值分为别minA​和maxA​,最小—最大规范化通过公式:

将属性A的值v映射到[new_minA​,new_maxA​]区间内。

编程任务

本关卡要求你实现函数minmax_normalization,将给定的数据进行0-1规范化。

测试说明

平台将读取数据集,并将所有数据按属性列分别进行0-1规范化,并将规范化后的结果保存到csv文件,与正确结果进行比较,完全一致则返回True,否则返回False。

代码:

# -*- coding: utf-8 -*-
def minmax_normalization(data):
    """对给定的某一列数据进行0—1规范化
    参数:
        data - pandas.dataframe格式,原始数据集中的某一列数据
    返回值:
        normalized_data - 0-1规则化后的数据
    """
    normalized_data = data
    #   请在此添加实现代码     #
    #********** Begin *********#
    normalized_data = data.copy() # 复制原始数据,避免原始数据丢失
     # 获取数据列的最大值和最小值
    min_val = data.min()
    max_val = data.max()
    
    # 对数据列进行0-1规范化
    normalized_data = (data - min_val) / (max_val - min_val)

    #********** End ***********#
    return normalized_data

 解释相关代码:

min_val=data.min()   data.min()计算出每一列的最小值并赋值给min_val();最大值一样。

normallzed_data = (data - min_val) / (max_val - min_val)  是0-1规范化的公式,上面有提到。

第四关:相关性检验——皮尔森(person)函数

任务描述

本关任务:计算数据中各属性与类别的皮尔森相关性系数。

相关知识

为了更加准确的描述变量之间的线性相关程度,可以通过计算相关系数来进行相关分析。在二元变量的相关分析过程中比较常用的有皮尔森相关系数、Spearman秩相关系数和判定系数。

皮尔森相关系数也称皮尔森积矩相关系数(Pearson product-moment correlation coefficient),是一种线性相关系数,是最常用的一种相关系数。记为r,用来反映两个变量X和Y的线性相关程度,r值介于-1到1之间,绝对值越大表明相关性越强。

当r>0时,表明两个变量正相关,即一个变量值越大则另一个变量值也会越大;

当r<0时,表明两个变量负相关,即一个变量值越大则另一个变量值反而会越小;

当r=0时,表明两个变量不是线性相关的(注意只是非线性相关),但是可能存在其他方式的相关性(比如曲线方式);

当r=1和-1时,意味着两个变量X和Y可以很好的由直线方程来描述,所有样本点都很好的落在一条直线上。

计算方法

# -*- coding: utf-8 -*-
import pandas as pd
def pearson(data_x, data_y):
    """计算某一属性列与类别的相关性
    参数:
        data_x  - pandas.dataframe格式,原始数据集中的某一列数据
        data_y  - pandas.dataframe格式,原始数据集中的类别
    返回值:
        value - pearson系数
    """
    value = 0
    #   请在此添加实现代码     #
    #********** Begin *********#
    corr_matrix = pd.concat([data_x, data_y], axis=1).corr()
    value = corr_matrix.iloc[0, 1]

    #********** End ***********#
    return ("%.4f" % value)

相关代码解释:

1.pd.concat([data_x,data_y],axis=1)

           pd.concat()函数用于将两个DataFrame按列方向(axis=1)进行拼接,生成一个新的DataFrame。在这里,将data_x和data_y两个DataFrame进行拼接,形成一个新的DataFrame,其中data_x作为第一列,data_y作为第二列。

2. .corr()  

对拼接后的DataFrame调用corr()方法,计算各列之间的相关性矩阵,即Pearson相关系数矩阵。相关性矩阵是一个对称矩阵,其中每个元素表示对应列之间的相关性

3.corr_matrix.iloc[0,1]

使用.iloc[ ]方法获取相关性矩阵中第0行第1列的元素,即data_x与data_y之间的Pearson相关系数。iloc[]方法基于行和列的位置进行数据提取。

4.value=

将获取到的Pearson相关系数赋值给value变量,作为最终的结果。

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值