数据挖掘(9-22):数据离散程度+数据清理+三大相关系数+数据库索引(数据库面试常问)+P值含义及理解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jasminexjf/article/details/101144545
收起
1.衡量数据离散程度的统计量:
数据的离散程度即衡量一组数据的分散程度如何,其衡量的标准和方式有很多,而具体选择哪一种方式则需要依据实际的数据要求进行抉择。
首先针对不同的衡量方式的应用场景大体归纳如下:
极差:极差为数据样本中的最大值与最小值的差值R=max(i)-min(i),是所有方式中最为简单的一种,它反应了数据样本的数值范围,是最基本的衡量数据离散程度的方式,受极值影响较大。如在数学考试中,一个班学生得分的极差为60,放映了学习最好的学生与学习最差的学生得分差距为60.
四分位差:即数据样本的上四分之一位和下四分之一位的差值Q_{d}=Q_{u}-Q_{l},放映了数据中间50%部分的离散程度,其数值越小表明数据越集中,数值越大表明数据越离散,同时由于中位数位于四分位数之间,故四分位差也放映出中位数对于数据样本的代表程度,越小代表程度越高,越大代表程度越低。
平均差:即M_{d}=\frac{\sum_{n}^{i=1}\left |x_{n} -\bar{x} \right |}{n},针对分组数据为M_{d}=\frac{\sum_{n}^{i=1}\left |x_{n} -\bar{x} \right |f_{i}}{n}。各变量值与平均值的差的绝对值之和除以总数n,平均差以平均数为中心,能全面准确的反应一组数据的离散状况,平均差越大,说明数据离散程度越大,反之,离散程度越小。
方差/标准差:方差是各变量与平均值的差的平方和除以总数n-1s{2}=\frac{\sum_{n}{i=1}(x_{i}-\bar{x}){2}}{n-1},针对分组数据s{2}=\frac{\sum_{n}{i=1}(x_{i}-\bar{x}){2}f_{i}}{n-1},方差开根号后为标准差,方差与标准差都能很好的反应数据的离散程度。
异种比率:是指非众数组的频数占总频数的比例。V_{r}=\frac{\sum f_{i}-f_{m}}{\sum f_{i}}=1-\frac{f_{m}}{\sum f_{i}}其中\sum f_{i}为变量值的总频数,为众数组的频数。异种比率越大,说明非众数组的频数占总频数的比重越大,众数的代表性越差,即占比越小,异种比率越小,说明众数的代表性越好,即占比越大。异种比率主要适合度量分类数据的离散程度,当然连续数据可以计算异种比率。
离散系数:即变异系数,针对不同数据样本的标准差和方差,因数据衡量单位不同其结果自然无法直接进行对比,为出具一个相同的衡量指标,则进行了离散系数的计算。离散系数为一组数据的标准差与平均数之比V_{i}=\frac{s}{\bar{x}}。
import numpy as np
import stats as sts
scores = [31, 24, 23, 25, 14, 25, 13, 12, 14, 23,
32, 34, 43, 41, 21, 23, 26, 26, 34, 42,
43, 25, 24, 23, 24, 44, 23, 14, 52,32,
42, 44, 35, 28, 17, 21, 32, 42, 12, 34]
#集中趋势的度量
print(‘求和:’,np.sum(scores))
print(‘个数:’,len(scores))
print(‘平均值:’,np.mean(scores))
print(‘中位数:’,np.median(scores))
print(‘众数:’,sts.mode(scores))
print(‘上四分位数’,sts.quantile(scores,p=0.25))
print(‘下四分位数’,sts.quantile(scores,p=0.75))
#离散趋势的度量
print(‘最大值:’,np.max(scores))
print(‘最小值:’,np.min(scores))
print(‘极差:’,np.max(scores)-np.min(scores))
print(‘四分位差’,sts.quantile(scores,p=0.75)-sts.quantile(scores,p=0.25))
print(‘标准差:’,np.std(scores))
print(‘方差:’,np.var(scores))
print(‘离散系数:’,np.std(scores)/np.mean(scores))
#偏度与峰度的度量
print(‘偏度:’,sts.skewness(scores))
print(‘峰度:’,sts.kurtosis(scores))
2.数据清理引申出的知识点:
1、概述
实际的数据库极易受噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源。低质量的数据将会导致低质量的挖掘结果。有大量的数据预处理技术:
这可以提高设计距离度量的挖掘算法的准确率和效率。这些技术不是排斥的,可以一起使用。
1.1、数据质量 数据如果能满足其应用的要求,那么它是高质量的。数据质量涉及许多因素,包括:准确率、完整性、一致性、时效性、可信性和可解释性。
数据预处理(数据清理+集成+规约+变换) —— 特征选择(过滤式+包裹式+嵌入式) —— 降维(PCA+LDA)
如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:
(1)、当相关系数为0时,X和Y两变量无关系。
(2)、当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间。
(3)、当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间。
相关系数的绝对值越大,相关性越强,相关系数越接近于1或-1,相关度越强,相关系数越接近于0,相关度越弱。
通常情况下通过以下取值范围判断变量的相关强度:
相关系数 0.8-1.0 极强相关
0.6-0.8 强相关
0.4-0.6 中等程度相关
0.2-0.4 弱相关
0.0-0.2 极弱相关或无相关
1、pearson相关系数简介
皮尔逊相关也称为积差相关(或积矩相关)是英国统计学家皮尔逊于20世纪提出的一种计算直线相关的方法。
假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:
公式一:
皮尔逊相关系数计算公式
公式二:
皮尔逊相关系数计算公式
公式三:
皮尔逊相关系数计算公式
公式四:
皮尔逊相关系数计算公式
以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。
2、pearson相关系数适用范围
当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:
(1)、两个变量之间是线性关系,都是连续数据。
(2)、两个变量的总体是正态分布,或接近正态的单峰分布。
(3)、两个变量的观测值是成对的,每对观测值之间相互独立。
即:连续数据、正态分布数据、线性关系数据更适合用pearson相关系数来衡量,用Spearman没有pearson好。
3、Spearman相关系数简介
在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希腊字母ρ(rho)表示其值。斯皮尔曼等级相关系数用来估计两个变量X、Y之间的相关性,其中变量间的相关性可以使用单调函数来描述。如果两个变量取值的两个集合中均不存在相同的两个元素,那么,当其中一个变量可以表示为另一个变量的很好的单调函数时(即两个变量的变化趋势相同),两个变量之间的ρ可以达到+1或-1。
假设两个随机变量分别为X、Y(也可以看做两个集合),它们的元素个数均为N,两个随即变量取的第i(1<=i<=N)个值分别用Xi、Yi表示。对X、Y进行排序(同时为升序或降序),得到两个元素排行集合x、y,其中元素xi、yi分别为Xi在X中的排行以及Yi在Y中的排行。将集合x、y中的元素对应相减得到一个排行差分集合d,其中di=xi-yi,1<=i<=N。随机变量X、Y之间的斯皮尔曼等级相关系数可以由x、y或者d计算得到,其计算方式如下所示:
由排行差分集合d计算而得(公式一):
斯皮尔曼等级相关系数公式一
由排行集合x、y计算而得(斯皮尔曼等级相关系数同时也被认为是经过排行的两个随即变量的皮尔逊相关系数,以下实际是计算x、y的皮尔逊相关系数)(公式二):
斯皮尔曼等级相关系数公式二
4、Spearman相关系数适用范围
斯皮尔曼等级相关系数对数据条件的要求没有皮尔逊相关系数严格,只要两个变量的观测值是成对的等级评定资料,或者是由连续变量观测资料转化得到的等级资料,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关系数来进行研究。【单调相关性】
5、Kendall相关系数简介
在统计学中,肯德尔相关系数是以Maurice Kendall命名的,并经常用希腊字母τ(tau)表示其值。肯德尔相关系数是一个用来测量两个随机变量相关性的统计值。一个肯德尔检验是一个无参数假设检验,它使用计算而得的相关系数去检验两个随机变量的统计依赖性。肯德尔相关系数的取值范围在-1到1之间,当τ为1时,表示两个随机变量拥有一致的等级相关性;当τ为-1时,表示两个随机变量拥有完全相反的等级相关性;当τ为0时,表示两个随机变量是相互独立的。
假设两个随机变量分别为X、Y(也可以看做两个集合),它们的元素个数均为N,两个随即变量取的第i(1<=i<=N)个值分别用Xi、Yi表示。X与Y中的对应元素组成一个元素对集合XY,其包含的元素为(Xi, Yi)(1<=i<=N)。当集合XY中任意两个元素(Xi, Yi)与(Xj, Yj)的排行相同时(也就是说当出现情况1或2时;情况1:Xi>Xj且Yi>Yj,情况2:Xi
这里有三个公式计算肯德尔相关系数的值
公式一:
肯德尔相关系数公式1
其中C表示XY中拥有一致性的元素对数(两个元素为一对);D表示XY中拥有不一致性的元素对数。
注意:这一公式仅适用于集合X与Y中均不存在相同元素的情况(集合中各个元素唯一)。
公式二:
肯德尔相关系数公式2
注意:这一公式适用于集合X或Y中存在相同元素的情况(当然,如果X或Y中均不存在相同的元素时,公式二便等同于公式一)。
其中C、D与公式一中相同;
肯德尔相关系数公式2-子公式1;肯德尔相关系数公式2-子公式2;肯德尔相关系数公式2-子公式3
N1、N2分别是针对集合X、Y计算的,现在以计算N1为例,给出N1的由来(N2的计算可以类推):
将X中的相同元素分别组合成小集合,s表示集合X中拥有的小集合数(例如X包含元素:1 2 3 4 3 3 2,那么这里得到的s则为2,因为只有2、3有相同元素),Ui表示第i个小集合所包含的元素数。N2在集合Y的基础上计算而得。
公式三:
肯德尔相关系数公式3
注意:这一公式中没有再考虑集合X、或Y中存在相同元素给最后的统计值带来的影响。公式三的这一计算形式仅适用于用表格表示的随机变量X、Y之间相关系数的计算。
6.Kendall相关系数的适用范围:
肯德尔相关系数与斯皮尔曼相关系数对数据条件的要求相同,
单调相关性;与spearman区别在于某一比较数据需要有序,在有序情况下计算速度比spearman快。
三个相关系数关系如上。
python实现:
def pearson(vector1, vector2):
n = len(vector1)
#simple sums
sum1 = sum(float(vector1[i]) for i in range(n))
sum2 = sum(float(vector2[i]) for i in range(n))
#sum up the squares
sum1_pow = sum([pow(v, 2.0) for v in vector1])
sum2_pow = sum([pow(v, 2.0) for v in vector2])
#sum up the products
p_sum = sum([vector1[i]vector2[i] for i in range(n)])
#分子num,分母den
num = p_sum - (sum1sum2/n)
den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
if den == 0:
return 0.0
return num/den
用两个向量进行测试:
vector1 = [2,7,18,88,157,90,177,570]
vector2 = [3,5,15,90,180, 88,160,580]
运行结果为0.998,可见这两组数是高度正相关的。
import pandas as pd
df = pd.DataFrame({‘A’:[5,91,3],‘B’:[90,15,66],‘C’:[93,27,3]})
print(df.corr())
print(df.corr(‘spearman’))
print(df.corr(‘kendall’))
df2 = pd.DataFrame({‘A’:[7,93,5],‘B’:[88,13,64],‘C’:[93,27,3]})
print(df2.corr())
print(df2.corr(‘spearman’))
print(df2.corr(‘kendall’))
一些结论:
A.pearson相关系数的取值范围是[-1,1],值越接近1,表明两个随机变量越正线性相关。
B.如果两随机变量有严格的单调函数关系,则他们是Spearman相关
C.Pearson相关系数要求变量服从正态分布。
D.Kendall相关系数主要用于分析有序数据(单调相关性)。
4.关于数据库索引:
1 首先数据量小的表不需要建立索引,因为小的表即使建立索引也不会有大的用处,还会增加额外的索引开销
2 不经常引用的列不要建立索引,因为不常用,即使建立了索引也没有多大意义
3 经常频繁更新的列不要建立索引,因为肯定会影响插入或更新的效率
思考:表中建立了索引后,导入大量数据为什么会慢?或者说表中建立索引后,为什么更新数据会很慢?
答:对已经建立了索引的表中插入数据时,插入一条数据就要对该记录【按索引排序】。因此,导入大量数据的时候速度会很慢。
解决办法:在没有任何索引的情况下插入数据,然后再建立索引。而更新就无法避免了。就像3说的一样,经常更新的列就不要建立索引。
4 索引并不是一劳永逸的,用的时间长了需要进行整理或者重建。
初学者在Oracle中使用索引,可以使用EM的建议(EM的Advisor Central中找SQL Access Advisor)
注意:有时候查询语句中的索引没有发挥作用,这又是为什么呢?
答:在很多情况下,虽然查询语句使用了索引,但是索引并没有发挥作用。例如:在WHERE条件的LIKE关键字匹配的字符串以”%“开头,这种情况下,索引是不会起到作用的;WHERE条件中使用OR关键字来连接多个查询条件,如果有一个条件没有使用索引,那么其他的索引也不会起作用;多列索引的第一个字段没有使用,那么这个多列索引也不会起作用。
解决办法:根据这些情况,必须对这些语句进行相应的优化。
【1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。2、索引越多,更新数据的速度越慢。】
主键一定是唯一性索引,唯一性索引并不一定就是主键。
一个表中可以有多个唯一性索引,但只能有一个主键。
主键列不允许空值,而唯一性索引列允许空值。
索引可以提高查询的速度。
主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中
索引的缺点是更新数据时效率低,因为需要更新索引(应该先更新数据,再建立索引 ; 先插入数据,再建立索引)
区分度与索引长度的权衡
2.索引长度越长,区分度就高,虽然利于查找了,但是索引在内存中占得空间就多了。
数据库索引的优缺点:
索引最大的好处是提高查询速度,
缺点是更新数据时效率低,因为要同时更新索引
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。
数据库常见面试问题集锦(多看):数据库常见面试问题(附答案) !!!!!!
5.统计量P值含义及优缺点:[原/零假设+备择假设]
P-值是在原假设为真的条件下某一统计量的取值以其观察值为最小值或最大值的事件的小概率,或说某一统计量的取值以其观察值为最小值或最大值是一个小概率事件,此小概率就是 P。(我所理解的)
P值的各路定义:在一个假设检验问题中,利用观测值能够做出拒绝原假设的最小显著性水平称为 P-值。对于 P-值的理解,一般情况下有这几种认识:
(1) 拒绝原假设的最小显著性水平。
(2) 观察到的(实例样本的) 显著性水平。
(3) 表示对原假设的支持程度,是用于确定是否应该拒绝原假设的另一种方法。
(4) 一种概率,一种在原假设为真的前提下出现观察样本以及更极端情况的概率。
(5) 我们在拒绝原假设的犯的最小的第一类错误,而所规定的显著性水平(具有主观性)是事先给定的犯第一类错误的最大错误。
P 值:在假设原假设(H0)正确时,出现现状或更差的情况的概率。P值越小,我们拒绝原假设的理由越充分。
显著性水平:拒绝零假设时的 P 值阈值,一般取 5%。
解释:P值就是指在原假设为真的情况下,当前观测样本(或更极端的情况)所发生的条件概率。如果这个概率很小,说明是小概率事件。在原假设成立的情况下,竟然发生了小概率事件,那么当然要拒绝原假设了。
other:
假设检验传统方法:
假设检验新方法:
找到估算参数的最佳统计量,然后使用自助法模拟抽样分布。然后你可以利用抽样分布,帮助选择合适的假设检验。
sample = df.sample(n)
diff = []
for _ in range(10000):
# 从实际样本中有放回抽样,容量与实际样本容量相同,模拟抽样分布
sample_xbar = sample(sample.shape[0],replace=True)
# 天添加每个样本的统计量,此处假设是样本是某属性的均值
diff.append(sample_xbar[‘col_name’].mean)
null_vals = np.random.normal(x_mean, np.std(diff),10000)
(null_vals > sample[‘col_name’].mean()).mean()
上图中红线代表实际样本统计量在零假设分布中的位置。