python数据分析与挖掘 | 数据探索

有了样本数据,该如何展开数据分析工作呢?首先,就是观察,先看懂数据,这在后续工作中起到事半功倍的作用。要考虑的问题比如:样本数据集的数量和质量是否满足模型构建的要求?是否有明显的规律和趋势?各元素之间是否有关联性?以上都是在这个阶段要考虑的问题。数据探索就是通过检验数据集的数据质量、绘制图表、计算特征量等方法,对样本数据集的结构和规律进行分析。它可以帮助选择合适的数据预处理和建模方法,解决问题。

数据质量分析

数据质量分析时数据挖掘过程中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。

数据质量分析主要是检查原始数据中是否存在脏数据,即不符合要求,以及不能直接进行相应分析的数据。常见的脏数据包括:

  • 缺失值

  • 异常值

  • 不一致的值

  • 重复数据及含特殊字符的数据

缺失值分析

  • 原因

  1. 信息无法获取,或者代价较大

  2. 因人为或者设备情况被遗漏

  3. 属性不存在,例如未婚着的配偶

  • 影响

  • 缺少了很多有用信息,建模时的不确定性更加明显,输出不可靠

  • 分析

    使用简单的统计分析,可以得到含有缺失值的属性个数,以及每个属性的未缺失数、缺失数与缺失率等。解决办法主要有三个方向:删除存在缺失值的记录、对可能值进行插补以及不处理。

  • 异常值分析

    异常值分析是检验数据是否有录入错误或者是否含不合理数据。将含有异常值的数据进行分析,会对结果产生不良影响。异常值是指样本中的个别值,其数值明显偏离其余的观测值,也称为“离群点”,异常值分析也称为离群点分析。

    1. 简单统计量分析

      在所有的异常值分析之前,可以先进行各描述性分析,也就是凭借我们自己的思维,做一个基本的分析,查看有没有不合理的数据,通常可以从最大最小值来看,是否超出合理范围。

    2. 3σ原则

      在我们生活中,其实大部分数据都是服从正态分布的,在这种情况下,利用3σ原则,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。距离平均值3σ之外的值出现的概率为 P( |x-μ|>3σ ) ≤0.003 ,事件发生的概率极低。

    3. 箱形图分析

      箱形图提供了识别异常值的一个标准:异常值通常被定义为小于 Q(L)-1.5IQR 或大于 Q(U)+1.5IQR 的值。其中,Q(L)称为下分位数,表示全部观察值中有四分之一的数据比它小,同理,Q(U)为上四分位数,IQR称为四分位间距,是上四分位数Q(U)与下四分位数Q(L)之差,中间包含了全部观察值的一半。

    箱形图依据实际数据绘制,没有对数据做任何限制性要求,仅仅是真实直观的表现数据分布的本来面貌。除此之外,箱形图判断异常值的标准是以四分位数和四分位间距为基础,具有一定的鲁棒性,因为有多达25%的数据可以变得任意远而不会明显的影响四分位数,所以异常值对这个标准的影响很小。箱形图分析在异常值处理时更加客观。

    举个栗子

    演示一下上述数据质量分析如何操作,数据均为引用。此程序使用的事一个两列的数据,分别为日期和销量。

    import pandas as pd
    
    catering_sale = '../data/catering_sale.xls' 
    data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
    print(data.describe())
    print('counts=' + str(len(data)))

    由于我电脑编码的问题,汉字显示为乱码,不影响展示,可以看到 pandas 库的 describe 方法可以很方便的查看数据的基本情况,包括平均值、标准差、最小值、还有分位数等。其中的 count 方法是指统计当中的非空值数量(200),后面又利用 len 方法得到所有数据的数量(201),发现并没有对上,因此,可以判断出,数据中有一个缺失值。

    下面看一下异常值该如何检测。

    import pandas as pd
    
    catering_sale = '../data/catering_sale.xls' 
    data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
    
    import matplotlib.pyplot as plt #导入图像库
    plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
    
    plt.figure() #建立图像
    p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
    
    plt.show() #展示箱线图

    可以很清晰的看到上下边界点外有几个异常值,最下方还有个颜色较深,可能是有重叠部分,具体观察的话,可以利用 Matplotlib 中的显示注释的方式(ax.annotate)把每个点的坐标显示出来。

    一致性分析

    数据不一致性是指数据的矛盾性、不相容性,直接对不一致的数据进行挖掘,可能会产生与实际相违背的挖掘结果。这样的结果可能是由于来源不同的数据组合到一起,会出现不一致的情况。

    数据特征分析

    分布分析

    分布分析能揭示数据的分布特征和分布类型。对于定量数据,想要了解其分布形式是对称的还是非对称的,发现某些特大或特小的可以值,可以通过绘制频率分布直方图、茎叶图进行直观分析;对于定性分类数据,可用饼图和条形图直观的显示分布情况。

    • 定量数据的分布分析

    对于定量变量而言,选择“组数”和“组宽”是做频率分布分析时最主要的问题。

    1. 求极差:最大值 - 最小值

    2. 决定组距与组数:选取适当的组宽,计算分组

    3. 决定分点:选择合适的分点,左右开闭情况

    4. 列出频率分布表

    5. 绘制频率分布直方图

    注:各组之间相互排斥,将所有数据包含在内,组宽尽量相等。

    • 定性数据的分布分析

    对于定性变量,常常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。在定性变量分析中,条形图的宽度没有意义,饼图和条形图都是为了区分百分比或频数。

    对比分析

    对比分析是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。适用于指标间的横纵向比较,时间序列的比较分析。选择合适的对比标准,能做出客观的评价。对比分析还分为绝对数比较和相对数比较,具体问题具体分析。

    统计量分析

    用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。平均水平的指标是对个体集中趋势的度量,使用最广泛的事均值和中位数;反映变异程度的指标则是对个体离开平均水平的度量,广泛使用的事标准差、方差、四分位间距。

    • 集中趋势度量:均值、中位数、众数

    • 离中趋势度量:极差、标准差、变异系数、四分位数间距

    其中,变异系数是度量标准差相对于均值的离中趋势(标准差/均值)。四分位数间距可以利用 pandas 中的 describe 结果稍加运算得到。

    周期性分析

    周期性分析是探索某个变量是否随着时间变化而呈现出某种变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的周期有周度周期性趋势,甚至更短。可以通过时序折线图来观察趋势。

    贡献度分析

    贡献度分析又称帕累托分析,它的原理是帕累托原理,又称20/80定律,想必你在很多地方都会听到过。同样的投入放在不同的地方会产生不同的效益。例如,一个公司80%的利润往往来自于20%的产品,而其他的80%产品仅仅产生了20%的利润。

    相关性分析

    相关分析时指分析连续变量之间线性相关程度的强弱,并利用适当的统计指标表示出来。具体方法有以下几种:

    1. 直接绘制散点图:直观展示

    2. 绘制散点图矩阵:同时考察多个变量之间关系

    3. 计算相关系数

    主要数据探索函数

    pandas基本统计特征函数

    方法名
    函数功能
    sum()
    计算数据样本的总和(按列计算)
    mean()
    计算数据样本的算术平均数
    var()
    计算数据样本的方差
    std()
    计算数据样本的标准差
    corr()计算数据样本的相关系数矩阵
    cov()
    计算数据样本的协方差矩阵
    skew()
    样本值的偏度(三阶矩)
    kurt()
    样本值的峰度(四阶矩)
    describe()
    给出样本的基本描述(常用统计量)


    pandas拓展统计特征函数

    上述是pandas的一些基本统计特征的函数,还有一些较为实用的方法,比如累积计算(cum),滚动计算(pd.rolling)。

    方法名
    函数功能
    cumsum()依次求得前1、2……、n个数的和
    cumprod()
    依次求得前1、2……、n个数的积
    cummax()
    依次求得前1、2……、n个数的最大值
    cummin()依次求得前1、2……、n个数的最小值
    方法名
    函数功能
    rolling_sum()
    计算数据样本的总和(按列计算)
    rolling_mean()计算数据样本的算术平均数
    rolling_var()计算数据样本的方差
    rolling_std()计算数据样本的标准差
    rolling_corr()计算数据样本的相关系数矩阵
    rolling_cov()计算数据样本的协方差矩阵
    rolling_skew()样本值的偏度(三阶矩)
    rolling_kurt()样本值的峰度(四阶矩)

    统计作图函数

    作图函数名
    作图函数功能
    plot()
    绘制线性二维图,折线图
    pie()
    绘制饼型图
    hist()
    绘制二维条形直方图
    boxplot()
    绘制样本数据的箱形图
    plot(logy = True)
    绘制y轴的对数图形
    plot(yerr = error)
    绘制误差条形图


    在数据可视化中,pandas 是主要的数据探索和分析的工具,因此,作图要 matplotlib 和 pandas 结合使用,matplotlib 是最主要的绘图工具,同时,pandas 作图简单直接,两者结合使用效率更高,具体使用可以查看 matplotlib 工具篇。


    精彩推荐

    python数据分析与挖掘 | 准备工作

    python数据分析工具 | matplotlib

    python数据分析工具 | pandas

    (无套路)福利 | python学习全套资料(视频+书籍)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值