python数据分析与实战挖掘_python数据分析与挖掘实战(PART1)

本文是《python数据分析与挖掘实战》学习笔记,持续更新。

PART1:包含前四章第一章 数据挖掘的基础

第二章 Python数据分析简介

第三章 数据探索

第四章 数据预处理

重点:

4.1.1 拉格朗日插值法

*********************************************************************************************

第一章 数据挖掘的基础

1.1 某知名连锁餐饮企业的困惑

当前市场环境下,原材料,人力和租金成本呈现上升的趋势,不可避免,如何在保证质量的同时,提高效率?

为此,餐饮企业,已经有以下管理系统上线:

1)客户关系管理系统

2)前厅管理系统

3)后厨管理系统

4)财务管理系统

5) 物资管理系统

以上系统存储的数据是原始数据(分析数据)的来源。

1.2 从餐饮服务到数据挖掘

数据挖掘:依赖业务系统中存储的数据,挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法、工具和过程。它是利用各种分析工具在大量数据中寻找其规律和发现模型与数据之间关系的过程,是统计学、数据库技术和人工智能技术的综合。

1.3 数据挖掘的基本任务

基本任务包括利用分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等方法,帮助企业提取数据中蕴含的商业价值,提高企业的竞争力。就是通过选择'多个特征',进行数据分析,得出结果。

1.4 数据挖掘建模过程

1.4.1 定义挖掘目标

针对具体的数据挖掘应用需求,首先要明确本次的挖掘目标是什么?系统完成后能达到什么样的效果。

相当于STAR原则中T(task),明确你的目标,需要达成的效果,通过什么指标来体现。

1.4.2 数据取样

取样标准:一是相关性,二是可靠性,三是有效性,每一个被选择的概率是相同的,体现随机性和独立性,而不是动用全部企业数据。通过对数据样本的精选,不仅能减少数据处理量,节省系统资源。

衡量取样数据质量的标准如下:

1)资料完整无缺,各类指标项齐全。

2)数据准确无误,反映的都是正常(而不是异常)状态下的水平。

对获取的数据,可再从中进行抽样操作。取样常见方式如下:随机抽样:在采用随机抽样方式时,数据集中的每一组观测值都有相同的被抽样的概率。

等距抽样:如按5%的比例对一个有100组观测值的数据集进行等距抽样,则有100/5=20,等距抽样方式是取第20、40、60、80和第100这5组观测值。

分层抽样:首先将样本总体分成若干层次(或者说分成若干个子集)。在每个层次中的观测值都具有相同的被选用的概率,但对不同的层次可设定不同的概率。这样的抽样结果通常具有更好的代表性,进而使模型具有更好的拟合精度。

从起始顺序抽样:这种抽样方式是从输入数据集的起始处开始抽样。抽样的数量可以给定一个百分比,或者直接给定选取观测值的组数。

分类抽样:在前述几种抽样方式中,并不考虑抽取样本的具体取值。分类抽样则依据某种属性的取值来选择数据子集,如按客户名称分类、按地址区域分类等。

1.4.3 数据探索

拿到样本数据后,需要做以下思考:它是否达到我们原来设想的要求(特征和标签齐全);属性(特征)之间有什么相关性;数据是否可以按照数值型,分类-数值型,分类-字符串型,时间序列型处理。

1.4.4 数据预处理

主要包括:数据筛选、数据变量转换、缺失值处理、坏数据处理、数据标准化、主成分分析、属性选择、数据规约。

1.4.5 数据建模

样本抽取完成并经预处理后,接下来要考虑的问题是:本次建模属于数据挖掘应用中的哪类问题(分类、聚类、关联规则、时序模式或者智能推荐),选用哪种算法进行模型构建?餐饮建模

1.4.6 模型评价

模型评价的目的之一就是自动选择模型,另外就是要根据业务对模型进行解释和应用。

1.4.7 挖掘工具

Python(Matrix Laboratory,矩阵实验室),具备强大的科学及工程计算能力,它不但具有以矩阵计算为基础的强大数学计算能力和分析功能,而且还具有丰富的可视化图形表现功能和方便的程序设计能力。Python并不提供一个专门的数据挖掘环境,但它提供非常多的相关算法的实现函数,是学习和开发数据挖掘算法的很好选择。

**********************************************************************************

第二章 Python数据分析简介

