龙空技术网

机器学习EDA探索性数据分析(二)——特征变量分析

逃跑吧橙哥 155

前言:

如今看官们对“中位数的组距”大概比较注意,朋友们都需要剖析一些“中位数的组距”的相关内容。那么小编在网上汇集了一些对于“中位数的组距””的相关知识,希望看官们能喜欢,姐妹们一起来了解一下吧!

1 .单变量分析

数据按类型可分为:数值数据(连续数据),分类数据和有序分类数据。

说明:

数值数据:如销量,工资等。

分类数据:如颜色,性别等,每个类别是独立的。

有序分类数据:官衔,学历等,每个类别之间是有大小,顺序之分的。

一般数值型我们认为是连续型数据,有序分类数据和分类数据归结为离散数据。

1.1 连续型变量分析

1.1.1 数据的集中趋势和离散程度——箱线图

集中趋势:均值,中位数,众数。对于正态分布的数据,均值的效果比较好,而对于有偏数据,因为存在极值,所以会对均值产生影响,此时,用中位数去进行集中趋势的描述。

离散程度:方差和标准差。这两个用哪个都可,不过标准差是具有实际意义的。另外,还可以用极差,平均差,四分位差,离散系数(针对多组数据离散程度的对比)。

import numpy as npimport pandas as pddata=pd.Series(np.arange(0,16)).append(pd.Series(25))data.plot(kind='box')

1.1.2 检验数据分布的正态性。

一般可绘制P-P图,Q-Q图来进行判断。或者通过计算偏度,峰度进行判断,偏度skew(),衡量数据偏斜情况。峰度kurt(),衡量数据分布的平坦度。

P-P图P-P图反映了变量的实际累积概率与理论累积概率的符合程度,其原理在于如果数据正态,那么数据的累积比例与正态分布累积比例基本保持一致。分别计算出数据累积比例,和假定正态时的数据分布累积比例;并且将实际数据累积比例作为X轴,将对应正态分布累积比例作为Y轴,作散点图。

ProbPlot.ppplot(xlabel=None, ylabel=None, line=None, other=None, ax=None, **plotkwargs)

Q-Q图,Q-Q图反映了变量的实际分布与理论分布的符合程度,其原理在于如果数据正态,那么其假定的正态分位数会与实际数据基本一致。计算出假定正态时的数据分位数;并且将实际数据作为X轴,将假定正态时的数据分位数作为Y轴,作散点图。

import statsmodels.api as smfrom matplotlib import pyplot as plt# 样例1data = sm.datasets.longley.load()data.exog = sm.add_constant(data.exog)model = sm.OLS(data.endog, data.exog)mod_fit = model.fit()res = mod_fit.resid # 获取了构造的模型的残差,获取了数据# 主要调用方法probplot = sm.ProbPlot(res) # 实例probplotprobplot.qqplot(line='s') # 调用函数Out[10]: <Figure size 640x480 with 1 Axes>plt.show()

求偏度(Skewness)和峰度(Kurtosis)

偏度是判断曲线是否对称的指标,如果偏度为0,则分布完全对称,若偏度为正值,则说明该变量的分布为正偏态,反之为负偏态。

峰度是判断曲线陡峭和平缓的指标,如果峰度为0,则说明变量分布合适;若为正值,则分布陡峭,为负值则分布平缓,由上面所得到的分布图来看,预计为正值。

一般地:正态分布的峰度(系数)为常数3,均匀分布的峰度(系数)为常数1.8(也有说法kurtosis>0 表示与正态分布相比的尖峰, 经验证标准正态分布(0,1)峰度接近0)。

# 逐列查看偏度,峰值for col in numeric_features: print('{:15}'.format(col),  '偏度: {:05.2f}'.format(Train_data[col].skew()) ,  '峰值: {:06.2f}'.format(Train_data[col].kurt()))

1.1.3 特征指标的频数和百分位数 分布——直方图和密度估计

变量(特征)的频数表可以将该变量的极差均匀地分割为多个等距分段,并给出落在每个分段中地数值个数。如年龄段0-10,1,1-20,21-30,31-40 等等。百分位数也是一样,只不过通过数量转化成百分比,比如销量在1-5的订单数占整体的订单数的百分比,10-20区间的占比等等。

注:频数表和百分位数都是通过创建组距总结数据。一般情况下,四分位数和十分位数在每个组距中具有相同的计数,但每个组距的大小不同,将其称之为等计数组距,相反地,频数表中每个组距的大小相同,但其中的计数可以不同,将其称之为等规模组距。

密度图用一条连续的线显示数据值的分布情况。可以将密度图看作由直方图平滑得到的,尽管它通常是使用一种核密度估计量从数据中直接计算得到的。

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdata=pd.Series(np.random.normal(0, 1, 1000))plt.figure()plt.subplots_adjust(wspace=0.2)plt.subplot(1,2,1)data.plot(kind='hist',bins=14,density=True)data.plot(kind='kde')plt.xlim(-4,4)plt.subplot(1,2,2)data.plot(kind='kde')plt.xlim(-4,4)plt.rcParams['figure.figsize']=(12.0,4.0)

