Python 数据分析 与 数据挖掘 (介绍篇)

2019-03-15 20:14:57

楚格

介绍:Python 数据分析与挖掘,快速入门的Python and Packet 工具使用方法,其次是解决方案的应用案例,最后是数据分析与挖掘的思维价值。

成长路上会遇到许多难题与困惑,知识就是不断学习与遗忘,留下的只有解决问题架构经验方法。

浅谈认识篇

1.数据挖掘建模过程

1.1目标定义:任务理解,指标确定。

1.2数据采集:建模抽样,质量把控,实时采集。

1.3数据整理:数据探索,数据清洗,数据变换。

1.4构建模型:模式发现,构建模型,验证模型。

1.5模型评价:设定标准,模型对比,模型优化。

1.6模型发布:模型部署,模型重构。

2.数据挖掘建模工具

数据挖掘是个反复的过程,建模工具较多。针对Python进行介绍。

 Python 数据挖掘相关扩展库

2.1.Numpy:  提供数组支持,以及相应的高效的处理函数

2.2.Scipy:    提供矩阵支持,以及矩阵相关的数值计算模块

2.3.Matplotlib:  强大的数据可视化工具,作图库。

2.4Pandas:         强大灵活的数据分析和探索工具。

2.5.StatsModels: 统计建模和计量经济学,包括描述统计,统计模型估计和推断。

2.6.Scikit-Leran: 支持回归,分类,聚类的强大的机器学习库。

2.7.Keras:           深度学习库,用于建立神经网络以及深度学习模型。

2.8Gensim:         用于做文本主题模型的库,文本挖掘的库。

3.数据探索

3.1数据质量分析

  数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据。

  所谓的脏数据包括:缺失值,异常值,不一致的值,重复数据以及含有特殊符号的数据。

  

  缺失值分析:包括记录和记录中某个字段信息的缺失,二者都会造成分析结果的不准确。

缺失值产生的原因,1是有些信息暂时无法获取,或者获取信息的代价太大;2是有些信息是被遗漏的;3是属性值不存在。在某些情况下,缺失值并不意味着数据有错误。

缺失值也有他的影响,比如数据挖掘建模将丢失大量的有用信息,数据挖掘模型所表现的不确定性更加显著,模型中蕴含的规律更难以把握,包含空值的数据会使建模过程先入混乱,导致不可靠的输出。缺失值也是可以处理的,有删除存在缺失值的记录,对可能值进行插补和不处理的情况。

  异常值分析:是检验数据是否有录入错误以及含有不合理的数据。忽视异常值的方式是非常危险的,不加剔除的把异常值包括进数据的计算分析过程中,对结果会产生不良影响,重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。异常值是指样本中个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。异常值分析有以下个方法。1是简单统计计量分析,可以先对变量做描述性统计,进而查看那些数据是不合理的。最常常的统计值是最大值和最小值,用于判断这个变量的取值是否超过了合理部分范围。2是3δ原则,如果数据服从正态分布,在3δ原则下,异常值被定义未一组测定值中与平均值的偏差超过3倍的标准差的值。在正态分布的假设下,距离平均值3δ之外的值出现的概率是属于极个别的小概率事件。如果数据不服从正态分布,也可以用远距离平均值的多少倍标准差来描述。

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

  数据不一致性是指数据的矛盾性,不相容性。直接对不一致的数据进行挖掘,可能会产生于实际相违背的挖掘结果。

3.2数据特征分析

  对数据进行质量分析以后,接下来可通过绘制图表,计算某些特征等手段进行数据结构的特征分析。

  分布分析:分布分析能揭示数据的分布特征和分布类型。对于定量数据,欲了解其分布形式是对称的还是非对称的,发现某些特大或者特小的可疑值,可通过绘制频率分布表,绘制频率分布直方图,绘制茎叶图进行直观的分析,对于定性分类数据,可用于图饼和条形图直观的显示分布情况。  定量数据的分布分析,对于定量变量而言,选择组数和组宽是做频率分布分析时最主要的问题,一般而言按照以下步骤进行。求极差,决定组距与组数,决定分点,列出频率分布表,绘制频率分布直方图。遵循的主要原则,各组之间必须是相互排斥的,各组必须将所有的数据包含在内,各组的组宽最好是相等的。 对于定性变量,常常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。

  对比分析:是指把二个或者多个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。特别适用于指标间的横纵向比较、时间序列的比较分析,在对比分析中,选择合适的对比的标准是十分关键的步骤,只有选择合适的,才能做到客观的的评价。主要有二种形式,绝对数比较和相对数比较,绝对数比较是利用绝对数进行对比,从而寻找差异的一种方法。相对数比较是由二个联系的指标对比计算的,用以反映客观现象之间数量联系程度的综合指标,其数值表现为相对数。

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