其他文章已有介绍,不在赘述!

*********************************************************************************

第三章 数据探索

在1.4.3小节,收集数据后,需要思考它是否达到我们原来设想的要求(特征和标签齐全);属性(特征)之间有什么相关性。

数据挖掘分为数据质量分析(数据预处理)和数据特征分析。

3.1 数据质量分析

数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据,包括缺失值,异常值,不一致的值,重复数据及含有特殊符号(如#、¥、*)的数据。

3.1.1 缺失值分析

数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确,以下从缺失值产生的原因及影响等方面展开分析。

(1)缺失值产生的原因

1)有些信息暂时无法获取,或者获取信息的代价太大。

2)有些信息是被遗漏的。可能是因为输入时认为不重要、忘记填写或对数据理解错误等一些人为因素而遗漏,也可能是由于数据采集设备的故障、存储介质的故障、传输媒体的故障等非人为原因而丢失。

3)属性值不存在。在某些情况下,缺失值并不意味着数据有错误。对一些对象来说某些属性值是不存在的,如一个未婚者的配偶姓名、一个儿童的固定收入等。

(2)缺失值的影响

1)数据挖掘建模将丢失大量的有用信息。

2)数据挖掘模型所表现出的不确定性更加显著,模型中蕴涵的规律更难把握。

3)包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。

(3)缺失值的分析

使用简单的统计分析,可以得到含有缺失值的属性的个数,以及每个属性的未缺失数、缺失数与缺失率等。从总体上来说,缺失值的处理分为删除存在缺失值的记录、对可能值进行插补和不处理3种情况。

3.1.2 异常值分析

异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。

(1)简单统计量分析(描述性统计分析)

可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范

围。如客户年龄的最大值为199岁,则该变量的取值存在异常。

(2)3σ原则(正态分布)

如果数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3σ之外的值出现的概率为P(|x-μ|>3σ)≤0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

(3)箱型图分析

箱型图提供了识别异常值的一个标准。正常值介于(Q1 -1.5IQR,Q3+1.5IQR),Q1 称为下四分位数,Q3 称为上四分位数;IQR称为四分位数间距,IQR=Q3-Q1,正常值之外的,即是异常值。

箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性。箱型图

3.1.3 一致性分析

数据不一致性是指数据的矛盾性、不相容性。直接对不一致的数据进行挖掘,可能会产生与实际相违背的挖掘结果。在数据挖掘过程中,不一致数据的产生主要发生在数据集成的过程中,这可能是由于被挖掘数据是来自于从不同的数据源、对于重复存放的数据,未能进行一致性更新。

3.2 数据特征分析

3.2.1 分布分析定量数据的分布分析

定量变量而言,选择“组数”和“组宽”是做频率分布分析时最主要的问题,一般按照以下步骤进行。

1)求极差(全距)。

2)决定组距与组数。

3)决定分点。

4)列出频率分布表。

5)绘制频率分布直方图。

遵循的主要原则如下。

1)各组之间必须是相互排斥的。

2)各组必须将所有的数据包含在内。

3)各组的组宽最好相等。

2. 定性数据的分布分析

3.2.2 对比分析

对比分析是指把两个相互联系的指标进行比较,从数量上说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。特别适用于指标间的横纵向比较、时间序列的比较分析。在对比分析中,选择合适的对比标准是关键,只有选择合适,才能做出客观的评价,选择不合适,评价可能得出错误的结论。

对比分析主要有以下两种形式。

(1)绝对数比较

绝对数比较是利用绝对数进行对比,从而寻找差异的一种方法。

(2)相对数比较

相对数比较是由两个有联系的指标对比计算的,用以反映客观现象之间数量联系程度的综合指标,其数值表现为相对数。由于研究目的和对比基础不同,相对数可以分为以下几种。

1)结构相对数:将同一总体内的部分数值与全部数值对比求得比重,用以说明事物的性质、结构或质量。

2)比例相对数:将同一总体内不同部分的数值进行对比,表明总体内各部分的比例关系。

3)比较相对数:将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系。

4)强度相对数:将两个性质不同但有一定联系的总量指标进行对比,用以说明现象的强度、密度和普遍程度。

5)计划完成程度相对数:是某一时期实际完成数与计划数的对比,用以说明计划完成程度。

6)动态相对数:将同一现象在不同时期指标数值进行对比,以说明发展方向和变化的速度。

