多维度(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()
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()
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. 参考资料
欢迎关注我的微信公众号: