因为平时经常要对数据什么的进行可视化,但又一直没有时间整理出一套完整的体系,所以不如柿子捡软的捏用最经典的数据集做一份Demo做参考。

About Iris

Iris数据集由Fisher在一九三六年整理,包含四个特征

  • Sepal.Length(花萼长度)
  • Sepal.Width(花萼宽度)
  • Petal.Length(花瓣长度)
  • Petal.Width(花瓣宽度)

特征值都为正浮点数,单位为厘米。
目标值为鸢尾花的分类,包含三类

  • Iris Setosa(山鸢尾)
  • Iris Versicolour(杂色鸢尾)
  • Iris Virginica(维吉尼亚鸢尾)
sepal_length sepal_width petal_length petal_width species
5.1 3.5 1.4 0.2 I. setosa
4.9 3.0 1.4 0.2 I. setosa
4.7 3.2 1.3 0.2 I. setosa
4.6 3.1 1.5 0.2 I. setosa
5.0 3.6 1.4 0.2 I. setosa
6.1 2.8 4.7 1.2 I. versicolor
6.4 2.9 4.3 1.3 I. versicolor
6.6 3.0 4.4 1.4 I. versicolor
6.8 2.8 4.8 1.4 I. versicolor
6.7 3.0 5.0 1.7 I. versicolor
6.7 3.0 5.2 2.3 I. virginica
6.3 2.5 5.0 1.9 I. virginica
6.5 3.0 5.2 2.0 I. virginica
6.2 3.4 5.4 2.3 I. virginica
5.9 3.0 5.1 1.8 I. virginica

Get start

prepare

导入所需的包,其中Iris已经包含在sklearn中

import sklearn
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from pandas.tools.plotting import radviz
from pandas.tools.plotting import andrews_curves
from pandas.tools.plotting import parallel_coordinates

数据预处理

iris = load_iris()
iris_feature = pd.DataFrame(iris.data)
iris_target = pd.DataFrame(iris.target)
iris_feature.columns = ['sepal_length','sepal_width','petal_length','petal_width']
iris_target.columns = ['species']
iris_target['species'] = iris_target['species'].map({0:'I. setosa',1:'I. versicolor',2:'I. virginica'})
iris = pd.concat([iris_feature,iris_target],axis = 1)

可视化

特征间的关系

分析花瓣花萼之间长宽的关系:

sns.jointplot(x='sepal_length', y='sepal_width', data=iris, kind='reg')
sns.jointplot(x='petal_length', y='petal_width', data=iris, kind='reg')

Iris Data set visulization
Iris Data set visulization

pearsonr为皮尔森相关系数,其绝对值:

  • 0.8-1.0 极强相关
  • 0.6-0.8 强相关
  • 0.4-0.6 中等程度相关
  • 0.2-0.4 弱相关
  • 0.0-0.2 极弱相关或无相关
    所以说花瓣的长宽极强相关,花萼的长宽极弱相关或无相关

P值:
一般p值小于0.05就是显著了;如果小于0.01就更显著;例如p值=0.001,就是很高的显著水平了,只要显著,就可以下结论说:拒绝原假设无关,两组数据显著相关也说两者间确实有明显关系。通常需要p值小于0.1,最好小于0.05设甚至0.01,才可得出结论:两组数据有明显关系,如果p=0.5,远大于0.1,只能说明相关程度不明显甚至不相关.起码不是线性相关。

仔细分析不难发现四个特征之间两两之间相关系数可以算出六个,所以是时候画个相关系数矩阵了。

sns.heatmap(
    iris_feature.corr(),
    annot=True
)
plt.show()

Iris Data set visulization

线箱图、小提琴图

解释以及笑话

线箱图
Iris Data set visulization
小提琴图
Iris Data set visulization
(冷)笑话
Iris Data set visulization

iris.boxplot(by='species',grid=sns.color_palette(),figsize = (16,16))

Iris Data set visulization

plt.figure(figsize=(20, 10))
plt.subplot(2, 2, 1)
sns.violinplot(x='species', y='sepal_length', data=iris)
plt.subplot(2, 2, 2)
sns.violinplot(x='species', y='sepal_width', data=iris)
plt.subplot(2, 2, 3)
sns.violinplot(x='species', y='petal_length', data=iris)
plt.subplot(2, 2, 4)
sns.violinplot(x='species', y='petal_width', data=iris)

Iris Data set visulization

散点图与核密度估计图

散点图

sns.FacetGrid(iris, hue="species", size=5).map(plt.scatter, "sepal_length", "sepal_width").add_legend()
sns.FacetGrid(iris, hue="species", size=5).map(plt.scatter, "petal_length", "petal_width").add_legend()

Iris Data set visulizationIris Data set visulization

核密度估计图

sns.FacetGrid(iris, hue="species", size=5).map(sns.kdeplot, 'sepal_length').add_legend()
sns.FacetGrid(iris, hue="species", size=5).map(sns.kdeplot, 'sepal_width').add_legend()
sns.FacetGrid(iris, hue="species", size=5).map(sns.kdeplot, 'petal_length').add_legend()
sns.FacetGrid(iris, hue="species", size=5).map(sns.kdeplot, 'petal_width').add_legend()

Iris Data set visulization

另一种方法与解释

散点图与核密度估计图还是画一起更好,顺便也粗略的解释了一下核密度估计图

sns.pairplot(iris, hue="species", size=3, diag_kind="kde")

Iris Data set visulization
粗略的解释
Iris Data set visulization

Andrews Curves

Andrews Curves
大概意思是用二维的图表示多维的特征

andrews_curves(iris, "species",color=sns.color_palette())
parallel_coordinates(iris, "species",color=sns.color_palette())

Iris Data set visulization
Iris Data set visulization

雷达图

这个有点神奇,触及了我的知识盲区……

radviz(iris, 'species',None,color=sns.color_palette())

Iris Data set visulization

相关文章:

  • 2020-10-21
  • 2021-06-14
  • 2022-12-23
  • 2022-12-23
  • 2021-06-30
  • 2021-10-11
  • 2021-10-30
  • 2021-05-17
猜你喜欢
  • 2021-07-04
  • 2022-12-23
  • 2021-11-15
  • 2021-07-06
  • 2021-10-14
  • 2022-12-23
相关资源
相似解决方案