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的例子)。
- 箱型图怎么看(多变量数据概览)。
关于每篇中涉及到的知识点说明:
近期的文章,我会在每篇文章的末尾加上涉及到的知识点这一项,该项内容为我个人觉是一些比较新的点,或者是我觉得有必要提的点,仅此而已。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Valine 一款快速、简洁且高效的无后端评论系统
- 两段有趣的C代码
- 算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
- 并查集算法 详解
- SQL 中 EXISTS 用法详解
- Blazor带我重玩前端(六)
- PB 级大规模 Elasticsearch 集群运维与调优实践
- MySQL实时在线备份恢复方案
- Android通过原生请求直接获取网页内容
- matplotlib | Python强大的作图工具,让你从此驾驭图表(二)
- 设计模式 | Catalog设计模式,抵御业务方需求变动
- 【Flutter 专题】99 初识 EventBus
- LeetCode 102 | 将二叉树中同层的元素归并在一起
- Git | Git入门,成为项目管理大师(二)
- 学习|Unity3D使用协程实现减速停车效果