专栏首页张俊红python数据科学-多变量数据分析

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

总第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的例子)。
  • 箱型图怎么看(多变量数据概览)。

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

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

本文分享自微信公众号 - 张俊红(zhangjunhong0428),作者:张俊红

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用Python实现数据偏移

    现在有如下这么一张表,这张表存储了每个uid在不同周(w)的订单情况。我们想知道每个用户在不同周内消费频次的变化情况。消费频次变化的标准就是这周订单数和上周订单...

    张俊红
  • 讲讲异方差的检验

    我们前面讲了异方差,也讲了怎么用图示法来判断是否有异方差,这一篇来讲讲怎么用统计的方法来判断有没有异方差。

    张俊红
  • Python数据分析,系统步骤介绍!

    在用Python做数据分析的过程中,有一些操作步骤和逻辑框架是很固定的,只需要记住其用法即可。本节内容介绍Pandas模块在数据分析中的常用方法。

    张俊红
  • 让你瞬间提高工作效率的常用js函数汇总(持续更新)

    本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下:

    徐小夕
  • SAPCAR 压缩解压软件的使用方法

    SAPCAR 是 SAP 公司使用的压缩解压软件,从 SAP 网站下载的补丁包和小型软件基本都是扩展名为 car 或 sar 的,它们都可以用 SAPCAR ...

    matinal
  • 让你瞬间提高工作效率的常用js函数汇总(持续更新)

    本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下:

    徐小夕
  • 递归+回溯求解数独问题

    导读:回溯是常用的算法理论之一,很多规模较大、直接分析较为复杂的问题都可以考虑用回溯求解,例如N皇后问题、骑士周游和走迷宫问题等。本质上,回溯问题是一种优化后的...

    luanhz
  • MySQL新建库 添加用户及权限 MySQL的Grant命令

    REATE DATABASE IF NOT EXISTS `wordpress`;

    用户7657330
  • 实战渗透 | 向吃鸡外挂站开炮

    发现大多数都是用的一套aspx的程序,可惜没有源码不能白盒审计,黑盒也找不到什么洞

    HACK学习
  • 研究丨中国智能制造业运行特征及转型升级路线

    导读:以互联网为核心的新一代信息技术加快推广普及,推动企业组织流程、商业模式创新。一是互联网技术激发了用户被搁置的多样化个性化需求,企业传统商业模式、组织架构难...

    钱塘数据

扫码关注云+社区

领取腾讯云代金券