对应的图形有直方图,折线图,饼图,条形图等。

3.2.3 统计量分析集中趋势度量

1)均值

2)众数

3)中位数

2. 离散趋势

1)极差R

2)标准差STD

3)变异系数CV变异系数

4)四分位间距IQR

以下文章,有详细的介绍。失忆挺好:相亲,你拒绝嘛​zhuanlan.zhihu.com

四分位数间距:IQR=Q3-Q1,其间包含了全部观察值的一半。其值越大,说明数据的变异程度越大;反之,说明变异程度越小。

3.2.4 周期性分析

周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。时间尺度相对较长的周期性趋势有年度周期性趋势、季节性周期趋势,相对较短的有月度周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。

3.2.5 贡献度分析

帕累托图-柏拉图帕累托图

3.2.6 相关性分析直接绘制散点图相关性分析

2. 绘制散点图矩阵

需要同时考察多个变量间的相关关系时,一一绘制它们间的简单散点图是十分麻烦的。此时可利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性。

3. 计算相关系数--相关系数矩阵--热图

(1)Pearson相关系数

简单线性回归有详细的介绍,要求连续变量的取值服从正态分布。失忆挺好:机器学习---简单线性回归​zhuanlan.zhihu.comPearson相关系数

(2)Spearman秩相关系数

#本人尚未在python中对其实践#

Pearson线性相关系数要求连续变量的取值服从正态分布。不服从正态分布的变量、分类或等级变量之间的关联性可采用Spearman秩相关系数,也称等级相关系数来描述。Spearman秩相关系数

因为一个变量的相同的取值必须有相同的秩次,所以在计算中采用的秩次是排序后所在位置的平均值。只要两个变量具有严格单调的函数关系,那么它们就是完全Spearman相关的,这与Pearson相关不同,Pearson相关只有在变量具有线性关系时才是完全相关的。

在实际应用计算中,上述两种相关系数都要对其进行假设检验,使用t检验方法检验其显著性水平以确定其相关程度。

研究表明,在正态分布假定下,Spearman秩相关系数与Pearson相关系数在效率上是等价的,而对于连续测量数据,更适合用Pearson相关系数来进行分析。

(3)判定系数(决定系数)

精确度的判据,评估模型精确度,描述有多少百分比的y波动可以由回归线来描述。决定系数R平方的值越大,回归模型越精确。

#评估模型:决定系数R平方

model.score(X_test,y_test)

详细介绍,及其在python实现,可参考以下文章失忆挺好:机器学习---简单线性回归​zhuanlan.zhihu.com

判定系数是相关系数的平方,用r2 表示;用来衡量回归方程对y的解释程度。判定系数取值范围:0≤r2 ≤1。r2 越接近于1,表明x与y之间的相关性越强;r2 越接近于0,表明两个变量之间几乎没有直线相关关系。

3.3 Python主要数据探索函数

3.3.1 基本统计特征函数

3.3.2 拓展统计特征函数

3.3.3 统计作图函数

******************************************************************************

第四章 数据预处理

数据预处理包括数据清洗,数据集成,数据变换和数据规约

4.1 数据清洗

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

4.1.1 缺失值处理

处理缺失值的方法有删除记录、数据插补和不处理。

插值法:拉格朗日插值法,牛顿插值法,样条插值,分段插值插值法

(1)拉格朗日插值法

原理:

根据数学知识可知,对于平面上已知的n个点(无两点在一条直线上)可以找到一个n-1次多项式y=a0 +a1 x+a2 x2 +…+an-1 xn-1 ,使此多项式曲线过这n个点。

1)求已知的过n个点的n-1次多项式:

y=a0 +a1*x+a2*x2 +…+an-1*xn-1  (4-1)

将n个点的坐标(x1,y1),(x2,y2)…(xn,yn)代入多项式函数,得

2)将缺失的函数值对应的点x代入插值多项式得到缺失值的近似值L(x)。

缺点:新插入的数值也在改变拉格朗日曲线,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值法。

4) python实践

#导入拉格朗日插值函数

from scipy.interpolate import lagrange拉格朗日插值法

(2)牛顿插值法

1)求已知的n个点对(x1 ,y1 ),(x2 ,y2 )…(xn ,yn )的所有阶差商公式

2)联立以上差商公式建立如下插值多项式f(x)