集中趋势度量,均值作为一个统计量,均值的主要问题是对极端值很敏感。如果数据中存在极端值或者数据是偏态分布的。那么均值就不能很好地度量数据集中趋势。为了消除少数极端值的 影响,可以使用截断均值或者中无数来度量数据的集中趋势。截断均值是去掉高低端值之后的平均数。中位数是将一组观察值按照从小到大的顺序排列,位于中间的那个数,即在全部数据中,小于和大于中位数的数据个数相等。众数,众数是指数据集中出现最频繁的值,众数并不经常 用于度量定型变量的中间位置,更适合定性变量,众数不具有唯一性,当然,众数一般用于离散型变量而非连续型变量。

离中趋势度量,极差,极差对数据集的极端值非常敏感,并且忽略忽略了最大值与最小值之间的数据分布情况。标准差度量数据偏离均值的程度。变异系数,度量标准差相对均值的离中趋势,CV= S/X。变异系数主要用来比较二个或者多个具有不同单位或者不同波动幅度的数据集的离中趋势。

四分位数包括上四分位数和下四分位数。将所有数值由小到大排列并分四等份,处于第一个分割点的是下四分位数,处于第二个分割点位置是中位数,处于第三个分割点的数值是上四分位数。四分位数间距,是上下四分位之差,包含了全部观察值的一半。其值越大,说明数据变异程度越大,反之,说明变异程度越小。

  周期性分析:周期性分析是探索某个变量是否随着时间变化而呈现某种周期变化趋势,时间尺度相对较长的周期性趋势,有年度,季度,月度,周度,天度趋势等。

  

   贡献度分析:贡献度分析又称帕累托分析,它的原理是帕累托法则,又称2/8定律。同样的投入放在不同的地方产生不同的效益。

  相关性分析:分析连续变量之间线性相关程度的强弱,并用于适当的统计指标表示出来的过程称为相关分析。1.直接绘制散点图,判断二个变量是否具有线性相关关系的最直接方法是直接绘制散点图。2.绘制散点矩阵图,需要同时考察多个变量间的相关关系时,一一绘制他们间的简单散点图是十分麻烦的,此时可以利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性,在进行多远线性回归时尤为重要。3.计算相关系数,为了更加准确地描述变量之间线性相关程度,可以通过计算相关系数进行相关分析。在二元变量相关分析过程中比较常用的有Pearson相关系数和判定系数。Pearson相关系数用于分析二个连续性变量之间的关系,Spearman秩相关系数,pearson线性相关要求连续变量的取值服从正态分布,不服从正态分布的变量,分类或者等级之间的关联性可采用Spearman秩相关系数,也称为等级相关系数来描述。因为一个变量的相同取值必须有相同的秩次,所有在计算中的秩次是排序后所在位置的平均值。只有二个变量具有严格单调的函数关系,那么他们就是完全Spearsman相关的,这是与pearson相关不同,pearson相关只有在变量具有线性关系时才完全相关的。 判定系数是相关系数的平方,用于衡量回归方程对y的解释程度。

3.3数据探索函数

 Python中用于数据探索的库主要是Pandas数据分析和 Matplotlib数据可视化。其中,pands提供大量的与数据探索相关性的函数,这些探索函数可大致分为统计特征函数与统计作图函数,而作图函数又依赖Matplotlib。

  基本统计特征函数,统计特征函数用于计算数据的均值,方差,标准差,分位数,相关系数,协方差等,这些统计特征反映出数据的整体分布。

sum()计算数据样本的总和

mean()计算数据样本的算术平均值

var()计算样品的方差

std()计算数据样本的标准差

corr()计算数据样本的SpearmanPearson相关系数矩阵

cov()计算数据样本的协方差矩阵

skew()样本值的偏度(三阶矩)

kurt()样本值的峰度(四阶矩)

describe()给出样本的基本描述

  拓展统计特征函数,主要有累积计算cum和滚动计算pd.rolling。

cumsum()   依次给出前1,2,3,···,n个数的和

cumprod()  依次给出前1,2,3,···,n个数的积

cummax()  依次给出前1,2,3,···,n个数的最大值

cummin()  依次给出前1,2,3,···,n个数的最小值

   

  统计作图函数,通过统计作图函数绘制的图表可以直接的反映数据以及统计计量性质以及内在规律,主要应用于matplotlib库,

plot()  绘制二维图,折线图

pie()  绘制饼图

hist()  绘制二维条形直方图,可显示数据的分配情形

