Python 多维数据可视化

多维度(3维以上)数据的可视化,用常规的方法不太好实现。本文介绍几种用Python实现的将多维数据展示在二维平面中的方法。

1.数据

以经典的鸢尾花数据集为例(原始数据下载:CSDN或者GitHub)。
以下是5条经过格式处理的数据,为了便于后面可视化展示(格式处理数据集下载:GitHub)。

Sepal Length Sepal Width Petal Length Petal Width Species
6.4 2.8 5.6 2.2 virginica
5 2.3 3.3 1 versicolor
4.9 2.5 4.5 1.7 virginica
4.9 3.1 1.5 0.1 setosa
5.7 3.8 1.7 0.3 setosa

前4列是鸢尾花的4个特征,最后1列是鸢尾花的3种分类。

2.数据可视化

2.1 平行坐标

图中每条垂直的线代表一个特征,表中一行的数据在图中表现为一条折线,不同颜色的线表示不同的类别。

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import parallel_coordinates

data = pd.read_csv('D:\\iris.csv')

plt.figure('多维度-parallel_coordinates')
plt.title('parallel_coordinates')
parallel_coordinates(data, 'Species', color=['blue', 'green', 'red', 'yellow'])
plt.show()

平行坐标

2.2 RadViz雷达图

4个特征对应于单位圆上的4个点,圆中每一个散点代表表中一行数据。可以想象为每个散点上都有4条线分别连接到4个特征点上,而特征值(经过标准化处理)就表示这4条线施加在散点上的力,每个点的位置恰好使其受力平衡。

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import radviz

data = pd.read_csv('D:\\iris.csv')

plt.figure('多维度-radviz')
plt.title('radviz')
radviz(data, 'Species', color=['blue', 'green', 'red', 'yellow'])
plt.show()

RadViz

2.3 Andrews曲线

特征值转化为傅里叶序列的系数,不同颜色的曲线代表不同的类别。

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import andrews_curves

data = pd.read_csv('D:\\iris.csv')

plt.figure('多维度-andrews_curves')
plt.title('andrews_curves')
andrews_curves(data, 'Species', color=['blue', 'green', 'red', 'yellow'])
plt.show()

Andrews曲线

2.4 矩阵图

表示不同特征之间的关系。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv('D:\\iris.csv')

sns.pairplot(data, hue='Species')
plt.show()

矩阵图

2.5 相关系数热力图

表示不同特征之间的相关性(Pearson相关系数),数值越大,相关性越高。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv('D:\\iris.csv')

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

相关系数热力图

3. 参考资料

  1. 多维数据可视化方法,看这一篇就够了
  2. Python数据可视化, 看这一篇就够了
  3. 基于Python的数据可视化:从一维到多维

欢迎关注我的微信公众号:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/michael_f2008/article/details/107494667