P(x)是牛顿插值逼近函数,R(x)是误差函数。

3)将缺失的函数值对应的点x代入插值多项式得到缺失值的近似值f(x)。

牛顿插值法也是多项式插值,只是构造方式不一致,与拉格朗日插值相比,具有承袭性和易于变动节点的特点,表示的形式不同。在Python的Scipy库中,只提供了拉格朗日插值法的函数(因为实现上比较容易)。

4.1.2 异常值处理删除异常值,需慎重,内含有用信息;

视为缺失值,缺失值处理,如上例拉格朗日插值;

均值修正,上列筛选条件,也是如此;

不处理。

4.2 数据集成

4.2.1 实体识别---重新命名

(1)同名异义

(2)异名同义

(3)单位不统一

4.2.2 冗余属性识别

1)同一属性多次出现;

2)同一属性命名不一致导致重复

4.3 数据变换

4.3.1 简单函数变换

作用:简单的函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据。

在时间序列分析中,有时简单的对数变换或者差分运算就可以将非平稳序列转换成平稳序列。在数据挖掘中,简单的函数变换可能更有必要,如指数,对数变换。

4.3.2 规范化

标准化处理:不同评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。

(1)最小-最大规范化

最小-最大规范化也称为离差标准化,是对原始数据的线性变换,将数值值映射到[0,1]之间。

作用:消除量纲和数据取值范围影响的最简单方法。

缺点:若数值集中且某个数值很大,则规范化后各值会接近于0,并且将会相差不大。若将来遇到超过目前属性[min,max]取值范围的时候,会引起系统出错,需要重新确定min和max。

(2)零-均值规范化

零-均值规范化也称标准差标准化,经过处理的数据的均值为0,标准差为1。

x为原始数据的均值,σ为原始数据的标准差,是当前用得最多的数据标准化方法。

(3)小数定标规范化

通过移动属性值的小数位数,将属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值。数据规范化

4.3.3 连续属性离散化离散化的过程

离散化的方法等宽法

等频法

基于聚类分析的方法:一维聚类的方法包括两个步骤,首先将连续属性的值用聚类算法(如K-Means算法)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数

4.5 Python主要数据预处理函数

(1)interpolate功能:interpolate是Scipy的一个子库,包含了大量的插值函数,如拉格朗日插值、样条插值、高维插值等。使用前需要用from scipy.interpolate import*引入相应的插值函数,读者应该根据需要到官网查找对应的函数名。

使用格式:f=scipy.interpolate.lagrange(x,y)。这里仅仅展示了一维数据的拉格朗日插值的命令,其中x,y为对应的自变量和因变量数据。插值完成后,可以通过f(a)计算新的插值结果。

(2)unique功能:去除数据中的重复元素,得到单值元素列表。它既是Numpy库的一个函数(np.unique()),也是Series对象的一个方法。

使用格式:np.unique(D),D是一维数据,可以是list、array、Series;

D.unique(),D是Pandas的Series对象。实例:求向量A中的单值元素,并返回相关索引。

(3)isnull/notnull功能:判断每个元素是否空值/非空值。

使用格式:D.isnull()/D.notnull()。这里的D要求是Series对象,返回一个布尔Series。可以通过D[D.isnull()]或D[D.notnull()]找出D中的空值/非空值。

(4)random功能:random是Numpy的一个子库(Python本身也自带了random,但Numpy的更加强大),可以用该库下的各种函数生成服从特定分布的随机矩阵,抽样时可使用。

使用格式:np.random.rand(k,m,n,...)生成一个k×m×n×...随机矩阵,其元素均匀分布在区间(0,1)上;

np.random.randn(k,m,n,...)生成一个k×m×n×...随机矩阵,其元素服从标准正态分布。

(5)PCA功能:对指标变量矩阵进行主成分分析。使用前需要用from sklearn.decomposition import PCA引入该函数。

使用格式:model=PCA()。注意,Scikit-Learn下的PCA是一个建模式的对象,也就是说,一般的流程是建模,然后是训练model.fit(D),D为要进行主成分分析的数据矩阵,训练结束后获取模型的参数,如.components_获取特征向量,以及.explained_variance_ratio_获取各个属性的贡献率等。

实例:使用PCA()对一个10×4维的随机矩阵进行主成分分析。

***************************************************

未完待续

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