1.1.4 利用索引、数量等和连续型变量作散点图,直观看数据是否随机

如 每个小类的销量分布情况,Y轴为销量,X轴为该销量的小类数量。以此能够直观的看到小类粒度的销量随机分布情况。在此,如果把小类换成单个订单、中类,大类等等不同颗粒度的观察角度都是可以的。

1.2 离散变量

主要查看数据的结构。用众数看哪类数据出现的最多。利用value_counts()函数,查看各个类别出现的次数。也叫分类特征(Categorical features)。 序数特征(Ordinal features) 是分类特征中包含一定顺序的变量(如家属人数、教育程度、财产范围)。

条形图和饼图是常用来可视化分类数据的方法,条形图以条形表示每个类别出现的频数或占比情况,饼图是条形图的一种替代形式,以圆饼中的一个扇形部分表示每个类别出现的频数或占比情况。

要特别注意的是,虽然条形图与直方图非常相似,但二者之间仍存在着一些差异。在条形图中,x轴表示因子变量的不同类别,而在直方图中,x轴以数值度量的形式表示某个变量的值。另外,在直方图中,通常各个条形是相互紧邻的,条形间的间隔表示空组距(即数据中未出现的值),而在条形图中,各个条形的显示是相互独立的。

◾ 条形图——查看某一分类特征的数量分布情况

data.Outcome.value_counts().plot(kind="bar")

Outcome 为某一列。

众数是数据集中出现次数最多的类别或值,是分类数据的一个基本汇总统计量。有些数据类别可以表示成或映射到同一尺度的离散值,也就是可以与一系列的数值相关联,那么就可以根据类别出现的概率计算出一个平均值,称之为期望值,它是一种加权均值,权重使用的是类别出现的概率。

◾ 饼图

data=pd.Series(np.random.randint(1,11,20))data.plot(kind='pie')

2.二元特征变量分析

2.1连续型变量和连续型变量——相关性

相关性

相关性,是指两个变量的关联程度。无论是在数据科学还是研究中,很多建模项目的探索性数据分析都要检查预测因子之间的相关性,以及预测因子和目标变量之间的相关性。

如果一个变量的高值随另一个变量的高值的变化而变化,并且它的低值随另一个变量的低值的变化而变化,那么称这两个变量正相关。如果一个变量的高值随另一个变量的低值的变化而变化,且反之亦然,那么称这两个变量负相关。如果一个变量的变化对另一变量没有明显影响,那么称这两个变量不相关。

◾ 协方差,可以得到两个变量间的相关性。但协方差越大,并不表明越相关。因为协方差的定义中没有考虑属性值本身大小的影响。

◾ 相关系数,考虑了属性值本身大小的影响,因此是一个更合适的统计量。取值在[-1,1]上,-1表示负相关,即变换相反,1表示正相关,0则表示不相关。相关系数是序数型的,只能比较相关程度大小(绝对值比较),并不能做四则运算。

而相关系数一般常用的有三种:

◾ Pearson相关系数:这个比较常用,主要用于正态的连续型数据间的比较。但在使用时,限制的条件比较多,对于偏态数据,效果不是很好。

◾ Spearman相关系数:相比于Pearson,这个的限制条件比较少,不受异常值影响。可以应用在多种场合。但若对正太正态数据使用,则效果一般。

◾ Kendall相关系数:限制条件同Spearman。一般用在分类数据的相关性上。

注:Pearson和协方差,主要看数据间的关系是不是线性的,如不是线性,但有其他联系,这两个系数是判断不出来的。比如指数函数这种。而Spearman和Kendall则可以进行一定的判断,主要是单调增函数。

◾ 散点图(scatter-plot):在绘图中,x轴表示一个变量(特征)的值,y轴表示另一个变量的值,可以反映出y随x的变化而变化的大致趋势。

绘制两个变量间的散点图

# figure sizeplt.figure(figsize=(15,8))# Simple scatterplotax = sns.scatterplot(x='Calories', y='LightActiveDistance', data=activity1)ax.set_title('Scatterplot of calories and intense_activities')

◾ 热力图——相关矩阵(Correlation Matrix):将变量在一个表格中按行和列显示,表格中每个单元格的值是对应变量之间的相关性。

import seaborn as snsimport warningswarnings.filterwarnings("ignore") from pyforest import *wine=pd.read_csv('wine.csv')corr = wine.corr() #相关矩阵计算方法fig, ax = plt.subplots(figsize=(16, 12))ax = sns.heatmap(corr,square=True,ax=ax,annot=True)ax.set_title('Correlation coefficient')

2.2 连续型变量和离散型变量

2.2.1 箱形图和小提琴图

一些数值型数据是根据分类变量进行分组的,或者要同时比较多个变量的分布,可视化这类数据通常使用箱形图或小提琴图。如 按照门店或者门店类型进行分类,每个类型的销量情况分布。