boxplot()  绘制样本的箱型图

  

4.数据预处理

  数据预处理的主要内容包括数据清洗,数据集成,数据变换和数据规约。

4.1数据清洗,主要是删除原始数据集中的无关数据,重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值,异常值等。    

处理缺失值的方法有三类,删除记录,数据插补和不处理。数据插补方法最常用,插补方法有几种:1均值中位数众数插补,根据属性值的类型,用该属性取值的均值中位数众数插补。2使用固定值,将缺失值的属性值用一个常数替换。3最近临插补,在记录中找到与缺失样本最接近的样本的该属性值插补。4回归方法,对带有缺失值的变量,根据已有数据和其有关的其他变量的数据建立拟合模型预测缺失的属性值。5差值法,插值法是利用已知点建立合适的差值函数,未知值由对应X求出函数值近似替代。如果通过删除小部分记录,达到既定目标,那么删除含有缺失值的方法是做有效的,然而这种方法却又很大局限。  

异常值处理,在处理时,异常值是否剔除,需要视情况而定,因为有些异常值可能蕴含有用的信息。异常值常用处理方法,删除含有异常值的记录,直接将含有异常值的记录删除。视为缺失值,将异常值视为缺失值,利用缺失值处理方法进行处理,平均值修正,可用前后二个观测值的平均值修正该异常值。不处理,直接在具有异常值的数据上挖掘模型。

 将含有异常值的记录直接删除的方法简单易行但是缺点也狠明显,在观测值很少的情况下,这种删除会造成样本量不足,可能会改变变量的原有分布,从而造成分析结果的不准确。视为缺失值处理的好处可以利用现有变量的信息,对异常值进行填补。在很多情况下,要先分析异常出现的可能原因,在判断异常值是否应该舍弃,如果是正确的数据,可以直接在具有异常值数据集上进行挖掘建模。

4.2数据集成

  数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并做一个一致数据存储的过程,如数据仓库。在数据集成时,来自多个数据源的现实的表达形式是不一样的,有可能不匹配,要考虑实体识别问题和属性冗余问题,从而将数据源在最低层上加以转换,提炼和集成。  实体识别,指从不同数据源识别出现实世界的实体,它的任务是统一不同源数据的矛盾之处,同名异义,异名同义,单位不统一。 冗余属性识别,数据集成往往导致数据冗余,同一属性多次出现,同一属性命名不一致导致重复,仔细整合不同数据能减少甚至避免数据冗余与不一致,从而提高数据挖掘的速度和质量。对于冗余属性要先分析,检测到后再将其删除。有些冗余属性可以用相关分析检测,给定二个数值型的属性A和B,根据其属性值,用相关数度量一个属性在大多程度上蕴含另一个属性。

4.3数据变换

   数据变换主要对数据进行规范化处理,将数据转换成适当的形式,用于挖掘任务以及算法的需要。简单函数变换,是对原始数据进行某些数学函数变换,常用的变换包括平方,开方,取对数,差分运算。简单的函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据,在时间序列中,有时简单的对数变换或者差分运算就可以将非平稳序列转换成平稳序列。

规范化,数据规范化(归一化)处理事数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲,数值间差别可能很大,不进行处理可能影响到数据分析的结果,为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,以便进行综合分析,数据规范化对于基于距离挖掘的挖掘算法尤为重要。最小-最大规范化也是离差标准化,是对原始数据的线性变换,将数值值映射到【0,1】之间。离散标准化保留了原始数据存在的关系,是消除量纲和数据取值范围影响的最简单办法,这种处理方法的缺点是若数值集中且某个数值很大时,规范化后各值接近0,并且相差不大。零--均值规范化,也称为标准差标准化,经过处理的数据均值为0,标准差为1.x=(x-原数据均值)/标准差。 小数定标规范化,通过移动属性值的小数位数,将属性值映射到【-1,1】,移动的小数位数决定属性绝对值的最大值。

