educoder-数据预处理基础

一、第1关引言-根深之树不怯风折,泉深之水不会涸竭

  • 背景:
    现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。为了提高数据挖掘的质量产生了数据预处理技术;
  • 概念:
    数据的预处理是指对所收集数据进行分类或分组前所做的审核、筛选、排序等必要的处理;
  • 目的:
    通过数据预处理,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间!
  • 数据预处理方法
  • 数据清理:填写空缺的值,平滑噪声数据,识别、删除孤立点,解决不一致性;
  • 数据集成:集成多个数据库、数据立方体或文件;
  • 数据变换:规范化和聚集;
  • 数据归约:得到数据集的压缩表示,它小得多,但可以得到相同或相近的结果;
  • 数据离散化:数据归约的一部分,通过概念分层和数据的离散化来规约数据,对数字型数据特别重要。

1、数据质量的多维度量不包含以下那个选项?

  • A、精确度
  • B、完整度
  • C、不一致性
  • D、可信度

2、数据预处理的方法不包含以下那个选项?

  • A、数据清理
  • B、数据集成
  • C、数据变换
  • D、数据保留

二、第2关:数据清理-查漏补缺

空缺值处理

  • 忽略元组:当类标号缺少时通常这么做(假定挖掘任务设计分类或描述),当每个属性缺少值的百分比变化很大时,它的效果非常差;
  • 人工填写空缺值:工作量大,可行性低;
  • 使用一个全局变量填充空缺值:比如使用 unknown 或 -∞;
  • 使用属性的平均值填充空缺值;
  • 使用与给定元组属同一类的所有样本的平均值;
  • 使用最可能的值填充空缺值:使用像 Bayesian 公式或判定树这样的基于推断的方法。

查看缺失值:

    import numpy as np  
    import pandas as pd  
    # 打开文件  
    train = pd.read_csv('diabetes_null.csv', na_values=['#NAME?'])  
    total = train.isnull().sum().sort_values(ascending=False)  
    print(total)#输出缺失值在每列中的个数  
    percent =(train.isnull().sum()/train.isnull().count()).sort_values(ascending=False)  
    print(percent)#输出每列缺失值在总缺失值当中的百分比

educoder-数据预处理基础_第1张图片educoder-数据预处理基础_第2张图片
处理缺失值:

    #使用出现次数最多的值填补  
    train['Insulin'] = train['Insulin'].fillna(100)  
    #使用中位数填补  
    train['SkinThickness'] = train['SkinThickness'].fillna(train['SkinThickness'].median())  
    train['BloodPressure'] = train['BloodPressure'].fillna(train['BloodPressure'].median())  
    #使用平均数填补  
    train['BMI'] = train['BMI'].fillna(train['BMI'].mean())  
    train['Glucose'] = train['Glucose'].fillna(train['Glucose'].mean())
    total_after_process = train.isnull().sum().sort_values(ascending=False)  
    print(total_after_process)#再次输出缺失值在每列中的个数  
    percent_after_process =(train.isnull().sum()/train.isnull().count()).sort_values(ascending=False)  
    print(percent_after_process)#输再次出每列缺失值在总缺失值当中的百分比

噪声数据
噪声指一个测量变量中的随机错误或偏差。下列是一些引起不正确属性值的原因:

数据收集工具的问题;

数据输入错误;

数据传输错误;

技术限制;

命名规则的不一致。

其他需要数据清理的数据问题:

重复记录;

不完整的数据;

不一致的数据。

噪声处理
噪声的处理方式如下:

规则:异常值剔除;

分箱(binning):首先排序数据,并将他们分到等深的箱中然后可以按箱的平均值平滑、按箱中值平滑、按箱的边界平滑等等;

聚类:监测并且去除孤立点;

计算机和人工检查结合:计算机检测可疑数据,然后对它们进行人工判断;

回归:通过让数据适应回归函数来平滑数据。

通过可视化的方式查看噪声:

    import matplotlib.pyplot as plt  
    #噪声数据观察  
    plt.scatter(x=train['Age'], y=train['Pregnancies'])  
    plt.xlabel('Age')  
    plt.show()  
    plt.ylabel('Pregnancies')  

答案:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def student():
    train = pd.read_csv('Task1/diabetes_null.csv', na_values=['#NAME?'])
    train['Insulin'] = train['Insulin'].fillna(100)
    train['SkinThickness'] = train['SkinThickness'].fillna(train['SkinThickness'].median())
    train['BloodPressure'] = train['BloodPressure'].fillna(train['BloodPressure'].median())
    train['BMI'] = train['BMI'].fillna(train['BMI'].mean())
    train['Glucose'] = train['Glucose'].fillna(train['Glucose'].mean())
    #********* Begin *********#
    train.sort_values(by='Age', ascending=False)[:1]
    train = train.drop((train[train['Age'] >= 80]).index)
    plt.figure(figsize=(10,10))
    plt.scatter(x=train['Age'], y=train['Pregnancies'])
    plt.savefig("Task1/img/T1.png")
    plt.show()
    #********* End *********#

你可能感兴趣的:(数据挖掘,数据分析,python)