python数据科学-多变量数据分析

时间:2022-05-08
本文章向大家介绍python数据科学-多变量数据分析,主要内容包括01|写在前面:、02|数据导入:、03|数据可视化:、3.2变量间关系分析、04|涉及到的知识点:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

总第87篇

01|写在前面:

在前面我们研究了单列(变量)数据情况,现实中的案例大多都是多列(变量)的,即影响一件事情的因素有多个,我们除了要看单列数据以外还需要看看这不同列之间是否存在某些联系。常见的关系有四种:无关联、强关联、简单关联和多元(非简单)关联。接下来具体看看具体如何借助可视化对多变量数据进行分析。

你可以看:python数据科学-单变量数据分析

02|数据导入:

本次的数据是用的sklearn库自带的iris数据集,那么iris数据集是什么呢?

Iris数据集是机器学习中常用的分类实验数据集,也是一个多变量分析的数据集,数据集共包含150个数据集,3个分类,每50个数据集是一类,每个数据包含4个属性(也可以理解成是特征值)。

源数据集部分

这里的前四列就是四个属性值,第五列是数据集所属的分类。数据的分类有Iris-setosa,Iris-versicolor,Iris-virginica三种,为了便于后续的进一步分析,把这三种分类分别用0,1,2代替。

#加载相关库
from sklearn.datasets import load_iris
from sklearn.preprocessing import scale
import numpy as np
import matplotlib.pyplot as plt
import itertools
%matplotlib inline
plt.style.use("bmh")

在导入相关库以后就可以加载对应的数据集进来啦。

#加载Iris数据集
data=load_iris()
x=data["data"]#将属性值赋值给x
y=data["target"]#将对象/分类值赋值给y
col_names=data["feature_names"]#列名
print("col_names:{}".format(np.unique(col_names)))#将列名打印
print("target:{}".format(np.unique(y)))#将分类打印

确认一下导入的列名和分类数据是否正常。

#iris数据集的列名,分别表示花萼长度、花萼宽度、花瓣长度、花瓣宽度
col_names:['petal length (cm)' 'petal width (cm)' 'sepal length (cm)' 'sepal width (cm)']
#数据集的分类
target:[0 1 2]#分别用0,1,2代替

03|数据可视化:

3.1多变量数据概览:

当数据集有多个变量时,我们先看看这些变量的一个整体分布情况,比较有效的表达方式就是箱型图。

#绘制图表
fig=plt.figure(1)
ax=fig.add_subplot(111)
ax.boxplot(x)
ax.set_xticklabels(data["feature_names"])

各属性值的箱型图

通过上图我们可以看出,petal width的中位数值最小,speal length的最大;speal width有异常值,而其他属性没有;speal length中的最大值时四个属性值中的最大值,petal width最小值是四个属性值中的最小值。

3.2变量间关系分析

我们一般分析两个变量之间的关系时,最简单粗暴的一种方法就是绘制这两个变量的直线,然后观察这两条直线的走势,两条直线越接近(也可以用两者的夹角大小去衡量),说明相关性越强,比如下面这两个图。

data=range(1101,1113)
sales_A=range(200,2600,200)
sales_B=range(1950,150,-150)
fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.plot(data,sales_A,label="sales_A")
ax2=ax1.twinx()
ax2.plot(data,sales_B,c="r",label="sales_B")
ax1.legend(loc="upper center")
ax2.legend(loc="lower center")

AB两种产品销量随时间变化

该图反映了两种产品随着时间的推移成负相关关系,在日常业务中新产品上市时,新旧产品之间会出现这种关系,比如你把A产品当作iphone8,B产品当作iphone7,7销量开始下降的时候正是8上市的时候。

data=range(1101,1113)
sales_A=range(200,2600,200)
sales_B=range(150,1950,150)
plt.subplot()
plt.plot(data,sales_A,label="sales_A")
plt.plot(data,sales_B,label="sales_B")
plt.legend(loc="best")

AB两种产品销量随时间变化

通过这个图可以看出AB两产品的销量是呈比较强的相关性,在业务中很典型的一个例子就是啤酒和尿布之间的关系。

当然了,如同第一节中提到的,可视化图表只是让我们对整体的数据有一个大概的认识,不太具体。关于衡量两个变量具体的相关性大小可以用相关性系数来衡量。这里先不涉及。

上面的相关性分析常用于变量是“时序数据”的情景下,用来表示随着时间的推移,两个变量呈现一个什么样的关系。那么“非时序数据”我们该怎么破呢?

这里用散点图去进行分析,之所以用散点图是因散点图是以点的形式表示,可以通过看不同变量的分布情况来分析不同变量之间的关系。

#将多变量数据进行可视化
#绘出6个子图形,包括以下几列:花萼长度、花萼宽度、花瓣长度、花瓣宽度(四个属性值两两组合)
plt.close("all")
plt.figure(1)

#绘制一个3行2列的图
subplot_start=321
col_numbers=range(0,4)

#给图形添加标签
col_pairs=itertools.combinations(col_numbers,2)
plt.subplots_adjust(left=0.2,right=1.2,top=2.0,bottom=0.6,hspace=0.5)

for col_pair in col_pairs:
    plt.subplot(subplot_start)
    plt.scatter(x[:,col_pair[0]],x[:,col_pair[1]],c=y)
    plt.xlabel(col_names[col_pair[0]])
    plt.ylabel(col_names[col_pair[1]])
    subplot_start+=1

不同属性值两两组合后的散点图

上图中三种颜色代表三个不同的分类,通过图表可以看出petal length和petal width对类的分类效果最好(当petal length<2,petal width<1时,属于“0”类,当两者继续往大时属于“1”类,达到最大时,属于“2”类),而speal legenth和speal width对类的分类效果最差。

小小的总结一下:如果是要看两个变量随着时间推移呈现出什么样的关系时,可以绘制折线图参考;而如果要看两个变量与所属类别之间关系时,可以绘制散点图进行参考。

04|涉及到的知识点:

  • 同一个坐标中绘制两条或多条折线(啤酒和尿布的例子)。
  • 同一个坐标中绘制两条Y轴(iphone8和iphone7的例子)。
  • 箱型图怎么看(多变量数据概览)。

关于每篇中涉及到的知识点说明:

近期的文章,我会在每篇文章的末尾加上涉及到的知识点这一项,该项内容为我个人觉是一些比较新的点,或者是我觉得有必要提的点,仅此而已。