wine_BV=wine.loc[:,['Malic acid','Total phenols','Flavanoids','Proanthocyanins','Hue']]sns.boxplot(data=wine_BV)

箱形图可以很直观的比较不同类别的(或不同特征的)数据分布

sns.violinplot(data=wine_BV)

小提琴图是箱形图的一种增强表示,它以y轴为密度来绘制密度估计量的情况。绘图中对密度做镜像并反转(即核密度函数),并填充所生成的形状,由此生成了一个类似小提琴的图形。

2.2.2 柱状图

描述某个分类的数值型变量的分布情况,如商品类别的销量,不同品牌的销量等

import numpy as npfrom matplotlib import pyplot as plt#设置中文plt.rcParams['font.sans-serif']=['KaiTi']plt.rcParams['axes.unicode_minus'] = False#数据条数x1 = np.arange(5)#随机获取第一 第二数据y1 = np.random.randint(10,20,5)y2 = np.random.randint(10,20,5)#柱状图宽度(不是间隔)bar_width  = 0.3 plt.bar(x1,y1,bar_width)plt.bar(x1+bar_width,y2,bar_width)#设置数值tick_label = ['a','b','c','d','e']#设置y轴上的数值间隔plt.xticks(x1+bar_width/2,tick_label)plt.legend(labels=["男生","女生"],loc="upper right")plt.show()

2.2.3 分类散点图

按照某一特定的列进行分类后,在每一类中探索两个连续型变量的分布关系。

例: ispromote 表示某数据中的一列,其业务含义为是否进行了促销,value值为0和1,可以按照这个字段对数据进行分类,分成两类呈现数据的分布情况,分别为0和1,用黄色表示1,蓝色表示0。

import seaborn as sns#hue :针对某一字段进行分类 sns.pairplot(data, hue = 'ispromote')

2.2.4 假设检验

Z检验/T检验 (Z-Test/ T-Test):

可以测试了两个组群的平均值是否有不同,从而确认两个变量是否有关系; 比如测试人均收入是否受到性别影响。

◾ Z检验是一般用于大样本(即样本容量大于30)

◾ T检验用于样本含量较小(例如n < 30)

方差分析 (F检验/ANOVA):

方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”或“F检验”。检验多个总体均值是否相等,通过分析观察数据的误差判断个总体均值是否相等。

◾ 单因素方差分析:

基本思想:变异分解,总变异=随机变异+处理因素导致的变异,又可以分解为总变异=组内变异+组间变异,F=组间变异/组内变异,F的值越大,处理因素的影响越大。

◾ 多因素方差分析:

研究两个及两个以上控制变量是否对观测变量产生显著影响。多因素方差分析不仅能 够分析多个因素对观测变量的独立影响,更能够分析多个控制因素的交互作用能否对观测 变量的分布产生显著影响,进而最终找到利于观测变量的最优组合。

例如:研究不同品种、不同施肥量是如何影响农作物产量的,并进一步研究哪种品种与哪种水平的施肥量是提高农作物产量的最优组合。

2.3 离散型变量和离散型变量

总体原则:可以固定某一类别,对其中另一类别做频数和频率分析,进而转成了离散和连续。

◾ 双向频率表(Two-way frequency table)

横向一个特征,纵向一个特征;计算每个类别下的频率和百分比。

◾ 堆积柱形图 (Stacked Column Chart)

显示数量(中间图):可以看到每个分类的数量分布。显示百分比(最右侧图):显示每个分类的百分比,可以看到每个分类对百分比的影响。

—— 计算频率表 Gender=pd.crosstab(train['Gender'],train['Loan_Status'])——显示百分比的堆积图Gender.plot(kind="bar", stacked=True)——显示数量的堆积图:Gender.div(Gender.sum(1).astype(float),axis=0).plot(kind='bar',stacked=True)

◾ 卡方检验 Chi-Square Test

卡方检验可以用来检验变量之间是否有显著的关系;同时,它测试了变量中是否有足够有力的证据证明大的总体的关系。卡方检验师基于期望值和观察值在一个或多个类别的双向表中的频率不同,它返回了可能的卡方分布以及自由度。

P为0时,意味着两个类别变量是相互依赖的;

P为1时,则为两个变量是独立的。

P<0.05时,意味着两个变量在95%的自信区间内显著相关。

◾ Kendall相关系数计算相关性

通常需要求相关性系数的都是有序分类变量。

总结

EDA是对数据加深了解的一种思维方法,对数据清洗和特征工程都有极大的影响。

在探索性数据分析时,可以把数据分为连续和离散,但都不是绝对的。连续可以转为离散,而离散通过频数等也可以做相应的处理。其实连续离散之间没有太多的隔阂,处理问题时需要灵活看待。

统计计算和可视化是探索性数据分析强有力的工具,一方面可以支撑你的想法,另一方面也会带来灵感。

标签: #中位数的组距