连续属性离散化,一些数据挖掘算法,特别是某些分类算法,ID3和Apriori算法,要求数据是分类属性形式,这样,常常需要将连续属性换成分类属性,即连续属性离散化。1离散化的过程,就是数据的取值范围内设定若干离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或者整数值代表在每个子区间的数据值,所有,离散化涉及二个任务,确定分类以及如何将连续属性值映射到这些分类值。 常用离散化方法。1等宽法,将属性的值域分成具有相同宽度的区间,区间的个体由数据本身的特点决定,或者由用户指定,类似制作频率分布图。2等频法,将相同数量的记录放进每个区间。这二种方法简单,易于操作,但是需要人为的规定划分区间个数。同时,等宽法缺点在它离群点比较敏感,倾向于不均匀的把属性值分布到各个区间,有些区间包含许多数据,而另一些区间的数据极少,这样会严重损坏建立的决策模型。等频法虽然避免了上述问题的产生,却可能将相同的数据值分到不同区间以满足每个区间固定的数据个数。3基于聚类分析法,一维聚类的方法包括二个步骤,首先将连续属性值用于聚类算法(K-Means)进行聚类,然后再将聚类得到的镞进行处理,合并到一个镞的连续属性值并作同一标记,聚类分析的离散化也需要用户指定簇的个数从而决定产生的区间数。 4.属性构造,在数据挖掘过程中为了提取更有用的信息,挖掘更深层次的模式,提高挖掘结果的精度,我们需要利用已有的属性构造出新的属性,并加入到现有的属性中。

5.小波基函数,小波基函数是一种具有局部支集函数,并且平均值为0,小波基函数有Haar小波基,db系列小波基.

4.4数据规约

  在大数据上进行复杂的数据分析和数据挖掘需要很长时间,数据规约产生更小,但是保持原有数据完整性的新数据集,在规约后的数据集上进行分析和数据挖掘将更有效率。数据规约的意义在于,降低无效,错误数据对建模的影响,提高建模的准确性,少量且代表性的数据将大幅度缩减数据挖掘所需要的时间。降低数据存储的成本。

4.1属性规约

  属性规约通过属性合并来创建属性维数,或者直接通过删除不相关的属性来减少数据维度,从而提高数据挖掘的效率,降低计算成本,属性规约的目标是寻找出最少的属性子集并确保新数据子集的概率分布,尽肯能接近数据概率分布。

合并属性:将一些就属性合并为新属性

逐步向前选择:从一个空属性集开始,每次从原来的属性集合中选择一个当前最优的属性添加到当前属性子集中。直到无法选择出最优属性或者满足一定阈值约束为止。

逐步向后选择:从一个全属性开始,每次从当前属性子集中选择一个当前最差的属性并将其当前属性子集中消去,直到无法选择出最差属性为止或者满足一定阈值约束为止。

决策树归纳:利用决策树的归纳方法初始数据进行分类归纳学习,获得一个初始决策树,所有没有出现在这个决策树上的属性局可以认为无关属性,因此将这些属性从初始集合中删除,就可以获取一个较优的属性子集。

主成分分析:用较少的变量去解释原始数据中大部分变量,即将许多相关性很高的变量转换成彼此相互独立或者不相关的变量。

 4.2数值规约

  数值规约指通过选择代替的,较小的数据来减少数据量,包括参数方法包括参数方法和无参数方法两类。有参数方法是使用一个模型来评估数据,只需要存放参数,而不是存放实际数据。无参数方法就是需要存放实际数据。

5.挖掘建模

  数据挖掘目标和数据形式可以建立分类与预测,聚类分析,关联规则,时序模式和偏差检测等模型,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力。

5.1分类与预测

  分类和预测是预测问题的两种主要类型,分类主要是预测分类标号,离散属性,而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值。

分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。分类建模建立在一有类标记得数据集上,模型在已有样本上准备可方便的计算,所以分类属于有监督的学习。

预测是指建立二种或者二种以上变量相互间依赖的函数模型,进行预测或者控制。

实现过程:分类算法有二步,第一步学习步,通过归纳分析训练样本集建立分类模型得到分类规则,第二步分类步,先用已知的测试样本集评估分类的准确率,如果准备率是可以接受的,则使用该模型对未知标号的待测样本进行预测。预测模型的实现也有二步,第一步通过训练集建立预测属性的函数模型,第二步在模型通过检测后进行预测或者控制。

 分类与预测算法

1回归分析,确定预测属性数值型与其他变量相互依赖的定量关系最常用方法。包括线性回归,非线性回归,Logistic回归,岭回归,主成分回归,偏最小二乘归等模型。

2决策树,采用自顶而下的递归方式,在内部节点进行属性值比较,并根据不同的属性值,从该节点向下分支,最终得到的节点是学习划分的类。

3人工神经网络,是一种模仿大脑神经网络结构和功能而建立的信息处理系统,表示神经网络的输入与输出变量之间关系模型。

4贝叶斯网络,又信度网络,是Bayes方法的拓展,是目前不确定知识表达和推理领域最有效的理论模型之一。

5支持向量机是一种通过某种非线性映射,把低维的线性可分,在高维空间进行线性分析的算法。

5.2聚类分析

  聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。

原文地址:https://www.cnblogs.com/caochucheng/p/10539282.html