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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

n-gram文法中数据稀疏问题解决方案之一:Good-Turing平滑

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 统计语言模型中,N元语法模型不可避免...

40040
来自专栏小鹏的专栏

TensorFlow 聊天机器人

上一次提到了不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。 自己动手做聊天机器人教程 我最近每天都会学一点,拿出解读来和大家分享一下。 本文结...

31460
来自专栏人工智能头条

深度学习和自然语言处理中的Attention和Memory机制

44750
来自专栏大数据挖掘DT机器学习

用TensorFlow实现文本分析模型,做个聊天机器人

不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。 自己动手做聊天机器人教程 http://www.shareditor.com/blogshow...

48950
来自专栏CreateAMind

Unsupervised Learning of Latent Physical Properties Using

https://www.groundai.com/project/unsupervised-learning-of-latent-physical-proper...

8030
来自专栏人工智能

概念学习:“Find-S 算法”,机器学习的敲门砖

在之前的博客中,我们讲到了一台机器通过机器学习所能完成的壮举,以及深入学习机器学习之前必备的数学知识。那么,在理解了机器学习的先决条件之后,就让我们迈着小而高效...

60790
来自专栏机器之心

专栏 | 阿里IJCAI 2017 Workshop论文:使用深度强化学习方法求解一类新型三维装箱问题

机器之心专栏 阿里菜鸟物流人工智能部 据机器之心了解,阿里巴巴有 11 篇论文入选如今正在墨尔本进行的 IJCAI 2017 大会,其中 6 篇来自阿里巴巴-浙...

1.1K60
来自专栏PPV课数据科学社区

用 TensorFlow 做个聊天机器人

本文结构: 聊天机器人的架构简图 用 TensorFlow 实现 Chatbot 的模型 如何准备 chatbot 的训练数据 Chatbot 源码解读 1. ...

33830
来自专栏AI科技大本营的专栏

AI技术讲座精选:用端到端训练模型进行语法智能纠错

现有的拼写检查系统可以识别拼写错误,但无法识别出语法错误,本文的亮点在于使用流行的 seq2seq + attention 模型,在大规模拼写检查数据集上进行训...

67890
来自专栏AI研习社

神经机器翻译的编码 - 解码架构有了新进展, 具体要怎么配置?

用于循环神经网络的编码 - 解码架构,在标准机器翻译基准上取得了最新的成果,并被用于工业翻译服务的核心。 该模型很简单,但是考虑到训练所需的大量数据,以及调整模...

27640

扫码关注云+社区

领取腾讯云代金券